目录
在vi内使用所有这些命令!只要记住:在命令前要加上您希望处理的行范围和感叹号 (!),如 1,$!tr -d '\t'(美元符号表示最后一行)
deb文件:
dpkg-deb --fsys-tarfile file.deb | tar xvf -
tar:
tar zxf 解压gz文件、 tar zcf xxx.tar.gz xxx压缩gz文件
tar jxf 解压bz文件、 tar jcf xxx.tar.bz xxx 压缩gz文件
创建tar.xz文件:先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz
解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。
zip:
将压缩文件test.zip解压,-d指定解压出来的文件(不包括最外层目录)放到/tmp/test目录下: unzip test.zip -d /tmp/test
将NFV-YDREPO-1.00.0目录下的文件连同最外层目录递归压缩到NFV-YDREPO-1.00.0-bak-1.zip : zip NFV-YDREPO-1.00.0-bak-1.zip -r NFV-YDREPO-1.00.0/*
gzip
gzip -d file-Name.gz
windows换行符转linux换行符命令:
单个文件:dos2unix 文件名;
批量转换:find . -type f | xargs dos2unix
生成patch
(注:dpdk-20.02为修订的源码,dpdk-20.02-fix为修订后的源码)
diff -uparN dpdk-20.02 dpdk-20.02-fix/ > 0019-net-bnxt-devinfo-add-speed-capa.patch
打patch (-p1忽略一级目录 -d指定打patch的目录)
patch -p1 -d ../../downloads/dpdk-20.02/ < 0019-net-bnxt-devinfo-add-speed-capa.patch
ethtool命令
linux ethtool 查看网卡状态 - 小孩66的个人空间 - OSCHINA - 中文开源技术交流社区
lspci
lspci -n -s 5e:00.0 -vv 获取设备四id
lspci -vvvnn -s 5e:00.0 带id解释及网卡型号名称
打开关闭不区分字符大小写
shopt -s nocasematch :打开不区分大小写,即此后命令大小写不区分
shopt -u nocasematch:关闭不区分大小写,即此后区分大小写
Shell break和continue命令:
http://c.biancheng.net/cpp/view/7010.html
Shell判断字符串包含关系的几种方法:
Shell判断字符串包含关系的几种方法_shell 字符串包含_排骨瘦肉丁的博客-CSDN博客
shell浅谈之三for、while、until循环:
shell浅谈之三for、while、until循环_乌托邦2号的博客-CSDN博客
tee命令
用于读取标准输入的数据,并将其内容输出成文件
[root@node141 b21430]# cat xx
test dss
[root@node141 b21430]# echo "test xx" | tee xx 清空xx文件在进行复制
test xx
[root@node141 b21430]# cat xx
test xx
[root@node141 b21430]# echo "test dss" | tee -a xx 在文件末尾进行复制
test dss
[root@node141 b21430]# cat xx
test xx
test dss
wc命令
wc [-clw] 统计, -c为统计字节数,-l统计行数,-w为统计单词数
du命令
du常用的选项:
-h:以人类可读的方式显示
-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
-s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
–apparent-size:显示目录或文件自身的大小
-l :统计硬链接占用磁盘空间的大小
-L:统计符号链接所指向的文件占用的磁盘空间大小
du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -lh –max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
du -sk filename 查看指定文件大小
grep命令
-i: 忽略大小写;-w :全词匹配 ;-v :反向匹配,过滤掉-v 后面的字符串
grep "str" /dir -rn 从指定目录递归抓取字符
1、或操作
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式
2、与操作
grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。
find命令
(3)find /etc -name '*srm*' #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm*' #表示当前目录下查找文件名开头是字符串‘srm’的文件
find . -type d -name 'srm*' #查找名字含srm字段的目录
2.按照文件特征查找
(1)find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2)find / -atime -2 # 查找在系统中最后48小时访问的文件
(3)find / -empty # 查找在系统中为空的文件或者文件夹
(4)find / -group cat # 查找在系统中属于 group为cat的文件
(5)find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6)find / -mtime -1 #查找在系统中最后24小时里修改过的文件
(7)find / -user fred #查找在系统中属于fred这个用户的文件
(8)find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查找出小于1000KB的文件
3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2)find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件
(3)find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
cut命令
-f : 指定获取第几列字段
例: -f 1为获取第一列字段、-f 2-5 为获取第2到第5列字段
-d : 指定截断字段的字符
例: -d “ ”为以空格进行截取
--complement :取反
例:cut -f 2 --complement 为获取除第2列字段之外的列,等同于cut -f 1,3-
-c:指定获取的字符
例-c 2-5显示每行第2到第5个字符, -c 2-为从第2个字符开始显示每行
sort命令
处理结果输出到标准输出,不影响原文件,若要对标准输出进行保存,则需要进行重定向
sort重定向: sort -r number.txt > number.txt不管用,number.txt内容被清空,需使用sort number.txt -o number.txt (-o选项进行重定向)
sort number.txt:将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按重上到下升序输出
sort -r number.txt:将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按重上到下降序输出
sort -n number.txt:以行首字符进行排序,默认重上到下升序
sort -u seq.txt:去除重复行
sort -t ‘分隔符’ -k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]:FStart 为域的开始,CStart 为第几个字符开始,FEnd 为域的结束,CEnd 为排序字符的结束,Modifier 为排序方式如n(以整数进行排序)、r(倒序)、b、f、i(忽略不可打印字符),CStart省略时其值默认为第一个字符、CEnd 省略时其值默认为最后一个字符,FEnd省略其值默认为最后一个域(FStart.CStart ,FEnd .CEnd相当于坐标对需要排序的新行字符范围进行限定)
例:
sort -n -k 2 -t ‘:’ facebook.txt:以冒号作为分隔符,以分隔符第二个域,第一个字符开始到行结束进行排序依据;
sort -t ‘ ‘ -k 1.2 facebook.txt:对分隔符第一个域的第二个字母开始到行结束作为排序依据;
-k和-u联合:-u只识别用-k设定的域,发现相同,就将后续相同的行都删除
多个-k联合:前一个-k排序相同的情况下,才触发第二个-k;
多个-k和-u联合:-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同不删除;
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较
tr命令
1、对标准输入进行处理后输出到标准输出,输出结果不能直接重定向到原文件,否则原文件则为空;
2、cat file | tr [source] [target] > new_file 将后者替换前者
cat file | tr -s [source] [target] > new_file 将前者进行压缩后再将后者替换前者
例:将文件file中出现的"abc"替换为"xyz"
cat file | tr "abc" "xyz" > new_file ----》单引号和双引号均可,若前者的长度大于后者,则前者比后者多出的字符以后者最后一个字符进行替换;若后者的长度大于前者,则超出的部分被忽略;
【注意】这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。
表达字符串的特殊序列
[C1-C2] 指定了 C1 所指定的字符和 C2 所指定的字符之间(包括 C1 和 C2)进行整理的字符串。C1 所指定的字符必须整理放在由 C2 所指定的字符之前。
注:在使用本方法指定子范围时,当前语言环境对结果有重要影响。如果需要用命令来产生与语言环境无关的一致结果,那么应该避免使用子范围。
[C*Number] Number 是一个整数,它指定了由 C 所指定的字符的重复次数。除非其首位数字是 0,否则 Number 一律视为是十进制整数;如果首位数字是 0,那么视为八进制整数。
[C*] 用 C 指定的字符填写字符串。该选项只用于包含在 String2 中的字符串末尾,它强制 String2 中的字符串具有与由 String1 变量所指定的字符串一样的字符数。*(星号)后面指定的任何字符都被忽略。
[ :ClassName: ] 指定由当前语言环境中的 ClassName 所命名的字符类中的所有字符。类名可以是下述名称中的任何一种:
alnum lower
alpha print //显示字符
blank punct
cntrl //控制字符 space //空格
digit upper
graph xdigit
除 [:lower:] 和 [:upper:] 转换字符类之外,其他字符类指定的字符都按未指定的顺序放入数组中。由于未定义字符类指定的字符的顺序,仅当目的为将多个字符映射为一个时才使用这些字符。转换字符类除外。
有关字符类的详细情况,请参阅 ctype 子例程。
[ =C= ] 指定所有的字符具有与 C 所指定的字符相同的等价类。
\Octal 指定字符,其编码由 Octal 所指定的八进制值表示。Octal 可以是 1 位、2 位 或 3 位八进制整数。空字符可以用 '\0' 表示,并可以像任何其他的字符那样进行处理。
\ControlCharacter 指定与 ControlCharacter 所指定的值相应的控制字符。可以表示以下值:
\a
警告
\b
退格键
\f
换页
\n
换行
\r
回车
\t
制表键
\v
垂直制表键
\\ 规定 "\"(反斜杠)就是作反斜杠使用,而无作为转义字符的任何特殊意义。
\[ 指定“[”(左括号)就作为左括号使用,而无作为特定字符串序列的开始字符的任何特殊意义。
\- 指定“-”(负号)就作为负号使用,而无作为范围分隔符的任何特殊意义。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
\octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串
cat file | tr [A-Z] [a-z] > new_file(小写 --> 大写)
cat file | tr [A-Z] [a-z] > new_file(大写 --> 小写)
cat file | tr [0-9] [a-j] > new_file 数字0-9替换为a-j (a-j超出0-9的部分被忽略)
3、-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
cat file | tr -cs '[:lower:][:upper:]' '[\n*]' 将文件中非大小写字母的字符压缩成一个并转换成换行符,*使\n与大小写字符长度一样长
4、-d 删除字符串1中所有输入字符
例:删除文件file中出现的"Snail"字符
cat file | tr -d "Snail" > new_file
【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串
删除文件file中出现的换行'\n'、制表'\t'字符
# cat file | tr -d "\n\t" > new_file
5、-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
tr -s '[:space:]' :将字符串中多个连接的空格压缩成一个空格,包括行末
tr -s ' ' :将字符串中多个连接的空格压缩成一个空格,不包括行末
删除“连续着的”重复字母,只保留第一个 cat file | tr -s [a-zA-Z] > new_file
sed命令
参数说明(sed之后,参数前在-)
- -n:显示行号
- -e:-e后面的命令作为一个字脚本来处理文本,用于需要执行多个命令时
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell,需要-e来指定每个命令,每个命令前还有其它参数需添加到-e之前,比如-n -e
[root@xx]# cat testfile
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
[root@xx]# cat testfile | sed -e '3d' -n -e '/Linux/p'
Linux is a free unix-type opterating system.
Linux test
- -i:直接在文本中插入
sed -i 's/\.$/\!/g' regular_express.txt 将 regular_express.txt 内每一行结尾若为 . 则换成 !
sed -i '$a # This is a test' regular_express.txt 直接在 regular_express.txt 最后一行加入 # This is a test
动作说明(动作都在单引号之内)
- a :在指定行下方新增行,对指定文件a前的数字指定行范围,a后接\+新行字符,或接收标准输入使用单括号, a前的数字指定行范围+空格+再加要新增的字符串 --》不改变文件,只输出到标准输出
sed 4a\newLine testfile
nl /etc/passwd | sed '2a drink tea'
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! --》不改变文件,只输出到标准输出
nl /etc/passwd | sed '2,5c No 2-5 number' 将文本的2到5行替换为No 2-5 number一行
- d :删除指定行 --》不改变文件,只输出到标准输出
nl /etc/passwd | sed '2d' //删除第二行
nl /etc/passwd | sed '3,$d' 删除第 3 到最后一行
nl /etc/passwd | sed '2,5d' 删除第2到5行到最后一行
nl /etc/passwd | sed '/root/d' 删除含root字符串的行后进行打印
- i :在指定行上方新增行
nl /etc/passwd | sed '2i drink tea' 在第二行前增加drink tea字符串 --》不改变文件,只输出到标准输出
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n (-n为显示行号)一起运行
nl /etc/passwd | sed -n '5,7p' 打印5到7行
[root@xx]# cat testfile
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
[root@xx]# cat testfile | sed '/Linux/p' 除打印全部行外,还将匹配行在该行的下一行额外进行打印
HELLO LINUX!
Linux is a free unix-type opterating system.
Linux is a free unix-type opterating system. >>打印匹配行
This is a linux testfile!
Linux test
Linux test >>打印匹配行
[root@xx]# cat testfile | sed -n '/Linux/p' 仅打印匹配行
Linux is a free unix-type opterating system.
Linux test
- s :取代
sed 's/要被取代的字串/新的字串/g',里面可用正则
^表示行开头,$表示行结束或文本末尾
通配起始和结束的位置间加.*
^.*addr:匹配行开头到addr字串结束
Bcast.*$:匹配Bcast开始到行结束的字串
精确匹配不需要.*:
\!$:精确匹配行尾的! (标点符号需转义 )
^\t :精确匹配行开头的制表符
^用在[ ]取范围时表示取反
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' 将行开头到addr:的字段用空字符替换,即删除行开头到addr:的字符
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 将Bcast开始到行结尾的字符用空字符替换,即删除Bcast开始到行结尾的字符
192.168.1.100
-
执行多个命令 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行 nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell,需要-e来指定每个命令,每个命令前还有其它参数需添加到-e之前,比如-n -e
[root@xx]# cat testfile
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
[root@xx]# cat testfile | sed -e '3d' -n -e '/Linux/p'
Linux is a free unix-type opterating system.
Linux test
awk命令:
awk '{print $1,$4}' log.txt :每行按空格或TAB分割,输出文本中的1、4项
awk -F, '{print $1,$2}' log.txt :使用","分割,输出文本中的1、4项
awk 'BEGIN{FS=","} {print $1,$2}' 内置变量FS指定分隔符,BEGIN表示内置变量开始,等同于上一个命令
awk 'BEGIN{IGNORECASE=1} /this/' log.txt 忽略大小写
匹配字符串:awk '/re/ ' log.txt
正则:awk '$2 ~ /th/ {print $2,$4}' log.txt ~表示正则开始,匹配th字符,输出匹配行中的2、4项
awk '!/th/ {print $2,$4}' log.txt 取反
file命令:
查看文件格式信息,若为软连接则显示其链接的文件名
rev命令:
reverse的简写,将输出倒置
if判断:
(if内的值0为真)
文件表达式
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
字符串变量表达式
If [ $a = $b ] 如果string1等于string2,则为真
字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2,则为真
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空,则为真
if [ $sting ] 如果string 非空,返回0 (和-n类似)
逻辑非 ! 条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ] 如果不存在目录$num
逻辑与 –a 条件表达式的并列
if [ 表达式1 –a 表达式2 ]
逻辑或 -o 条件表达式的或
if [ 表达式1 –o 表达式2 ]