1,文件管理
cat
-n 由1开始对所有输出的行数编号
-b 和-n类似,只不过对于空白行不编号
案例:
把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3
清空 /etc/test.txt 文档内容:
cat /dev/null > /etc/test.txt
chgrp
改变文件或目录的所属群组
案例:改变文件的群组属性:
[root@localhost test]# ll
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
chgrp -v bin log2012.log
输出:
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
chmod
改变文件权限
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
实例
将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将文件 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该文件拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 :
chmod 777 file
语法为:
chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限
chown
一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限。
案例:
将文件 file1.txt 的拥有者设为 root,群体的使用者 bin :
chown root:bin file1.txt
将目前目录下的所有文件与子目录的拥有者皆设为 root,群体的使用者 bin:
chown -R root:bin *
cmp
用于比较两个文件是否有差异
当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据。
格式:cmp 文件a 文件b
diff
比较两个文件的不同
diff 文件a 文件b 比较两个文件
diff 文件a 文件b -y -w 并排显示
案例:
[root@hdp10 ~]# diff a b -y -w
1,q,12345 | 12345
3,q,12345 | 12346
4,e,12348 | 12347
5,e,12355 | 12348
> 12349
说明:
"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容
file
通过file指令,我们得以辨识该文件的类型。
案例:
[root@hdp10 ~]# file zkdata
zkdata: directory
[root@hdp10 ~]# file a
a: ASCII text
find
查找文件
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
格式:find path -option [ -print ] [ -exec -ok command ] {} \;
常用参数:
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin -n +n :在过去N分钟内被读取过的文件 ,-n代表以内,+n代表以外
-atime -n +n : 在过去n天内被读取过的文件,-n代表以内,+n代表以外
-anewer file: 比文件file更晚被读取过的文件
-cmin -n +n :在过去n分钟内被修改过的文件,-n代表以内,+n代表以外
-ctime -n +n :在过去n天内被修改过的文件,-n代表以内,+n代表以外
-cnewer file:比文件file更新的文件
-empty :空的文件
-group name :group是name的文件
-name name:文件名符合name的文件
-iname name:name忽略大小写
-size -n +n: 文件大小是n单位 例子 find / -size 500M 500M以内的文件
-type c:文件类型是C的文件。d是目录,f是文件
实例
将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name "*.c"
将目前目录其其下子目录中所有一般文件列出
find . -type f
将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20
查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
cut
裁剪文档显示
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
案例1
[root@hdp10 ~]# cat text
1,q
1,w
2,e
2,r
5,t
4,y
3,o
[root@hdp10 ~]# cut -f2 -d"," text #f后面代表第几列
q
w
e
r
t
y
o
案例2
cat test3.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
打印前2个字符
cut -c-2 test3.txt
ab
ab
ab
ab
ab
打印从第5个字符开始到结尾:
cut -c5- test3.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
ln
软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
格式:ln -s text texttextlnr
硬链接:
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
格式:ln text textln
案例
-rw-r--r-- 2 root root 28 Apr 9 2019 text
-rw-r--r-- 2 root root 28 Apr 9 2019 textln
lrwxrwxrwx 1 root root 4 Mar 11 21:13 textlnr -> text
less/more
查看文档
实例
1、查看文件
less log2013.log
2、ps查看进程信息并通过less分页显示
ps -ef |less
快捷键
j - 向前移动一行
k - 向后移动一行
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
locate
locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。
格式:locate file_name
mv
移动文件
参数说明:
-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
paste
-s :并行显示
案例:
[root@hdp10 ~]# paste a
1,q,12345
3,q,12345
4,e,12348
5,e,12355
[root@hdp10 ~]# paste -s a
1,q,12345 3,q,12345 4,e,12348 5,e,12355
rcp
rcp命令用于复制远程文件或目录。
-p 保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。
-r 递归处理,将指定目录下的文件与子目录一并处理。
rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。
格式:rcp 【参数】 账号@ip:远程文件目录 本地目的地目录
案例:
设本地主机当前账户为rootlocal,远程主机账户为root,要将远程主机(218.6.132.5)主目录下的文件"testfile"复制到本地目录"test"中,则输入如下命令:
rcp root@218.6.132.5:./testfile testfile #复制远程文件到本地
split
切割格式:split [-b][-][-l] 要切割的文件名 [输出文件前缀] [-a 长度]
最常用的选项,都在这里了:
-b<字节>:指定按多少字节进行拆分,也可以指定 K、M、G、T 等单位。
-<行数>或-l<行数>:指定每多少行要拆分成一个文件。
输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
-a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号
tee
tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法:tee [-ai][--help][--version][文件...]
-a或--append 附加到既有文件的后面,而非覆盖它.
-i或--ignore-interrupts 忽略例如ctrl+c的中断信号。
案例:tee file1 file2 将标准输入输入到这两个文件
tmpwatch
删除暂存文件
语法:tmpwatch [-afqv][--test][超期时间][目录...]
-a或--all 删除任何类型的文件。
-f或--force 强制删除文件或目录,其效果类似rm指令的"-f"参数。
-q或--quiet 不显示指令执行过程。
-v或--verbose 详细显示指令执行过程。
-test 仅作测试,并不真的删除文件或目录。
实例
使用指令"tmpwatch"删除目录"/tmp"中超过一天未使用的文件,输入如下命令:
tmpwatch 24 /tmp/ #删除/tmp目录中超过一天未使用的文件
touch
创建文件
which
该指令会在环境变量$PATH设置的目录里查找符合条件的文件
语法:which[文件]
cp
复制文件或目录
cp [options] source dest
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
whereis
Linux whereis命令用于查找文件。
该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
scp
scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
语法
scp [可选参数] file_source file_target
-r: 递归复制整个目录。
-P port:注意是大写的P, port是指定数据传输用到的端口号
案例:
1、从本地复制到远程
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3
2、从远程复制到本地
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob.com:/home/root/others/ /home/space/music/
awk
-F :指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v :赋值一个用户定义变量。
-f :从脚本文件中读取awk命令。
NF 每行字段的个数
NR 已读的记录数,也就是行号
应用:
if--else语句:
#输出错误等级为error的IP地址
awk '{if($3=="[error]") print $5}' log.txt
#输出错误等级为error的IP地址,错误等级不为error输出错误等级
awk '{if($3=="[error]")print $5; else print $3}' log.txt
while语句:echo "" | awk -v i=1 '{while(i<){print(i); i = i + 1}}'
1
2
3
4
for语句:echo "" | awk '{for(i=1;i<=3;i++) print i}'
1
2
3
数组:awk '{line[NR]=$3}END{for (i=1;i<NR;i++) print line[i]}' file
案例:[root@hdp10 ~]# cat c
4,e,12348
1,q,12345
3,q,12345
4,e,12348
5,e,12355
[root@hdp10 ~]# awk -F"," '{line[NR]=$3}END{for (i=1;i<=NR;i++) print line[i]}' c
12348
12345
12345
12348
12355
生成随机数:echo ""|awk '{srand();print int(rand()*10)}' 结果为生成随机数5。#srand()将rand的函数种子,rand()返回任意数n,其中0<=n<1
时间函数:#systime()函数返回当前时间戳
echo "" | awk '{print systime()}'
1581650690
[root@fengling ~]# date -d@1581650690
Fri Feb 14 11:24:50 CST 2020
[root@fengling ~]# date
Fri Feb 14 11:25:36 CST 2020
#strftime()函数格式化时间
echo "" | awk '{print strftime("%Y-%m-%d %H:%M:%s")}'
2020-02-14 11:28:1581650907
#mktime()将指定时间转换为时间戳
echo "" | awk '{print mktime(2018" "9" "10 " "10" "5" "20)}'
1536545120
EGIN和END
BEGIN{ 这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句 }
{这里面放的是处理每一行时要执行的语句}
案例:
[root@hdp10 ~]# cat c
4,e,12348
1,q,12345
3,q,12345
4,e,12348
5,e,12355
[root@hdp10 ~]# cat c|awk -F"," 'BEGIN{print "id,nm,score"}{print $0}END{print "c,lo,num"}'
id,nm,score
4,e,12348
1,q,12345
3,q,12345
4,e,12348
5,e,12355
c,lo,num
案例:
awk -F"," '{if( $2==22){$3="sdfsdfsdf"}{print $0}}' file #判断替换
awk -F"," '{sum += $3};END {print sum}' file #求和
cat file|awk -F"," '{print $1,1}'|awk '{s[$1] += $2}END{for(i in s){ print i,s[i]}}' >file2 #分组聚合
cat file|awk '!a[$1]++{print}' #去重
awk '{ gsub(/AAAA/,"BBBB"); print $0}' file #把每行的所有AAAA替换为BBBB
cat file |awk -F"," ' $1>=2' #过滤满足条件的数据支持== > < ...
read
1,简单读取
#!/bin/bash
read web
echo "网址:"$web
2,-p参数,允许在read命令行中直接指定一个提示
#!/bin/bash
read -p "请输入网址" web
echo "你输入的是"$web
3,-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。
#!/bin/bash
if read -t 5 -p "输入网站名:" website
then
echo "你输入的网站名是 $website"
else
echo -e "\n抱歉,你输入超时了。" #注意\n需要识别转义所以加 -e
fi
4,使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
echo "fine ,continue";;
N | n)
echo "ok,good bye";;
*)
echo "error choice";;
esac
该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。
5、-s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。
#!/bin/bash
read -s -p "请输入您的密码:" pass
echo "\n您输入的密码是 $pass"
exit 0
执行程序输入密码后是不显示的:
请输入您的密码:
您输入的密码是 runoob
6.读取文件
每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。
通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。
测试文件 test.txt 内容如下:
123
456
runoob
测试代码:
#!/bin/bash
count=1 # 赋值语句,不加空格
cat test.txt | while read line # cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
执行结果为:
Line 1:123
Line 2:456
Line 3:runoob
finish
2,文档编辑
comm
用于比较两个已经排过序的文件,并把结果显示出来,如果没指定参数,则会显示3列,第一列是仅在第一个文件出现过的列
第二列是仅在第2个文件出现过的列,第三列是在第一和第二个文件都出现过的列
语法:comm [-123][第1个文件][第2个文件]
参数:
-1 不显示只在第 1 个文件里出现过的列。
-2 不显示只在第 2 个文件里出现过的列。
-3 不显示只在第 1 和第 2 个文件里出现过的列。
案例
[root@hdp10 ~]# cat m
aaa
bbb
ccc
fff
ggg
[root@hdp10 ~]# vi n
[root@hdp10 ~]# cat m
aaa
bbb
ccc
fff
ggg
[root@hdp10 ~]# cat n
ccc
ddd
fff
hhh
[root@hdp10 ~]# comm m n
aaa
bbb
ccc
ddd
fff
ggg
hhh
第1列 第2列 第3列
grep
从文件内容查找与正则表达式匹配的行:
grep –e "正则表达式" 文件名
查找时不区分大小写:
grep –i "被查找的字符串" 文件名
查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件
grep -r update /etc/acpi
join
join命令用于将两个文件中,指定栏位内容相同的行连接起来。
找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备
格式:join [-i][-a<1或2>][-e<字符串>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][文件1][文件2]
参数:
-a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
-e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
-i或--igore-case 比较栏位内容时,忽略大小写的差异。
-t<字符> 使用栏位的分隔字符。
-v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
-1<栏位> 连接[文件1]指定的栏位。
-2<栏位> 连接[文件2]指定的栏位。
案例
[root@hdp10 ~]# cat k
ccc,34
ddd,35
fff,36
hhh,37
[root@hdp10 ~]# cat l
aaa,24
bbb,25
ccc,26
fff,27
ggg,28
[root@hdp10 ~]# join -t, k l
ccc,34,26
fff,36,27
look
用于查询单词,仅需给出想要查询的字首字符串,就会显示所有开头字符串符合该条件的单子
语法;look [-adf][-t<字尾字符串>][字首字符串][字典文件]
参数说明:
-a 使用另一个字典文件web2,该文件也位于/usr/dict目录下。
-d 只对比英文字母和数字,其余一慨忽略不予比对。
-f 忽略字符大小写差别。
-t<字尾字符串> 设置字尾字符串。
案例:为了查找在file文件中以字母L开头的所有的行,可以输入如下命令
look L file
sed
语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);-i会直接修改文件
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
案例:
增加:
在file文件的第3行后面添加一行,并将结果输出
sed '3a fsgs' file
在file文件的第3行后面添加一行,并将结果保存到文件
sed -i 3a\helloworld file
输入多行
[root@hdp10 ~]# sed -e '2a hello\
> world' m
aaa
bbb
hello
world
ccc
注意换行要加\来进行新行的添加
删除:
以行为单位的新增/删除
删除2到4行
root@hdp10 ~]# cat -n m
1 aaa
2 bbb
3 ccc
4 fff
5 dddd
6 ggg
root@hdp10 ~]# cat -n m|sed '2,4d'
1 aaa
5 dddd
6 ggg
删除单行
[root@hdp10 ~]# cat -n m|sed '4d'
1 aaa
2 bbb
3 ccc
5 dddd
6 ggg
修改:
以行为单位的替换
将2到5行换为hello
[root@hdp10 ~]# cat -n m
1 aaa
2 bbb
3 ccc
4 fff
5 dddd
6 ggg
[root@hdp10 ~]# cat -n m |sed '2,5c hello'
1 aaa
hello
6 ggg
以行为单位的显示
仅列出2到4行
[root@hdp10 ~]# cat -n m
1 aaa
2 bbb
3 ccc
4 fff
5 dddd
6 ggg
[root@hdp10 ~]# cat -n m|sed -n '2,4p' #(p是打印的意思,一般与-n一块使用)
2 bbb
3 ccc
4 fff
数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
加-i为直接替换原文件内容
查找:
数据的搜寻与显示
搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed -n '/root/p'
1 root:x:0:0:root:/root:/bin/bash
数据的搜寻与删除
删除m中所有包含aa的行,其他行输出
[root@hdp10 ~]# cat m
aaa
bbb
ccc
fff
dddd
ggg
aamlkj
[root@hdp10 ~]# cat m|sed '/aa/d'
bbb
ccc
fff
dddd
ggg
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1 root:x:0:0:root:/root:/bin/blueshell
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sort
sort将文件的每一行作为一个单位,按首字母排序按升序输出
sort -u file #输出内容去除重复行
sort -r file #输出内容按降序输出
sort -r file -o file #如果想把排序后的内容输入到原文件,则要用-o 如果用> 重定向文件会为空
sort -n file #加上n会以数值进行排序,不会出现10<2
sort -t<分隔符> -k<第几列> file #按分隔符进行分割,按照指定列进行排序
其他的sort常用选项
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1 (echo $? 为1)
-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1(echo $? 为1)
-M会以月份来排序,比如JAN小于FEB等等
-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
expr
计算字串长度:expr length "this is a test" 输出为14
抓取字串:expr substr "this is a test" 3 5 输出为 is is
抓取第一个字符串出现的位置: expr index "sarasara" a 输出为2
整数运算(字符都用空格隔开)
expr 10 + 10
expr 14 %
expr 10 \* 5 (使用乘号时,必须用反斜线屏蔽其特定含义,因为shell中*有特殊意义)
expr 30 / 3 / 2
uniq
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。
语法
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数:
-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
uniq file #过滤挨着的重复的行
sort file |uniq #排序后去重
sort file|uniq -c #统计各行在文件中出现的次数
sort file |uniq -d #只显示重复出现过的行
let
自加操作:let n++
自减操作:let n--
简写形式:let n+=20, let n-=20,分别等同于let n=n+10,let n=n-20
案例
#!/bin/bash
let a=5+4
let b=9-3
echo $a $b
以上实例执行结果为:
9 6
xargs
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
命令格式:somecommand |xargs -item command
案例
find / -name "*.log"|xargs ls -l
多行变单行
[root@hdp10 ~]# cat n
ccc
ddd
ccc
fff
hhh
[root@hdp10 ~]# cat n|xargs
ccc ddd ccc fff hhh
-n选项 多行输出,指定每行多少元素
[root@hdp10 ~]# cat n|xargs -n2
ccc ddd
ccc fff
hhh
-d指定分隔符分割
[root@hdp10 ~]# echo "hellopworldpniphao" |xargs -dp
hello world ni hao
[root@hdp10 ~]# echo "hello,pworld,pni,p,,ha,o" |xargs -d,
hello pworld pni p ha o
[root@hdp10 ~]# echo "hello,pworld,pni,p,ha,o" |xargs -d, -n2
hello pworld
pni p
ha o
-I,使用 -I 指定一个替换字符串 {}
[root@hdp10 ~]# echo "hello,pworld,pni,p,ha,o" |xargs -d, -n1 |xargs -I {} echo ll{}
llhello
llpworld
llpni
llp
llha
llo
其他命令
ftp
ftp [-dignv][主机名称或IP地址]
df
df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。
-h选项,通过它可以产生可读的格式df命令的输出
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 4.2G 23G 16% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 604M 892K 603M 1% /run
du
du命令用于显示目录或文件的大小。
du会显示指定的目录或文件所占用的磁盘空间。
du -h
mkdir
创建文件夹,mkdir 文件夹名,-p可以创建多层级文件夹
netstat
netstat命令用于显示网络状态。
sleep
休眠。其中 s 为秒,m 为 分钟,h 为小时,d 为日数
案例休眠5分钟
# sleep 5m
显示目前时间后延迟 1 分钟,之后再次显示时间
date;sleep 1m;date
alias
命令用于设置指令的别名。语法:alias[别名]=[指令名称]
替换字符:vi 文件名
:%s/原来的切割符/要换成的切割符/g
wq
压缩文件
tar
案例
tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
tar -tzvf test.tar.gz //列出压缩文件内容
tar -xzvf test.tar.gz //解压文件
gzip
是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。
压缩文件
[root@runoob.com a]# ls //显示当前目录文件
a.c b.h d.cpp
[root@runoob.com a]# gzip * //压缩目录下的所有文件
[root@runoob.com a]# ls //显示当前目录文件
a.c.gz b.h.gz d.cpp.gz
显示压缩文件的信息
[root@runoob.com a]# gzip -l *
compressed uncompressed ratio uncompressed_name
24 0 0.0% a.c
24 0 0.0% b.h
26 0 0.0% d.cpp
zip
将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -q -r html.zip /home/html
如果在我们在 /home/html 目录下,可以执行以下命令:
zip -q -r html.zip *
从压缩文件 cp.zip 中删除文件 a.c
zip -dv cp.zip a.c
unzip为.zip压缩文件的解压缩程序。