涉及工作中Linux常用命令详解
一、Linux
1.汇总
lz按照自己实际工作中(类别是从一些教学网站上截取的)
文件/目录操作 | 磁盘操作 | 网络通讯 | 系统操作 | 备份压缩 | 其他命令 |
---|---|---|---|---|---|
cat | cd | telnet | ps | tar | bc |
find | pwd | netstat | top | zip | head |
grep | ls | ifconfig | free | unzip | tail |
sed | mkdir | ping | crontab | gzip | xargs |
cut | rmdir | date | ip | ||
awk | df | kill | nohup | ||
chmod | passwd | man | |||
chown | export | curl | |||
read | set | wget | |||
mv | unset | ifconfig | |||
rm | reset | ||||
touch | setenv | ||||
cp | sudo | ||||
scp | clear | ||||
rcp | uname | ||||
expr | whoami | ||||
wc | rpm | ||||
let | useradd | ||||
more | userdel | ||||
usermod | |||||
groupadd | |||||
exit | |||||
sleep | |||||
reboot | |||||
shutdown | |||||
halt | |||||
id | |||||
chkconfig |
2.具体使用
cat
1.语法
cat [option] filename
2.作用:查看文件,也可新建 or 修改文件
2.option
-b 对非空行输出行号
-n 输出所有行号
3.eg
cat filename // 查看文件
cat >filename // 新建文件 or 覆盖原有文件内容
cat >>filename // 追加内容到文件的末尾
cat f1 f2 > file // 合并f1 f2文件到file中
cat -b filename
cat -n filename
结合其他命令使用(伪代码)
cat filename | grep
cat filename | cut
cat filename | sed
find
1.语法
find pathname [option...] [-print/-exec/-ok ...]
2.作用:查找指定文件,并执行相应的命令
3.option
-name // 根据文件名称,可正则匹配
-type // 根据文件类型 d:目录 f:文件
-user // 根据文件属组
-group // 根据文件所属的组
-size n // 查找指定文件大小的文件 +1000c
-mmin n // 查找系统中最后n分钟被改变文件数据的文件
-amin n // 查找系统中最后n分钟访问的文件
-atime n // 查找系统中最后n*24小时访问的文件 (用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件)
-maxdepth n 最大查找目录深度
-print // 匹配到的文件输出到标准输出中
-exec // 匹配到的文件执行该参数给出的shell命令,模板:'command' {} \;
-ok // 以安全模式执行shell命令,以询问的方式
4.eg
find ./ -name '*.log' // 查找当前目录下以.log为后缀的文件
find -atime -2 // 查找48h内修改过的文件
find -mmin -5 // 查找5min内修改过的文件
find ./ -type f -mmin +1 -name "*.log" // 查找1min前修改过的并且是文件名以.log为后缀的文件
find -size +1000c // 查找大于1K的文件
find /tmp -size +100M // 查找tmp下文件大小大于100M的文件
find ./ -type f "*.log" -exec 'rm' {} \; // 查找文件名以.log为后缀的文件并且删除
find ./ -type f -mmin -10 -name "*.log" -exec 'rm' {} \; // 查找当前目录下5min内修改过内容的并且文件名以.log为后缀的文件然后执行删除命令
find ./ -type f "*.log" | xargs rm -f // 通过结合xargs执行rm命令
grep
Global Regular Expression Print(全局正则表达式搜索)
1.语法
grep [option] pattern file|dir
2.作用:对数据进行行提取,不改变源文件内容-可搭配正则使用
3.option
-v #对内容进行取反提取(打印出不符合条件的内容)
-n #对提取的内容显示行号
-w #精确匹配
-i #忽略大小写
^ #匹配开头行首
-E #正则匹配
-r 递归查找文件(当前目录以及子目录下所有所有的文件)
-c --count 计算匹配的列数
-f 从文件中读取关键词
4.正则表达式
^ #锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* #一起用代表任意字符。
[] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) #标记匹配字符,如'\(love\)',love被标记为1。
\< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b #单词锁定符,如: '\bgrep\b'只匹配grep。
5.eg
grep zhuyz *.txt // 查找当前路径下后缀为.txt的所有文件中包含zhuyz字符串的文件,并且打印出该文件的行
grep -r zhuyz ./ // 递归查找当前目录下以及子目录下的所有文件中包含zhuyz字符串的文件,并且打印出该文件的行
grep -v zhuyz abc.txt // 查找文件中不包含有zhuyz字符串的行内容,并且打印出这些行
grep -rn zhuyz * // 递归查找当前路径下以及子路径下所有文件 && 显示行号
grep '\W' abc.txt // 正则匹配\W:匹配非字母、数字、下划线
ps -ef | grep zookeeper // 查看zookeeper的进程
ps -ef | grep zookeeper -c // 查看zookeeper进程个数(查看zk集群有几台节点)
cat abc.txt | grep -f zhuyz // 从文件中读取关键字zhuyz的行内容
grep -E 'zhuyz|zyz' abc.txt // 从文件中读取含有zhuyz或者zyz的行内容
生产中查看日志:
grep -n '2021-02-28 12:00:00' *.log | grep -n 'ERROR' *.log | grep -n 'Exception' *.log
find ./ -type f -name "*.log" | xargs grep "ERROR|Exception" // 匹配找到当前目录以及子目录下以.log后缀的文件,传递给grep命令执行。
sed
Stream Editor(流编辑)
1.语法
sed [选项][动作] 文件名 | sed [-hnV][-e<script>][-f<script文件>][文本文件]
2.对数据行进行处理(选取,新增,替换,删除,搜索)-可搭配正则使用
3.常见的选项与参数:
-n #把匹配到的行输出打印到屏幕
-e #表示可以执行多条动作[以选项中指定的script来处理输入的文本文件。]
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
's' 就是替换的命令, 'g' 为本行中全局替换,如果不加 'g' 只换该行中出现的第一个。
eg:'s/a/b/g':把a替换成b
4.正则表达式
^ #锚定行的开始 如:'^sed'匹配所有以sed开头的行。
$ #锚定行的结束 如:'sed$'匹配所有以sed结尾的行。
. #匹配一个非换行符的字符 如:'s.d'匹配s后接一个任意字符,然后是d。
* #匹配零个或多个先前字符 如:'*sed'匹配所有一个或多个空格后紧跟sed的行。
.* #一起用代表任意字符。
[] #匹配一个指定范围内的字符,如'[Ss]ed'匹配Sed和sed。
[^] #匹配一个不在指定范围内的字符,如:'[^A-H]ed'匹配不包含A-H的一个字母开头,紧跟ed的行。
\(..\) #标记匹配字符,如'\(love\)',love被标记为1。
\< #锚定单词的开始,如:'\<sed'匹配包含以sed开头的单词的行。
\> #锚定单词的结束,如'sed\>'匹配包含以sed结尾的单词的行。
x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'S\w*ed'匹配以S后跟零个或多个文字或数字字符,然后是ed。
\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b #单词锁定符,如: '\bsedp\b'只匹配sed。
5.eg
p #以行为单位进行查询,通常与-n一起使用[打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~]
eg:df -h | sed -n '2p'
d #删除[删除,因为是删除啊,所以 d 后面通常不接任何咚咚;]
eg: sed '2d' df.txt // 删除第2行
eg: sed '2,5d' df.txt // 删除第2-5行
eg: sed '2,$d' df.txt // 删除第2行到最后1行
a #在行的下面插入新的内容[新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~]
eg: sed '2a 1234567890' df.txt // 在第2行下面新增1行
i #在行的上面插入新的内容[插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);]
eg: sed '2i 1234567890' df.txt // 在第2行上面新增1行1234567890的内容
eg: sed '2,5i 1234567890' df.txt // 灵异插入,自己试试
c #替换[取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!]
eg: sed '2c 1234567890' df.txt // 替换第2行的内容为1234567890
eg: sed '2,5c 1234567890' df.txt // 替换第2-5行的内容为1234567890
s/要被取代的内容/新的字符串/g #指定内容进行替换[取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!]-(可使用正则)
eg:sed 's/0%/100%/g' df.txt
eg:cat df.txt | sed 's/[0-9]/\*/g' // 把数字替换成*(*是元字符,所以需要\转义)
-i #对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
eg: sed -i '1i aaa' df.txt // 把aaa写入到df.txt的第一行
搜索:在文件中搜索内容或者搜寻并删除(可使用正则)
eg:cat -n df.txt | sed -n '/100%/p' // 检索关键字内容行(和p结合使用一定要加—n)
eg:cat -n df.txt | sed '/100%/d' // 检索并删除关键字内容行,显示其他行
eg:cat abc.txt | sed -n '/^e/p' // 检索并查找以e为开头的行内容
-e #表示可以执行多条动作
eg:cat -n df.txt | sed -n -e 's/100%/100%-----100%/g' -e '/100%-----100%/p
eg:cat -n /etc/passwd | sed -e '3,$d' -e 's/root/re-root/g' // 删除/etc/passwd第3行到末尾的数据,并把root替换为re-root
正则(如果sed命令想要使用正则匹配,一定要加上/)
eg:sed -n '/[a-z]/p' df.txt
cut
1.语法
cut OPTION... [FILE]...
2.作用:对数据进行列的提取
3.option
-d #指定分割符
-f #指定截取区域
-c #以字符为单位进行分割
4.eg
-d和-f
以':'为分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
以':'为分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
以':'为分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd
-c
截取/etc/passwd文件从第二个字符到第九个字符
cut -c 2-9 /etc/passwd
awk
1.语法
awk [option] 'script' var=value file(s)
或awk [option] -f scriptfile var=value file(s)
awk '{[pattern] action}' {filenames}
awk -F "分隔符" 'script' {filenames}
awk -v # 设置变量
awk -f {awk脚本} {文件名}
awk '条件 {执行动作}'文件名
awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
或awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
2.作用:数据检索(列的操作)
3.option
-F // 指定列的分隔符,默认以空格或者制表符为分隔符
-f // 调用脚本
-v // 定义变量
4.运算符
$ // 列字段引用 $0:一整行 $1:第1列 $2:第2列 ...
= += -= *= /= %= ^= **= // 赋值
+ - * / % // 加,减 乘,除与求余
|| && // 逻辑或 逻辑与
~ !~ // 匹配正则表达式和不匹配正则表达式
< <= > >= != == // 关系运算符
log.txt文件内容:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
eg:awk '$1>2' log.txt // 输出[第1列大于2]的行
eg:awk '$1>2 {print $1,$2}' log.txt // 检索[第1列大于2]的行,输出第1列和第2列
eg:awk '$1*2==4' log.txt // 检索输出[第1列乘以2等于4]的行
eg:awk '$1*2%==0 && $1<4' log.txt // 检索输出[第1列取余等于0并且第1列小于4]的行
5.内建变量
NF // 字段数量变量
NR // 行号
\t // 制表符
\n // 换行符
FS // BEGIN时定义分隔符
~ // 包含(可结合正则使用,看下面eg)
!~ // 不包含(可结合正则使用,看下面eg)
FS // Field Separator:输入字段分隔符, 默认为空白字符
log.txt文件内容:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
ha hello
hi hello
a b
# NF
eg:awk 'NF<3' log.txt // 检索输出[列字段数小于3]的行
eg:awk 'NF<3 && $1 ~ /h/' log.txt // 检索输出[列字段数小于3并且第1列包含h]的行
eg:awk 'NF<3 && $1 ~ /^ha/' log.txt // 检索输出[列字段数小于3并且第1列以ha开头]的行
eg:awk 'NF<3 && $1 ~ /^ha/ {print $1,$2}' // 检索[列字段数小于3并且第1列以ha开头]的行,输出第1列和第2列
# NR
eg:cat log.txt | awk 'NR==2 {print $3}' // 检索[行等于2]的行,输出第3列
eg:awk '(NR>=2 && NR<=5) {print $1}' /etc/passwd // 检索[行大于等于2并且小于等于5]的行,输出第1列
# \t \n
eg:awk -F ' ' '{print $1"\t"$2}' log.txt // 以空格为分隔符,输出第1列、\t、第2列
eg:awk -F ' ' '{print $1"\n"$2}' log.txt // 以空格为分隔符,输出第1列、\n、第2列
# BEGIN(执行前的语句,在读取所有行内容前就开始执行) END(处理完所有的行后要执行的语句)
eg(截取自菜鸟教程,很不错):
1.cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
2.awk脚本文件: score.awk
#!/bin/awk -f
#!/bin/awk -f
#运行前
BEGIN {
math = 0
english = 0
computer = 0
printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
printf "---------------------------------------------\n"
}
#运行中
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
printf "---------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", math, english, computer
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
3.执行命令
awk -f score.awk score.txt
4.输出:
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
# ~ !~ (可结合正则使用)
eg:awk '$1 ~ /ha/' log.txt // 检索输出[第1列包含ha]的行内容
eg:awk '$1 ~ /^h/' log.txt // 检索输出[第1列以h开头]的行内容
eg:awk '$1 !~ /^h/' log.txt // 检索输出[第1列不以h开头]的行内容
6.结合正则使用eg
.....待补充
7.其他的一些eg
printf #格式化输出,不会自动换行。
(%ns:字符串型,n代表有多少个字符; %ni:整型,n代表输出几个数字;%.nf:浮点型,n代表的是小数点后有多少个
小数)
print #打印出内容,默认会自动换行
\t #制表符
\n #换行符
eg:printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6
eg:df -h |grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}'
小数:echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'
-F #指定分割符
eg:cat /etc/passwd | awk -F":" '{print $1}'
8.更多参考
8个有力的 Awk 内建变量:https://www.runoob.com/w3cnote/8-awesome-awk-built-in-variables.html
持续进阶更新…奥利剋