linux基础命令合集 1.grep(在每个文件或标准输入中搜索模式) 用法: grep [OPTION]... PATTERN [FILE]... 默认情况下,PATTERN是基本正则表达式(BRE)。 示例:grep -i 'hello world' example.txt -i #忽略大小写 -v #不匹配的字符 -n #输出行号 -c #统计每个文件匹配到的个数 -o #只打印匹配到的一部分,不会将整行打印出来 -x #全行匹配 -T #输出内容以tab键分隔 -A #匹配到的字符下面n行 -B #匹配到的字符上面n行 -C #匹配到的字符下面、下面n行,A、B、C不能三个同时共用
2.cat more less (浏览文件) #cat是直接输出,拥有将文件内容写入另一个文件的功能,而more less支持分页浏览 cat < file == cat file cat < file1 > file2 == 将file1的内容写入file2 cat < file1 file2 > file3 == 将file1,file2的内容写入file3 cat > file == 写入 cat > file1 <<EOF something EOF == 写入
3.ls -l #显示详细信息,等于ll,显示信息格式: #文件类型|文件权限|连接数|拥有者|所属组|文件大小|文件最近修改时间|文件名 #在LINUX中,一切皆文件,文件类型包含: - #一般文件 d #目录 l #链接文件 b #款设备文件 c #字符设备文件 s #套接字文件 p #管道文件 --block-size=M #设置文件大小单位 -a #显示所有隐藏文件 -A #显示所有文件,但不显示.和.. -S #按文件大小排序 -r #反向排序 -t #按时间排序 -i #显示inode
4.find 格式:find [查找目录] [参数] [匹配模型] 多参数格式:find [查找目录] [参数] [匹配模型] [参数] [匹配模型] 例如: #找出最大的文件 find / |xargs ls -Sl 2>/dev/null|head #查找在根目录(及子目录)下找以sh结尾的文件。 find / -name "*.sh" #查找在当前目录(及子目录)下找属性为755的文件。 find . -perm 755 #查找在当前目录(及子目录)下找属主为root的文件。 find . -user root #查找在/var下找更改时间在5天以内的文件。 find /var -mtime -5 #查找在/var下找更改时间在3天以前的文件。 find /var -mtime +3 #查找在/etc下查找文件类型为|的链接文件。 find /etc -type l #查找在当前目录(及子目录)下查找文件大小大于1M的文件,1M是1000000个字节。 find . -size +1000000c #查找出当前目录(及子目录)下所有权限为700的文件,并把其权限重设为777。 find . -perm 700 |xargs chmod 777 #查找出文件并查看其详细信息。 find . -type f |xargs ls -l 5.head -c #定义多少个字符 -n #定义多少行 -v #显示文件名 6.tail -c #定义多少个字符 -n #定义多少行 -v #显示文件名 -f #随着文件的增长,输出附加数据
7.xargs 用法: somecommand |xargs [OPTION]... COMMAND INITIAL-ARGS... xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如: find /etc -size 10 |xargs ls -rlt
8.alisa #创建临时别名 alisa p='ps -ef|grep -v grep|grep -i' alisa app1='ssh hwcrm@NGCRM-APP1' #取消临时别名 unalisa p unalisa app1 #创建永久别名 vim ~/.bashrc
9.which #定位命令或别名的位置 which p
10.bash快捷键 Ctrl + l ->等同于clear Ctrl + S ->锁住终端输出 Ctrl + Q ->解锁终端 Ctrl + c ->非常规中断前台进程 Ctrl + z ->挂起(暂停)前台进程,使用fg恢复到前台,bg恢复到后台执行 Ctrl + u ->删除当前行 Ctrl + h ->删除光标之前的一个字符 Ctrl + w ->删除光标之前的所有字符 Ctrl + k ->删除光标之后的所有字符 Ctrl + y ->恢复删除的内容 Ctrl + r ->搜索之前执行过的命令 Ctrl + a ->光标移动到行首 Ctrl + e ->光标移动到行尾 Ctrl + B ->光标向前移动一个字符 Ctrl + F ->光标向后移动一个字符 Alt + b ->光标向前移动一个字符串 Alt + f ->光标向后移动一个字符串 Alt + U ->切换成大写 Ctrl + X ->光标所在位置与行首切换 Alt+ . ->补全之前输入过的参数 Ctrl + d ->输入完成的正常信号 11.目录与文件 . #当前目录 / #根目录 cd #切换目录 cd - #切换到上一次进入的目录 cd .. #切换到上一层目录 cd /xxx/xxx/xxx #前往某个目录 cd ./xxx/xxx/xxx #前往当前目录下的某个子目录
12.创建目录、文件、链接,及删除 touch 1.txt #创建文件 mkdir 1 #创建目录 mkdir -p 1/2/3 #创建多层目录,如果中间不存在某个目录,就同时创建多个目录 ln 1.txt 2.txt #创建硬链接,源文件删除不影响硬链接,这意味着文件内容依然存在,被删除的只是一个文件名 ln -s 1.txt 3.txt #创建软链接,源文件被删除软链接就失效,但只有软链接可以对目录生效 #通过ls -i 可以查看文件对应的inode
13.top #监控主机资源 #top每一列的含义: PID: 进程id USER: 进程所有者的用户名 PR: 优先级 NI: nice值。负值表示高优先级,正值表示低优先级 VIRT: 进程使用的虚拟内存总量,单位kb RES: 进程使用的、未被换出的物理内存大小,单位kb SHR: 共享内存大小,单位kb S: 进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) %CPU: 上次更新到现在的CPU时间占用百分比 %MEM: 进程使用的物理内存百分比 TIME+: 进程使用的CPU时间总计,单位1/100秒 COMMAND 命令名/命令行 #top包含的内部命令包括: s –> 改变画面更新频率 l –> 关闭或开启第一部分第一行 top 信息的表示 t –> 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m –> 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 N –> 以 PID 的大小的顺序排列表示进程列表 P –> 以 CPU 占用率大小的顺序排列进程列表 M –> 以内存占用率大小的顺序排列进程列表 h –> 显示帮助 n –> 设置在进程列表所显示进程的数量 q –> 退出 top 1 -> 显示每个CPU的运行过程
14.ps ps -ef UID PID PPID C STIME TTY TIME CMD zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae UID :程序被该 UID 所拥有 PID :就是这个程序的 ID PPID :则是其上级父程序的ID C :CPU使用的资源百分比 STIME :系统启动时间 TTY :登入者的终端机位置 TIME :使用掉的CPU时间。 CMD :所下达的是什么指令
15.输入输出及管道 管道用法: cat 1.txt |grep root 管道高级用法: [|xargs]: find / |xargs ls -Sl 2>/dev/null|head 0: 输入 1: 正确输出 2: 错误输出 #将命令输出的结果,正确放入out.txt,错误放入err.txt command 1> out.txt 2>err.txt #全部放入一个文件 command 2>&1 all.txt
16.crontab 写法: crontab -e * * * * * command minute hour day month week command 其中: minute: 表示分钟,可以是从0到59之间的任何整数。 hour: 表示小时,可以是从0到23之间的任何整数。 day: 表示日期,可以是从1到31之间的任何整数。 month: 表示月份,可以是从1到12之间的任何整数。 week: 表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。 command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符: 星号(*): 代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,): 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-): 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
显示已有的定时任务: crontab -l 删除已有定时任务: crontab -r
17.正则表达式 1.特殊符号 符号 用法 "" 双引号,脱意符,能保持变量特性 '' 单引号,脱意符,作为一般字符 `` 反引号,引用命令执行的结果 \ 反斜杠,特殊字符的脱意符 ~ 波浪号,表示用户的家目录 - 短横杠,有多种意义。上一次的工作目录;用于重定向的标准输出和输入 ! 感叹号,多种意思。历史命令调用;取反(常用) $? 上一个命令执行的结果返回值。(true为0,false为非0) $A 取出A的变量值 $() 引用,与反引号相同。可以嵌套 $[] 数学运算,(+加-减*乘/除%取余**幂=等于) ${} 取出变量值,花括号起控制变量名长度的作用 @ 邮件分隔符 \# 注释符 % 作业控制 & 作业后台运行 && 命令逻辑与连接,只有当前面的命令返回值为真时才执行后面的命令 || 命令逻辑或连接,只有当前面的命令返回值为假时才会执行后面的命令 * 通配符,匹配零个或多个任意字符 ? 通配符,匹配一个任意字符 () 组合命令,改变命令执行的顺序 (()) 数学运算 [] 两边有空格,与test一样,表示判断 {} 多重意义,脚本中使用代码块;find命令中表示搜索到的结果引用 | 管道动能 : 冒号,内部命令,表示一个返回值为真的空命令 ; 分号,分隔多个连续执行的命令 < 包括>,>>,<<,2>,&>。输入输出重定向,参照补充页 . 圆点,有多种意思,第价于source命令;隐藏文件 / 文件名路径分隔符 = 字符串比较
2.POSIX字符类 POSIX字符 代表意义 [[:alnum:]] 代表英文大小写字符一数字,即 0-9,A-Z,a-z [[:alpha:]] 代表任何英文大小写字符,即A-Z,a-z [[:blank:]] 代表空白键与[tab]键两者 [[:cntrl:]] 代表键盘上面的控制按键,包括CR,LF,Tab,Del..等等 [[:digit:]] 代表数字 即0-9 [[:graph:]] 代表除了空格符(空白键和[Tab]键)外的其他所有按键 [[:lower:]] 代表小写字符,即a-z [[:print:]] 代表任何可以被打印出来的字符 [[:punct:]] 代表标点符号,即:"" : > ? < {} / . , \ | 等等 [[:upper:]] 代表大写字符,即A-Z [[:space:]] 任何会产生空白的字符,包括空白键 [tab]键 CR键 等等 [[:xdigit:]] 代表16进位的数字类型,因此包括: 0-9,A-F,a-f 的数字与符号
3.元字符 元字符 描述 \b 单词边界 \B 非单词边界 \d 单个数字字符 \D 单个非数字字符 \w 单个单词字符(字母、数字与_) \W 单个非单词字符 \n 换行符 \s 单个空白字符 \S 单个非空白字符 \r 回车
4.常规正则表达式 RE字符 意义 范例 ^word 待搜寻的字符串在行首 grep -n '^#' regular_express.txt 搜寻行首为 # 开始的那一行,并列出行号 word$ 待搜寻的字符串在行尾 grep -n '!$' regular_express.txt 将行尾为 ! 的那一行打印出来,并列出行号 . 代表一定有一个任意字符 grep -n 'e.e' regular_express.txt 搜寻的字符串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee) !,亦即 e 与 e 中间『一定』仅有一个字符, 而空格符也是字符! \ 跳脱字符,将特殊符号的特殊意义去除 grep -n \' regular_express.txt 范例:搜寻含有单引号 ' 的那一行 * 重复零个到无穷多个的前一个RE的字符 grep -n 'ess*' regular_express.txt 找出含有 (es) (ess) (esss) 等等的字符串,注意,因为 * 可以 是 0 个,所以 es 也是符合带搜寻字符串。另外,因为 * 为重复『前一个 RE 字符』的符号, 因此,在 * 之前必须要紧接着一个 RE 字符喔!例如任意字符则为 『.*』 ! [list] 字符集合,里面是要截取的字符 grep -n 'g[la]' regular_express.txt 范例:搜寻含有 (gl) 或 (gd) 的那一行,需要特别留意的是,在 [] 当 中『谨代表一个待搜寻的字符』 , 例如『 a[afl]y 』代表搜寻的字符串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思! [n1-n2] 字符集合,里面列出要截取字符范围 grep -n '[A-Z]' regular_experss.txt 搜寻含有任意数字的那一行!需特别留意,在字符集合 [] 中的减 号 - 是有特殊意义的,他代表两个字符之间的所有连续字符!但这个连续与否与 ASCII 编码有关, 因此,你的编码需要设定正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字符则为[A-Z] [^list] 反向选择,列出不要的字符串或范围 grep -n 'oo[^t]' regular_express.txt 范例:搜寻的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字符,则为[^A-Z] 。 但 是 , 需 要 特 别 注 意 的 是 , 如 果 以 grep -n [^A-Z]regular_express.txt 来搜寻, 却发现该档案内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字符』的意思, 因为每一行均有非大写字符,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小写字 \{n,m\} 1.连续n到m个的前一个RE字符 grep -n 'go\{2,3\}g' regular_express.txt 2.若为\{n\}则时连续n个的前一个RE字符 在 g 与g 之间有 2 个到 3 个的 o 存在的字符串,亦即 (goog)(gooog) 3.若是\{n,\}则是连续n个以上的前一个RE字符
5.扩展正则表达式 + 重复一个或一个以上的前一个RE字符 搜寻 (god) (good) (goood)... 等等的字符串。 那个 o+ 代表『一个以上的 o 』所以, 底下的执行成果会将第 1, 9, 13 行列出来。 egrep -n 'go+d' regular_express.txt
? 零个或一个的前一个RE字符 范例:搜寻 (gd) (god) 这两个字符串。 那个 o? 代表『空的或 1 个 o 』 所以,上面的执行成果会将第 13, 14 行列出来。 egrep -n 'go?d' regular_express.txt
| 用或(or)的方式找出数个字符串 范例:搜寻 gd 或 good 这两个字符串,注意,是『或』 ! 所以,第 1,9,14 这三行都可以被打印出来喔!那如果还想要找出 dog 呢? egrep -n 'gd|good' regular_express.txt egrep -n 'gd|good|dog' regular_express.txt
() 找出群组字符串 范例:搜寻 (glad) 或 (good) 这两个字符串,因为 g 与 d 是重复的, 所 以, 我就可以将 la 与 oo 列于 ( ) 当中,并以 | 来分隔开来,就可以啦! egrep -n 'g(la|oo)d' regular_express.txt
()+ 多个重复数组的判别 范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下! echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' 上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的"xyz" 字符串的意思~
18.类型判断 文件类型的判断 -e exist 是否存在 -d dir 是否目录 -f file 是否文件 -b Block 是否块设备 -c Character 是否字符设备 -S 是否socket -P piping 是否管道文件 -L link 是否链接文件 文件属性的判断 -s size 文件大小大于0 -r read 是否具有r权限 -w write 是否具有w权限 -x execute 是否具有x权限 -u 是否设置了suid -g 是否设置了sgid -k 是否设置了t位 文件比较 -nt new than 前一个文件比后一个文件新 -ot old than 前比后旧 -ef equipment 有相同的设备和inode号 整数运算的比较 -eq equal 两个数值相等 -ne Unequal 不相等 -gt greater than 大于 -lt less than 小于 -ge Greater than equal to or equal to 大于等于 -le Less than equal to or equal to 小于等于 变量检测 -z zero 变量为空 -n not zero 变量不为空 = 变量等于某个值 != 变量不等于某个值 多重判断的连接。 -a and 两个条件同时成立 -o or 两个条件满足一个即可 ! 条件取反
19.流程控制 1.if判断 if [];then continue elif [];then continue else continue fi
2.条件判断 case $a in 1) echo "yes"; date; ;; 2) echo "no"; sleep 5; ;; esac
3.for循环语句 for i in 1 2 3;do echo ${i};done for ((i=1;i<=100;i++));do echo ${i};done
4.while循环语句(当条件满足时执行) count=1 && while [ $count -le 6 ];do echo $count;count=$((count + 1));done cat file |while read line;do echo ${line};done
5.until循环语句(当条件不满足时执行) var=10 && until [ $var -eq 1 ];do echo $var;var=$(($var - 1));done
20.磁盘 内存: free -b,-k,-m,-g:以字节、 K、 M、 G 为单位显示大小; Mem:表示物理内存。 -/+ buffers/cache :表示缓存统计。 Swap:表示交换分区。 total:总量; used:使用量(包括 buffers 与 cache); shared:共享内存; buffers:系统 分配但未被使用的 buffers 数量(与块设备有关的高速缓冲区); cached:系统分配但未被使 用的 cached 数量(与文件 inode 有关高速缓冲区)
磁盘: df [-ahtTxil] [file] -a:显示包含虚拟文件系统,默认不显示。 -h:以人性化的格式显示单位。 -i:显示 inode 的使用信息。 -l:只显示本地文件系统。 -t:指定显示的文件系统类型。 -T:显示每个文件系统类型。 -x:指定不显示的文件系统类型。
du: 描述: 显示文件或目录的大小。 用法: du [-sh] [文件或目录名] 常用选项: -s:只显示每个参数的总量信息。 -h:以人性化的格式显示单位。 -S:单独统计每个目录的大小,不包括子目录。 -L:不统计符号链接的文件。 -x:跳过在不同的文件系统上的目录。
21.压缩 1.tar 作用:用于打包文件,类似于创建一个目录,一般在不支持目录的情况下可以使用。默认不压缩,但是可以和压缩命令一起使用,混合使用是linux里面比较常用的方法 #创建archive.tar压缩文档,包含文件foo和bar tar -cf archive.tar foo bar #详细列出archive.tar中的所有文件 tar -tvf archive.tar #从archive.tar中提取所有文件 tar -xf archive.tar
2.zip 压缩方法: zip 1.zip 1 解压方法: unzip 1.zip 压缩后、解压后原文件依然存在 压缩后: *.zip 与tar并用: tar -zcf 1.tar 1; tar -zxf 1.tar
3.gzip 压缩方法: gzip 1 解压方法: gzip 1.gz or gunzip 1.gz 压缩后、解压后原文件不存在 压缩后: *.gz 与tar并用: tar -zcf 1.tar.gz 1; tar -zxf 1.tar.gz
4.bzip2 压缩方法: bzip2 1 解压方法: bunzip2 1.bz2 压缩后、解压后原文件不存在 压缩后: *.bz2 与tar并用: tar -jcf 1.tar.bz2 1; tar -jxf 1.tar.bz2
5.compress 压缩方法: 解压方法: 压缩后、解压后原文件?存在 压缩后: *.Z 与tar并用: tar -Zcf 1.tar.Z 1; tar -Zxf 1.tar.Z