[ Linux ] 常用命令大全(更新中)

命令一览

  • 1.文件管理
    • cat
    • chattr
    • chgrp
    • chmod
    • chmod
    • cksum
    • cmp
    • diff
    • file
    • find
    • cut
    • ln
    • mv
  • 4.磁盘管理
    • mkdir
  • 9.备份压缩
    • tar
  • 10.其他命令
    • xargs


1.文件管理

cat

连接多个文件并打印到标准输出。

概要

cat [-AbeEnstTuv] [--help] [--version] fileName

主要用途

  • 显示文件内容,如果没有文件或文件为-则读取标准输入。
  • 将多个文件的内容进行连接并打印到标准输出。
  • 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。

参数
FILE(可选):要处理的文件,可以为一或多个。

选项
长选项与短选项等价

选项 含义
-A, --show-all 等价于"-vET"组合选项。
-b, --number-nonblank 只对非空行编号,从1开始编号,覆盖"-n"选项。
-e 等价于"-vE"组合选项。
-E, --show-ends 在每行的结尾显示’$'字符。
-n, --number 对所有行编号,从1开始编号。
-s, --squeeze-blank 压缩连续的空行到一行。
-t 等价于"-vT"组合选项。
-T, --show-tabs 使用"^I"表示TAB(制表符)。
-u POSIX兼容性选项,无意义。
-v, --show-nonprinting 使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符’\n’)和TAB(制表符)。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。

返回值
除非给出了非法选项或非法参数。

例子

# 合并显示多个文件
cat ./1.log ./2.log ./3.log

# 显示文件中的非打印字符、tab、换行符
cat -A test.log

# 压缩文件的空行
cat -s test.log

# 显示文件并在所有行开头附加行号
cat -n test.log

# 显示文件并在所有非空行开头附加行号
cat -b test.log

# 将标准输入的内容和文件内容一并显示
echo '######' |cat - test.log

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 cat或info coreutils ‘cat invocation’。
  2. 当使用cat命令查看体积较大的文件时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容,为了控制滚屏,可以按Ctrl+s键停止滚屏;按Ctrl+q键恢复滚屏;按Ctrl+c(中断)键可以终止该命令的执行,返回Shell提示符状态。
  3. 建议您查看体积较大的文件时使用less、more命令或emacs、vi等文本编辑器。

chattr

用来改变文件属性

补充说明
chattr命令 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。

语法

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

选项

选项 含义
-R 递归处理,将指令目录下的所有文件及子目录一并处理
v<版本编号> 设置文件或目录版本
-V 显示指令执行过程
+<属性> 开启文件或目录的该项属性
-<属性> 关闭文件或目录的该项属性
=<属性> 指定文件或目录的该项属性

例子

# 用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/fstab
# 然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。

# 让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
chattr +a /data1/user_act.log

chgrp

用来变更文件或目录的所属群组

补充说明
chgrp用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

语法

chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

选项

选项 含义
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes 效果类似“-v”参数,但仅回报更改的部分
-f或–quiet或——silent 不显示错误信息
-h或–no-dereference 只对符号连接的文件作修改,而不是该其他任何相关文件
-H 如果命令行参数是一个通到目录的符号链接,则遍历符号链接
-R或——recursive 递归处理,将指令目录下的所有文件及子目录一并处理
-L 遍历每一个遇到的通到目录的符号链接
-P 不遍历任何符号链接(默认)
-v或——verbose 显示指令执行过程
–reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

参数

  • 组:指定新工作名称;
  • 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。

实例

# 将/usr/meng及其子目录下的所有文件的用户组改为mengxin
chgrp -R mengxin /usr/meng

# 更改文件ah的组群所有者为 newuser
chgrp newuser ah

chmod

用来变更文件或目录的权限

语法

chmod [-cfvR] [--help] [--version] mode file...

主要用途

  • 通过符号组合的方式更改目标文件或目录的权限。
  • 通过八进制数的方式更改目标文件或目录的权限。
  • 通过参考文件的权限来更改目标文件或目录的权限。

参数
mode:八进制数或符号组合。
file:指定要更改权限的一到多个文件。

选项

选项 含义
-c, --changes 当文件的权限更改时输出操作信息。
–no-preserve-root 不将’/'特殊化处理,默认选项。
–preserve-root 不能在根目录下递归操作。
-f, --silent, --quiet 抑制多数错误消息的输出。
-v, --verbose 无论文件是否更改了权限,一律输出操作信息。
–reference=RFILE 使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
-R, --recursive 对目录以及目录下的文件递归执行更改权限操作。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。

返回值
返回状态为成功除非给出了非法选项或非法参数。

例子

参考man chmod文档的DESCRIPTION段落得知:
u符号代表当前用户。
g符号代表和当前用户在同一个组的用户,以下简称组用户。
o符号代表其他用户。
a符号代表所有用户。
r符号代表读权限以及八进制数4。
w符号代表写权限以及八进制数2。
x符号代表执行权限以及八进制数1。
X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
t符号代表只有目录或文件的所有者才可以删除目录下的文件。
+符号代表添加目标用户相应的权限。
-符号代表删除目标用户相应的权限。
=符号代表添加目标用户相应的权限,删除未提到的权限。

linux文件的用户权限说明:

# 查看当前目录(包含隐藏文件)的长格式。
ls -la
-rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
# 第1位如果是d则代表目录,是-则代表普通文件。
# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
# 第2到4位代表当前用户的权限。
# 第5到7位代表组用户的权限。
# 第8到10位代表其他用户的权限。

# 添加组用户的写权限。
chmod g+w ./test.log

# 删除其他用户的所有权限。
chmod o= ./test.log

# 使得所有用户都没有写权限。
chmod a-w ./test.log

# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log

# 等价的八进制数表示:
chmod 754 ./test.log

# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw ./testdir/

# 根据其他文件的权限设置文件权限。
chmod --reference=./1.log  ./test.log

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man chmod或info coreutils ‘chmod
    invocation’。
  2. 符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
  3. 使用-R选项一定要保留当前用户的执行和读取权限,否则会报错!

chmod

用来变更文件或目录的拥有者或所属群组

补充说明
chown改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件主和超级用户才可以便用该命令。

语法

chown [-cfhvR] [--help] [--version] user[:group] file...

选项

选项 含义
-c或——changes 效果类似“-v”参数,但仅回报更改的部分
-f或–quite或——silent 不显示错误信息
-h或–no-dereference 只对符号连接的文件作修改,而不更改其他任何相关文件
-R或——recursive 递归处理,将指定目录下的所有文件及子目录一并处理
-v或——version 显示指令执行过程
–dereference 效果和“-h”参数相同
–help 在线帮助
–reference=<参考文件或目录> 把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同
–version 显示版本信息

参数
用户[:组]:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。

实例

# 把 /var/run/httpd.pid 的所有者设置 root: 
chown root /var/run/httpd.pid

# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
chown runoob:runoobgroup file1.txt

# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
chown -R runoob:runoobgroup *

# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:
chown :512 /home/runoob

cksum

检查文件的CRC是否正确

补充说明
cksum命令 是检查文件的CRC是否正确,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了。

注意:CRC是指一种排错检查方法,即循环冗余校验法。

指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。

语法

cksum [--help][--version][文件...]

选项

选项 含义
–help 在线帮助
–version 显示版本信息

参数
文件:指定要计算校验的版本信息。

实例

# 使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
cksum testfile1            #对指定文件进行CRC校验

# 以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
1263453430 78 testfile1     #输出信息
# 上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。
# 注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。

cmp

比较两个文件是否有差异

补充说明
cmp命令 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。

语法

cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]

选项

选项 含义
-c或–print-chars 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。
-i<字符数目>或–ignore-initial=<字符数目> 指定一个数目。
-l或–verbose 标示出所有不一样的地方。
-s或–quiet或–silent 不显示错误信息。
-v或–version 显示版本信息。
–help 在线帮助。

实例

# 要确定两个文件是否相同,请输入: 
cmp prog.o.bak prog.o 

# 这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如: 
prog.o.bak prog.o differ: char 4, line 1 

# 如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。 

diff

比较给定的两个文件的不同

补充说明
diff命令 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

语法

diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]

选项

选项 含义
-<行数> 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或——text diff预设只会逐行比较文本文件
-b或–ignore-space-change 不检查空格字符的不同
-B或–ignore-blank-lines 不检查空白行
-c 显示全部内容,并标出不同之处
-C<行数>或–context<行数> 与执行“-c-<行数>”指令相同
-d或——minimal 使用不同的演算法,以小的单位来做比较
-D<巨集名称>或ifdef<巨集名称> 此参数的输出格式可用于前置处理器巨集
-e或——ed 此参数的输出格式可用于ed的script文件
-f或-forward-ed 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处
-H或–speed-large-files 比较大文件时,可加快速度
-l<字符或字符串>或–ignore-matching-lines<字符或字符串> 若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异
-i或–ignore-case 不检查大小写的不同
-l或——paginate 将结果交由pr程序来分页
-n或——rcs 将比较结果以RCS的格式来显示
-N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示
-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称
-P或–unidirectional-new-file 与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较
-q或–brief 仅显示有无差异,不显示详细的信息
-r或——recursive 比较子目录中的文件
-s或–report-identical-files 若没有发现任何差异,仍然显示信息
-S<文件>或–starting-file<文件> 在比较目录时,从指定的文件开始比较
-t或–expand-tabs 在输出时,将tab字符展开
-T或–initial-tab 在每行前面加上tab字符以便对齐
-u,-U<列数>或–unified=<列数> 以合并的方式来显示文件内容的不同
-v或——version 显示版本信息
-w或–ignore-all-space 忽略全部的空格字符
-W<宽度>或–width<宽度> 在使用-y参数时,指定栏宽
-x<文件名或目录>或–exclude<文件名或目录> 不比较选项中所指定的文件或目录
-X<文件>或–exclude-from<文件> 您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件
-y或–side-by-side 以并列的方式显示文件的异同之处
–help 显示帮助
–left-column 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容
–suppress-common-lines 在使用-y参数时,仅显示不同之处

参数
文件1:指定要比较的第一个文件;
文件2:指定要比较的第二个文件。

实例

# 将目录/usr/li下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
diff /usr/li test.txt     #使用diff指令对文件进行比较

# 上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
n1 a n3,n4  
n1,n2 d n3  
n1,n2 c n3,n4 
# 其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号,"n3"、"n4"表示在文件2中的行号。
# 注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1,以>开始的行属于文件2。

file

用来探测给定文件的类型

补充说明
file命令 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

语法
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>…][文件或目录…]

选项

选项 含义
-b 列出辨识结果时,不显示文件名称
-c 详细显示指令执行过程,便于排错或分析程序执行的情形
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称
-L 直接显示符号连接所指向的文件类别
-m<魔法数字文件> 指定魔法数字文件
-v 显示版本信息
-z 尝试去解读压缩文件的内容

参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

实例

# 显示文件类型
file install.log
install.log: UTF-8 Unicode text

file -b install.log      <== 不显示文件名称
UTF-8 Unicode text

file -i install.log      <== 显示MIME类别。
install.log: text/plain; charset=utf-8

file -b -i install.log
text/plain; charset=utf-8

# 显示符号链接的文件类型
ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail

file /var/mail
/var/mail: symbolic link to `spool/mail'

file -L /var/mail
/var/mail: directory

file /var/spool/mail
/var/spool/mail: directory

file -L /var/spool/mail
/var/spool/mail: directory

find

在指定目录下查找文件

补充说明
find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

选项

选项 含义
-amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算
-anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录
-atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算
-cmin<分钟> 查找在指定时间之时被更改过的文件或目录
-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录
-ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算
-daystart 从本日开始计算时间
-depth 从指定目录下最深层的子目录开始查找
-expty 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录
-exec<执行指令> 假设find指令的回传值为True,就执行该指令
-false 将find指令的回传值皆设为False
-fls<列表文件> 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件
-follow 排除符号连接
-fprint<列表文件> 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件
-fprint0<列表文件> 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件
-fprintf<列表文件><输出格式> 此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件
-fstype<文件系统类型> 只寻找该文件系统类型下的文件或目录
-gid<群组识别码> 查找符合指定之群组识别码的文件或目录
-group<群组名称> 查找符合指定之群组名称的文件或目录
-help或–help 在线帮助
-ilname<范本样式> 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别
-iname<范本样式> 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别
-inum 查找符合指定的inode编号的文件或目录
-ipath<范本样式> 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别
-iregex<范本样式> 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别
-links<连接数目> 查找符合指定的硬连接数目的文件或目录
-lname<范本样式> 指定字符串作为寻找符号连接的范本样式
-ls 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出
-maxdepth<目录层级> 设置最大目录层级
-mindepth<目录层级> 设置最小目录层级
-mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算
-mount 此参数的效果和指定“-xdev”相同
-mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算
-name<范本样式> 指定字符串作为寻找文件或目录的范本样式
-newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录
-nogroup 找出不属于本地主机群组识别码的文件或目录
-noleaf 不去考虑目录至少需拥有两个硬连接存在
-nouser 找出不属于本地主机用户识别码的文件或目录
-ok<执行指令> 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令
-path<范本样式> 指定字符串作为寻找目录的范本样式
-perm<权限数值> 查找符合指定的权限数值的文件或目录
-print 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串
-print0 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行
-printf<输出格式> 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定
-prune 不寻找字符串作为寻找文件或目录的范本样式
-regex<范本样式> 指定字符串作为寻找文件或目录的范本样式
-size<文件大小> 查找符合指定的文件大小的文件
-true 将find指令的回传值皆设为True
-type<文件类型> 只寻找符合指定的文件类型的文件
-uid<用户识别码> 查找符合指定的用户识别码的文件或目录
-used<日数> 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算
-user<拥有者名称> 查找符和指定的拥有者名称的文件或目录
-version或——version 显示版本信息
-xdev 将范围局限在先行的文件系统中
-xtype<文件类型> 此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查

参数
起始目录:查找文件的起始目录。

实例

# 将当前目录及其子目录下所有文件后缀为 .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

连接文件并打印到标准输出设备上

补充说明
cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于type命令。
说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file 所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件 f3 中。
当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;按 Ctrl+Q 键可以恢复滚屏。按 Ctrl+C(中断)键可以终止该命令的执行,并且返回 Shell 提示符状态。

语法

cut  [-bn] [file]
cut [-c] [file]
cut [-df] [file]

选项

选项 含义
-b 仅显示行中指定直接范围的内容
-c 仅显示行中指定范围的字符
-d 指定字段的分隔符,默认的字段分隔符为“TAB”
-f 显示指定字段的内容
-n 与“-b”选项连用,不分割多字节字符
–complement 补足被选择的字节、字符或字段
–out-delimiter= 字段分隔符 指定输出内容是的字段分割符
–help 显示指令的帮助信息
–version 显示指令的版本信息

参数
文件:指定要进行内容过滤的文件。

实例

# 例如有一个学生报表信息,包含 No、Name、Mark、Percent:
[root@localhost text]# cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98

# 使用 -f 选项提取指定字段(这里的 f 参数可以简单记忆为 --fields的缩写):
[root@localhost text]# cut -f 1 test.txt
No
01
02
03
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68

# --complement 选项提取指定字段之外的列(打印除了第二列之外的列):
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98

# 使用 -d 选项指定字段分隔符:
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
jack
alex

# 指定字段的字符或者字节范围
cut 命令可以将一串字符作为列来显示,字符字段的记法:
N- :从第 N 个字节、字符、字段到结尾;
N-M :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段;
-M :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
-b 表示字节;
-c 表示字符;
-f 表示定义字段。

示例
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

# 打印第 1 个到第 3 个字符:
[root@localhost text]# cut -c1-3 test.txt
abc
abc
abc
abc
abc

# 打印前 2 个字符:
[root@localhost text]# cut -c-2 test.txt
ab
ab
ab
ab
ab

# 打印从第 5 个字符开始到结尾:
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz

ln

用来为文件创建链接

补充说明
ln命令用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。

注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。

语法

ln [参数][源文件或目录][目标文件或目录]
其中参数的格式为 
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]

选项

选项 含义
–backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似–backup,但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户;
-L, --logical 取消引用作为符号链接的目标
-n, --no-dereference 把符号链接的目的目录视为一般文件;
-P, --physical 直接将硬链接到符号链接
-r, --relative 创建相对于链接位置的符号链接
-s, --symbolic 对源文件建立符号链接,而非硬链接;
-S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
-t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY
-T, --no-target-directory 将“LINK_NAME”视为常规文件
-v, --verbose 打印每个链接文件的名称
–help 显示此帮助信息并退出
–version 显示版本信息并退出

参数
源文件:指定链接的源文件。如果使用-s选项创建符号链接,则“源文件”可以是文件或者目录。创建硬链接时,则“源文件”参数只能是文件;

目标文件:指定源文件的目标链接文件。

none, off # 不进行备份(即使使用了–backup 选项)
numbered, t # 备份文件加上数字进行排序
existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never # 永远使用普通方式备份

实例

# 将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/liu下的文件a2.c
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c
# 在执行ln命令之前,目录/usr/liu中不存在a2.c文件。执行ln之后,在/usr/liu目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化。

# 在目录/usr/liu下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc
# 执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/liu/abc的文件中。

扩展知识
Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。

文件链接有两种形式,即硬链接和符号链接。

硬链接
建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。

创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。

在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。

对硬链接有如下限制:

  • 不能对目录文件做硬链接。
  • 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。

符号链接
符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。

!符号连接

与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。

符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。

用ln -s命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。

符号链接保持了链接与源文件或目录之间的区别:

  • 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。
  • 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。
  • 符号链接的大小是其链接文件的路径名中的字节数。
  • 当用ln -s命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如lrwxrwxrwx … 14 jun 20 10:20
    /etc/motd->/original_file其中,表示“文件大小”的数字“14”恰好说明源文件名original_file由14个字符构成。

mv

用来对文件或目录重新命名

补充说明
mv命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

mv命令 可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:

  1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
  2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。

注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。

语法

mv (选项) (参数)

选项

选项 含义
–backup=<备份模式> 若需覆盖文件,则覆盖前先行备份
-b 当文件存在时,覆盖前,为其创建一个备份
-f 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录
-i 交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖
–strip-trailing-slashes 删除源文件中的斜杠“/”
-S<后缀> 为备份文件指定后缀,而不使用默认的后缀
–target-directory=<目录> 指定源文件要移动到目标目录
-u 当源文件比目标文件新或者目标文件不存在时,才执行移动操作

参数
源文件:源文件列表。

目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。

实例

# 将目录/usr/men中的所有文件移到当前目录(用.表示)中:
mv /usr/men/* .
# 移动文件
mv file_1.txt /home/office/
# 移动多个文件
mv file_2.txt file_3.txt file_4.txt /home/office/
mv *.txt /home/office/
# 移动目录
mv directory_1/ /home/office/
# 重命名文件或目录
mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt
# 重命名目录
mv directory_1/ directory_2/
# 打印移动信息
mv -v *.txt /home/office
# 提示是否覆盖文件
mv -i file_1.txt /home/office
# 源文件比目标文件新时才执行更新
mv -uv *.txt /home/office
# 不要覆盖任何已存在的文件
mv -vn *.txt /home/office
# 复制时创建备份
mv -bv *.txt /home/office
# 无条件覆盖已经存在的文件
mv -f *.txt /home/office

4.磁盘管理

mkdir

用来创建目录

补充说明
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。

在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。

语法

mkdir (选项)(参数)

选项

选项 含义
-Z 设置安全上下文,当使用SELinux时有效
-m<目标属性>或–mode<目标属性> 建立目录的同时设置目录的权限
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录
–version 显示版本信息

参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。

实例

# 在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问
mkdir -m 700 /usr/meng/test

# 在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
mkdir -pm 750 bin/os_1 

9.备份压缩

tar

将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。

补充说明
tar命令 可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

语法

tar [选项...] [FILE]...

选项

选项 含义
-A或–catenate 新增文件到已存在的备份文件。
-b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或–read-full-records 读取数据时重设区块大小。
-c或–create 建立新的备份文件。
-C<目的目录>或–directory=<目的目录> 切换到指定的目录。
-d或–diff或–compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或–file=<备份文件> 指定备份文件。
-F或–info-script= 每次更换磁带时,就执行指定的Script文件。
-g或–listed-incremental 处理GNU格式的大量备份。
-G或–incremental 处理旧的GNU格式的大量备份。
-h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或–starting-file=<文件> 从指定的文件开始还原。
-l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或–modification-time 还原文件时,不变更文件的更改时间。
-M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或–old-archive或–portability 将资料写入备份文件时使用V7格式。
-O或–stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或–same-permissions 用原来的文件权限还原文件。
-P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或–append 新增文件到已存在的备份文件的结尾部分。
-R或–block-number 列出每个信息在备份文件中的区块编号。
-s或–same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或–list 列出备份文件的内容。
-T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或–update 仅置换较备份文件内的文件更新的文件。
-U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或–verbose 显示指令执行过程。
-V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或–interactive 遭遇问题时先询问用户。
-W或–verify 写入备份文件后,确认文件正确无误。
-x或–extract或–get 从备份文件中还原文件。
-X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或–gzip或–ungzip 通过gzip指令处理备份文件。
-Z或–compress或–uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
–after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
–atime-preserve 不变更文件的存取时间。
–backup=<备份方式>或–backup 移除文件前先进行备份。
–checkpoint 读取备份文件时列出目录名称。
–concatenate 此参数的效果和指定"-A"参数相同。
–confirmation 此参数的效果和指定"-w"参数相同。
–delete 从备份文件中删除指定的文件。
–exclude=<范本样式> 排除符合范本样式的文件。
–group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
–help 在线帮助。
–ignore-failed-read 忽略数据读取错误,不中断程序的执行。
–new-volume-script= 此参数的效果和指定"-F"参数相同。
–newer-mtime 只保存更改过的文件。
–no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
–null 从null 设备读取文件名称。
–numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
–owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
–posix 将数据写入备份文件时使用POSIX格式。
–preserve 此参数的效果和指定"-ps"参数相同。
–preserve-order 此参数的效果和指定"-A"参数相同。
–preserve-permissions 此参数的效果和指定"-p"参数相同。
–record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
–recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
–remove-files 文件加入备份文件后,就将其删除。
–rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
–same-owner 尝试以相同的文件拥有者还原文件。
–suffix=<备份字尾字符串> 移除文件前先行备份。
–totals 备份文件建立后,列出文件大小。
–use-compress-program=<执行指令> 通过指定的指令处理备份文件。
–version 显示版本信息。
–volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

参数
文件或目录:指定要打包的文件或目录列表。

实例

- z:有gzip属性的
- j:有bz2属性的
- Z:有compress属性的
- v:显示所有过程
- O:将文件解开到标准输出
tar -cf archive.tar foo bar  # 从文件 foo 和 bar 创建归档文件 archive.tar。
tar -tvf archive.tar         # 详细列举归档文件 archive.tar 中的所有文件。
tar -xf archive.tar          # 展开归档文件 archive.tar 中的所有文件。

下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

tar -cf all.tar *.jpg
#这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar
# 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -cvf archive.tar foo bar  # 从文件foo和bar创建archive.tar。
tar -tvf archive.tar         # 详细列出archive.tar中的所有文件。
tar -xf archive.tar          # 从archive.tar提取所有文件。

zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归

tar格式(该格式仅仅打包,不压缩)
打包:tar -cvf [目标文件名].tar [原文件名/目录名]
解包:tar -xvf [原文件名].tar
注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。

tar.gz格式
方式一:利用前面已经打包好的tar文件,直接用压缩命令。
压缩:gzip [原文件名].tar
解压:gunzip [原文件名].tar.gz

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
注:z代表用gzip算法来压缩/解压。

tar.bz2格式
方式一:利用已经打包好的tar文件,直接执行压缩命令:
压缩:bzip2 [原文件名].tar
解压:bunzip2 [原文件名].tar.bz2

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
注:小写j代表用bzip2算法来压缩/解压。

tar.xz格式
方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:xz [原文件名].tar
解压:unxz [原文件名].tar.xz

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
注:大写J代表用xz算法来压缩/解压。

tar.Z格式(已过时)
方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:compress [原文件名].tar
解压:uncompress [原文件名].tar.Z

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。

jar格式
压缩:jar -cvf [目标文件名].jar [原文件名/目录名]
解压:jar -xvf [原文件名].jar
注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下:

Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然

后用如下命令打包:
jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。

7z格式
压缩:7z a [目标文件名].7z [原文件名/目录名]
解压:7z x [原文件名].7z
注:这个7z解压命令支持rar格式,即:
7z x [原文件名].rar

其它例子
将文件全部打包成tar包 :

tar -cvf log.tar log2012.log    仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log   打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log  打包后,以 bzip2 压缩

在选项f之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加z选项,则以.tar.gz或.tgz来代表gzip压缩过的tar包;如果加j选项,则以.tar.bz2来作为tar包名。

解压目录
去掉第一层目录结构,要出除第二层,–strip-components 2

tar -xvf portal-web-v2.0.0.tar --strip-components 1  -C 指定目录

查阅上述tar包内有哪些文件 :

tar -ztvf log.tar.gz

由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上z这个选项了。

将tar包解压缩 :

tar -zxvf /opt/soft/test/log.tar.gz

在预设的情况下,我们可以将压缩档在任何地方解开的

只将tar内的部分文件解压出来 :

tar -zxvf /opt/soft/test/log30.tar.gz log2013.log

我可以透过tar -ztvf来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!

文件备份下来,并且保存其权限 :

tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log

这个-p的属性是很重要的,尤其是当您要保留原本文件的属性时。

在文件夹当中,比某个日期新的文件才备份 :

tar -N "2012/11/13" -zcvf log17.tar.gz test

备份文件夹内容是排除部分文件:

tar --exclude scf/service -zcvf scf.tar.gz scf/*

打包文件之后删除源文件:

tar -cvf test.tar test --remove-files

其实最简单的使用 tar 就只要记忆底下的方式即可:

压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

10.其他命令

xargs

给其他命令传递参数的一个过滤器

补充说明
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。

xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 一般是和管道一起使用。

命令格式:

somecommand |xargs -item  command

选项

选项 含义
-a file 从文件中读入作为 stdin
-e flag 注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

实例
xargs 用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:

cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行输入单行输出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n 选项多行输出:

cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-d 选项可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

结合 -n 选项使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

读取 stdin,将格式化后的参数传递给命令
假设一个命令为 sk.sh 和一个保存参数的文件 arg.txt:

#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*

arg.txt文件内容:

cat arg.txt
aaa
bbb
ccc

xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

-p aaa -l
-p bbb -l
-p ccc -l

复制所有图片文件到 /data/images 目录下:

ls *.jpg | xargs -n1 -I {} cp {} /data/images

xargs 结合 find 使用
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 将 \0 作为定界符。
统计一个源代码目录中所有 php 文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的 jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

xargs 其他应用
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:

cat url-list.txt | xargs wget -c 

你可能感兴趣的:(Linux,linux)