linux进阶命令
find
grep
file
which
whereis
gzip
bzip2
tar
diff
patch
find:查找符合条件的文件[1]
格式: find 目录名 选项 查找条件
举例:假设/work目录下有两个目录,分别为 /work/dira和/work/dirb.两个目录下面具有相同的文件。
find ./ -name "test.txt"
说明:
a)./指明了查找的路径为当前路径
b)-name表明以名字来查找文件
c)"test.txt",就指明查找名为test.txt的文件
同理:
find ./ -name "*.txt"
查找指定目录下面所有以.txt结尾的文件,其中 * 是通配符。
find ./ -name "dira"
查找指定目录下面是否存在dira这个目录,dira是目录名。
注意:
1)如果没有指定查找目录,则为当前目录。
/*两条命令是一样的效果*/
find . -name "*.txt" //其中 . 代表当前路径
find -name "*.txt"
2)find还有一些高级的用法,如查找最近几天(几个小时)之内(之前)有变动的文件
find /home -mtime -2 //查找/home目录下两天内有变动的文件
grep:查找文件中符合条件的字符串[2]
格式: grep [选项] [查找模式] [文件名]
举例:
grep -rn "abc" *
说明:
a)r(recursive):递归查找,n(number):显示目标位置的行号,可加入w全字匹配
b)"abc"要查找的字符串
c)* 当前目录下查找字符串(选项中有-r,则是当前目录下递归查找,无-r,则是当前目录下所有文档中查找)
同理:
grep -n "abc" test.txt
在test.txt文档中查找字符串abc
file:识别文件类型[3]
linux下一切皆文件
file ~/.bashrc //为ASCII 编码的text类型
file ~/.vimrc //为UTF-8 Unicode 编码的text类型
file ~/Pictures/* //如图形文件JPEG/PNG/BMP格式
file ~/Videos/ //为directory表明这是一个目录
file /bin/pwd // 出现 ELF 64-bit LSB executable,即为ELF格式的可执行文件
file /dev/* //出现character special(字符设备文件)、 block special(块设备文件)等
which和whereis:查找命令或应用程序的所在位置[4]
格式: which 命令名/应用程序名
举例:
which pwd //定位到/bin/pwd
which gcc //定位到/usr/bin/gcc
whereis pwd//查找到可执行程序的位置/bin/pwd和手册页的位置/usr/share/man/man1/pwd.1.gz
gzip:单个文件的解压/压缩[5]
常用选项:
-l(list): 列出压缩文件的内容
-k(keep): 在压缩或解压时,保留输入文件。
-d(decompress): 将压缩文件进行解压缩
1)查看
gzip -l 压缩文件名
gzip -l pwd.1.gz
2)解压
gzip -kd 压缩文件名
gzip -kd pwd.1.gz
该压缩文件是以.gz结尾的单个文件
3)压缩
gzip -k 源文件名
gzip -k mypwd.1
得到了一个.gz结尾的压缩文件
注意:
1)如果gzip不加任何选项,此时为压缩,压缩完该文件会生成后缀为.gz的压缩文件,
并删除原有的文件,所以说,推荐使用gzip -k 来压缩源文件。
2)相同的文件内容,如果文件名不同,压缩后的大小也不同。
3)gzip只能压缩单个文件,不能压缩目录。
提示:
man pwd命令会解压/usr/share/man/man1/pwd.1.gz这个文件,然后读取该文件中固定的格式的一些信息,显示到终端中。
bzip2:单个文件的解压/压缩[6]
常用选项:
-k(keep): 在压缩或解压时,保留输入文件。
-d(decompress): 将压缩文件进行解压缩。
1)压缩
bzip2 -k 源文件名
bzip2 -k mypwd.1
得到一个.bz2后缀的压缩文件
2)解压
bzip2 -kd 压缩文件名
bzip2 -kd mypwd.1.bz2
注意:
1)如果bzip2不加任何选项,此时为压缩,压缩完该文件会生成后缀为.bz2的压缩文件,
并删除原有的文件,所以说,推荐使用bzip2 -k 来压缩源文件。
2)bzip2只能压缩单个文件,不能压缩目录。
gzip或bzip2小结:单个文件的压缩使用gzip或bzip2
压缩有两个参数:1)压缩时间 2)压缩比
一般情况下,小文件使用gzip来压缩,大文件使用bzip2来压缩。
mypwd.1源大小是1477字节
gzip压缩后mypwd.1.gz是877字节,
bzip2压缩后mypwd.1.bz2是939字节。
myls.1源文件大小7664字节
gzip压缩后myls.1.gz是3144字节,
bzip2压缩后myls.1.bz2是3070字节。
tar:多个文件和目录的压缩/解压[7]
常用选项:
-c(create): 表示创建用来生成文件包
-x: 表示提取,从文件包中提取文件
-t: 可以查看压缩的文件。
-z: 使用gzip方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
-j: 使用bzip2方式进行处理,它与”c“结合就表示压缩,与”x“结合就表示解压缩。
-v(verbose): 详细报告tar处理的信息
-f(file): 表示文件,后面接着一个文件名。
-C <指定目录> :解压到指定目录
1.tar打包、gzip压缩
1)压缩
tar -czvf 压缩文件名 目录名
tar -czvf dira.tar.gz dira
2)查看
tar -tvf 压缩文件名
tar -tvf dira.tar.gz
3)解压
tar -xzvf 压缩文件名
tar -xzvf 压缩文件名 -C 指定目录
tar -xzvf dira.tar.gz 解压到当前目录
tar -xzvf dira.tar.gz -C /home/book 解压到/home/book
2.tar打包、bzip2压缩
1)压缩
tar -cjvf 压缩文件名 目录名
tar -cjvf dira.tar.bz2 dira
2)查看
tar -tvf 压缩文件名
tar -tvf dira.tar.bz2
3)解压
tar -xjvf 压缩文件名
tar -xjvf 压缩文件名 -C 指定目录
tar -xjvf dira.tar.bz2 解压到当前目录
tar -xjvf dira.tar.bz2 -C /home/book 解压到/home/book
diff:比较文件/目录,也可用来制作补丁文件[8]
常用选项:
-c: 列出两个比较文件的不同处,同时在不同处添加一个相同的上下文,有利于人工定位
-u: 表示在比较结果中输出上下文中一些相同的行,有利于人工定位
-r:表示递归比较各个子目录下的文件
-N: 将不存在的文件当做空文件
-w:忽略对空格的比较
-B:忽略对空行的比较
1.比较文件/目录
假设:test1.txt内容如下:
I need to buy 1.
I need to buy 2.
I need to buy apples.
I need to run the laundry.
I need to wash the dog.
I need to get the car detailed
I need to buy 1.
I need to buy 2.
test2.txt内容如下:
I need to buy 1.
I need to buy 2.
I need to buy apples.
I need to do the laundry.
I need to wash the car.
I need to get the dog detailed.
I need to buy 1.
I need to buy 2.
1)normal模式输出比较结果
命令:
diff test1.txt test2.txt
输出结果如下:
4,6c4,6
< I need to run the laundry.
< I need to wash the dog.
< I need to get the car detailed
---
> I need to do the laundry.
> I need to wash the car.
> I need to get the dog detailed.
默认的输出模式,输出结果不太直观,不利于人工定位。
2)context模式输出比较结果
命令:
diff -c test1.txt test2.txt
输出结果如下:
*** 1,8 ****
I need to buy 1.
I need to buy 2.
I need to buy apples.
! I need to run the laundry.
! I need to wash the dog.
! I need to get the car detailed
I need to buy 1.
I need to buy 2.
--- 1,8 ----
I need to buy 1.
I need to buy 2.
I need to buy apples.
! I need to do the laundry.
! I need to wash the car.
! I need to get the dog detailed.
I need to buy 1.
I need to buy 2.
其中:*** 1,8 ****表示第一个文件的1--8行
--- 1,8 ----表示第二个文件的1--8行
3)unified模式输出比较结果
命令:
diff -u test1.txt test2.txt
输出结果如下:
@@ -1,8 +1,8 @@
I need to buy 1.
I need to buy 2.
I need to buy apples.
-I need to run the laundry.
-I need to wash the dog.
-I need to get the car detailed
+I need to do the laundry.
+I need to wash the car.
+I need to get the dog detailed.
I need to buy 1.
I need to buy 2.
2.生成补丁文件
linux-2.6.22.6:未经修改的linux内核文件包
linux-2.6.22.6_new:修改过后的linux内核文件包
diff -urNwB linux-2.6.22.6 linux-2.6.22.6_new > linux-2.6.22.6_new.diff
这样就生成了一个linux-2.6.22.6_new.diff补丁文件。
patch:读取如何更改文件的源文件指示信息,然后应用这些更改(依据补丁文件来修改原始文件)[9]
常用选项:
-p0: 选项从当前目录查找目的文件(夹)(直接使用补丁文件里面指定的路径)
-p1: 选项忽略掉第一层目录,从当前目录查找(去掉补丁文件指定路径最左的第1个'/'及前面所有内容)。
常用格式: patch -pnum < patchfile
linux-2.6.22.6_new.diff文件头部信息:
diff -urNwB linux-2.6.22.6/arch/arm/configs/s3c2410_defconfig linux-2.6.22 .6_new/arch/arm/configs/s3c2410_defconfig
2 --- linux-2.6.22.6/arch/arm/configs/s3c2410_defconfig 2007-08-31 14:21:0 1.000000000 +0800
3 +++ linux-2.6.22.6_new/arch/arm/configs/s3c2410_defconfig 2019-07-23 13:30:56.570302574 +0800
命令:
cd /work/system/linux-2.6.22.6/ /*进入linux-2.6.22.6目录*/
patch -p1 < ../linux-2.6.22.6_new.diff /*打补丁*/
说明:
a)-p1: 表示忽略补丁文件中第一个 "/"之前的内容,参考补丁文件头部信息,即忽略 "linux-2.6.22.6/"这一目录,这是因为已经进入了linux-2.6.22.6目录。
b): ../linux-2.6.22.6_new.diff:表示上一层目录下的linux-2.6.22.6_new.diff文件。
命令:
cd /work/system/ /*进入system目录*/
patch -p0 < ./linux-2.6.22.6_new.diff /*打补丁*/
说明:
a)-p0:表示不忽略补丁文件目录,按照全路径执行
b): ./linux-2.6.22.6_new.diff:表示当前目录下的linux-2.6.22.6_new.diff文件。
注意:按照全路径打补丁,被打补丁目录名应和补丁文件内第一个"/"之前目录名一致,即/work/system/目录下的linux-2.6.22.6目录名和补丁文件中第一个 "/"之前的目录名(linux-2.6.22.6)一致
- ↩
- ↩
- ↩
- ↩
- ↩
- ↩
- ↩
- ↩
- ↩