注意:
由于后续的chgrp chown等命令可能需要使用root的身份才能处理,这里建议使用root的身份学习 不建议直接使用root登录系统,建议使用su - 切换身份 [root@localhost ~]# ls -al 总用量 48 dr-xr-x---. 14 root root 4096 10月 1 10:47 . dr-xr-xr-x. 17 root root 224 9月 29 13:46 .. ..... -rw-------. 1 root root 310 10月 1 10:47 .ICEauthority -rw-r--r--. 1 root root 1659 9月 29 13:50 initial-setup-ks.cfg 介绍 链接数 所属用户组 文件最后被修改的时间 -rw-r--r--. 1 root root 1659 9月 29 13:50 initial-setup-ks.cfg 文件类型权限 文件拥有者 文件大小(默认单位为Bytes) 文件名 第一栏代表这个文件的类型与权限 第一个字符代表这个文件的类型 [d]是目录 [-]是文件 [l]是链接文件 [b]是设备文件里面的可供存储的周边设备 [c]是设备文件的串行端口设备 接下来的字符中,以三个为一组,且均为[rwx]三个参数的组合 [r]是可读 [w]是可写 [x]是可执行,注意这三个权限的位置不会改变,就会出现减号[-].第一组为文件拥有者的权限;第二组为加入此用户组的账号权限;第三组为非本人且没有加入本用户组的其他账号的权限如何修改文件属性与权限
chgrp :修改文件所属用户组
[root@localhost ~]# chgrp [-R] filename/dirname ... 选项与参数: -R 进行递归修改 [root@localhost ~]# chgrp users initial-setup-ks.cfg [root@localhost ~]# ls -l -rw-r--r--. 1 root users 1659 9月 29 13:50 initial-setup-ks.cfgchown :修改文件的拥有者
[root@localhost ~]# chown [-R] 账号名称 文件或目录 [root@localhost ~]# chown [-R] 账号名称:用户组名称 文件或目录 选项与参数: -R 进行递归修改 [root@localhost ~]# chown bin initial-setup-ks.cfg [root@localhost ~]# ll -rw-r--r--. 1 bin users 1659 9月 29 13:50 initial-setup-ks.cfg [root@localhost ~]# chown root:root initial-setup-ks.cfg [root@localhost ~]# ll 总用量 8 -rw-------. 1 root root 1611 9月 29 13:47 anaconda-ks.cfg -rw-r--r--. 1 root root 1659 9月 29 13:50 initial-setup-ks.cfgchmod :修改文件的权限
# 数字类型修改文件权限 # Linux文件的基本权限就有9个,分别是拥有者,所属群组,其他人三种身份各自的读、写、执行权限;其中我们可以使用数字来代表各个权限,各权限的数字为 r:4 w:2 x:1 #每种身份各自的三个权限数字是需要累加的,例如 [-rwxrwx---] 数字为 #owner = rwx = 4+2+1 = 7 #group = rwx = 4+2+1 = 7 #others = --- = 0+0+0 = 0 [root@localhost ~]# chown [-R] xyz 文件或目录 选项与参数: xyz 就是数字类型的权限属性,为rwx属性数值的相加 -R 进行递归修改 # 将.bashrc文件所以的权限都设置为启用 [root@localhost ~]# ls -al .bashrc -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc [root@localhost ~]# chmod 777 .bashrc [root@localhost ~]# ls -al .bashrc -rwxrwxrwx. 1 root root 176 12月 29 2013 .bashrc比较特殊的目录
. 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表目录使用者身份所在的家目录 ~account 代表account这个使用者的家目录常见的处理目录的命令
cd 切换目录pwd 显示当前目录mkdir 建立一个新目录rmdir 删除一个空目录 #cd 切换目录 [root@localhost ~]# cd [相对路径或绝对路径] #进入test这个使用者的家目录 [root@localhost ~]# cd ~test # 回到自己的家目录 [root@localhost test]# cd ~ # 回到自己的家目录 [root@localhost ~]# cd # 去到目前的上层目录 [root@localhost ~]# cd .. # 回到刚刚的目录 [root@localhost /]# cd - [root@localhost ~]# cd /var/spool/mail [root@localhost mail]# cd ../postfix #pwd显示目前所在目录 [root@localhost ~]# pwd [-P] -P 显示出真正的路径,而非链接路径 [root@localhost ~]# pwd /root [root@localhost ~]# cd /var/mail [root@localhost mail]# pwd /var/mail [root@localhost mail]# pwd -P /var/spool/mail # mkdir 建立新目录 [root@localhost ~]# mkdir [-mp] 目录名称 -m 设置文件的权限,直接设置,不使用默认权限 -p 递归创建所需要的目录(包含上层目录) [root@localhost ~]# cd /tmp [root@localhost tmp]# mkdir test [root@localhost tmp]# mkdir test1/test2/test3/test4 mkdir: 无法创建目录"test1/test2/test3/test4": 没有那个文件或目录 [root@localhost tmp]# mkdir -p test1/test2/test3/test4 test2 [root@localhost tmp]# mkdir -m 711 test2 [root@localhost tmp]# ls -ld test* drwxr-xr-x. 2 root root 6 10月 2 14:29 test drwxr-xr-x. 3 root root 19 10月 2 14:30 test1 drwx--x--x. 2 root root 6 10月 2 14:32 test2 #rmdir 删除“空”的目录 [root@localhost tmp]#rmdir [-p] 目录名称 -p 连同上层目录一起删除 [root@localhost tmp]# rmdir test [root@localhost tmp]# rmdir test1 rmdir: 删除 "test1" 失败: 目录非空 [root@localhost tmp]# rmdir -p test1/test2/test3/test4 [root@localhost tmp]# ls -ld test* drwx--x--x. 2 root root 6 10月 2 14:32 test2查看 ls
[root@localhost ~]#ls [-aAdfFhilnrRSt] 文件名或目录名称 [root@localhost ~]#ls [--color={never,always,auto}] 文件名或目录名 [root@localhost ~]#ls [--full-time] 文件名或目录名称 -a 全部的文件,连同隐藏文件一起列出来 -d 仅列出目录本身,而不是目录内的文件数据 -l 详细信息显示,包含文件的属性与权限等数据 [root@localhost ~]# ls -al ~ 总用量 48 dr-xr-x---. 14 root root 4096 10月 2 13:40 . dr-xr-xr-x. 17 root root 224 9月 29 13:46 .. -rw-------. 1 root root 1611 9月 29 13:47 anaconda-ks.cfg -rw-------. 1 root root 463 10月 1 14:50 .bash_history ...... drwxr-xr-x. 2 root root 6 10月 1 10:47 桌面复制 cp
[root@localhost ~]#cp [-adfilprsu] 源文件(source) 目标文件(directory) [root@localhost ~]#cp [options] source1 source2 ... directory -a 递归复制,若源文件为链接文件的属性,则复制链接文件属性而非文件本身 -i 若目标文件已存在,在覆盖是会询问操作的进行 -p 连同文件的属性(权限,用户,时间)一起复制过去 -r 递归复制 [root@localhost ~]# cp ~/.bashrc /tmp/bashrc [root@localhost ~]# cp -i ~/.bashrc /tmp/bashrc cp:是否覆盖"/tmp/bashrc"? n [root@localhost ~]# cd /tmp [root@localhost tmp]# cp /var/log/wtmp . [root@localhost tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r--. 1 root utmp 12288 10月 2 14:13 /var/log/wtmp -rw-r--r--. 1 root root 12288 10月 2 15:04 wtmp [root@localhost tmp]# cp -a /var/log/wtmp wtmp_2 [root@localhost tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r--. 1 root utmp 12288 10月 2 14:13 /var/log/wtmp -rw-rw-r--. 1 root utmp 12288 10月 2 14:13 wtmp_2删除 rm
[root@localhost ~]# rm [-fir] 文件或目录 -f 忽略不存在的文件,不会出现警告信息 -i 交互模式,在删除前询问使用者是否操作 -r 递归删除,常用于目录的删除 [root@localhost tmp]# rm -i bashrc rm:是否删除普通文件 "bashrc"?y [root@localhost tmp]# rm -i wtmp* rm:是否删除普通文件 "wtmp"?y rm:是否删除普通文件 "wtmp_2"?y [root@localhost tmp]# ls -ld wtmp* ls: 无法访问wtmp*: 没有那个文件或目录移动 mv
[root@localhost ~]# mv [-fiu] source destination [root@localhost ~]# mv [options] source1 source2 ... directory -f 如果目标文件已经存在,不会询问直接覆盖 -i 若目标文件已经存在,就会询问是否覆盖 -u 若目标文件已经存在,且source较新,就会更新 [root@localhost tmp]# cp ~/.bashrc bashrc [root@localhost tmp]# mkdir mvtest [root@localhost tmp]# mv bashrc mvtest [root@localhost tmp]# mv mvtest mvtest2 [root@localhost tmp]# cp ~/.bashrc bashrc1 [root@localhost tmp]# cp ~/.bashrc bashrc2 [root@localhost tmp]# mv bashrc1 bashrc2 mvtest2 [root@localhost tmp]# ls /tmp/mvtest2 bashrc bashrc1 bashrc2直接查看文件内容
cat 由第一行开始显示文件内容
[root@localhost ~]# cat [-AbEnTv] 文件名 -A 可列出一些特殊字符而不是空白 -b 列出行号,仅针对非空白行做行号显示 -n 列出行号,连同空白行也会有行号 [root@localhost ~]# cat /etc/issue \S Kernel \r on an \m [root@localhost ~]# cat -n /etc/issue 1 \S 2 Kernel \r on an \m 3tac 从最后一行开始显示,可以看出是cat的倒着写
[root@localhost ~]# tac /etc/issue Kernel \r on an \m \Snl 显示的时候,同时输出行号
[root@localhost ~]# nl [-bnw] 文件 -b 指定行号指定的方式 -b a 不论是否有空行,都显示行号 -b t 如果有空行,空行不显示行号(默认值) -n 列出行号表示的方法 -n ln 行号在屏幕的最左方显示 -n rn 行号在自己栏位的最右方显示,不加0 -n rz 行号在自己栏位的最右方显示,加0 -w 行号栏位占用的字符数 [root@localhost ~]# nl /etc/issue 1 \S 2 Kernel \r on an \m [root@localhost ~]# nl -b a /etc/issue 1 \S 2 Kernel \r on an \m 3 [root@localhost ~]# nl -b a -n rz /etc/issue 000001 \S 000002 Kernel \r on an \m 000003 [root@localhost ~]# nl -b a -n rz -w 3 /etc/issue 001 \S 002 Kernel \r on an \m 003可翻页查看
more
[root@localhost ~]# more /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. ..... --More--(26%) <===光标等待命令 #空格键,向下翻一页 #enter,向下翻一行 #/字符串,代表在这个显示的内容中,向下查找字符串这个关键词 #:f,立刻显示出文件名以及目前显示的行数 #q,代表立刻离开more #b,代表往回翻页,只对文件有用,对管道无用less
[root@localhost ~]# less /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. ...... : <===光标等待命令 #空格键,向下翻一页 #pagedown,向上翻动一页 #pageup,向下翻动一页 #/字符串,向下查找字符串 #?字符串,向上查找字符串 #q,离开less这个程序数据截取
head 取出前面几行
[root@localhost ~]# head [-n number] 文件 -n 后面接数字,代表显示几行 默认显示10行 [root@localhost ~]# head -n 3 /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. [root@localhost ~]# head -n 4 /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. # It is also used to provide a manpath for those without one by examiningtail 取出后面几行
[root@localhost ~]# tail [-n number] 文件 -n 后面接数字,代表显示几行 默认显示10行 -f 持续地刷新显示后面所接文件的内容,直到按下ctrl+c才结束 [root@localhost ~]# tail -3 /etc/man_db.conf # Flags. # NOCACHE keeps man from creating cat pages. #NOCACHE [root@localhost ~]# tail -4 /etc/man_db.conf #--------------------------------------------------------- # Flags. # NOCACHE keeps man from creating cat pages. #NOCACHE修改文件时间或创建新文件 touch
修改时间(mtime) 文件的数据内容更新时,就会更新这个时间状态时间(ctime) 文件的状态改变时,就会更新这个时间读取时间(atime) 文件的内容被读取时,就会更新这个时间 [root@localhost ~]# touch [-acdmt] 文件 -a 仅自定义mtime -c 仅修改文件的时间,若该文件不存在在不建立新文件 -d 可以接欲自定义的日期而不是用目前的日期 -m 仅修改mtime -t 后面可以接自定义的时间,格式为[YYYYMMDDhhmm] [root@localhost ~]# cd /tmp [root@localhost tmp]# touch testtouch [root@localhost tmp]# ls -l testtouch -rw-r--r--. 1 root root 0 10月 2 18:25 testtouch [root@localhost tmp]# cp -a ~/.bashrc bashrc [root@localhost tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc 2020年 10月 02日 星期五 18:28:14 CST <===目前的时间 -rw-r--r--. 1 root root 176 12月 29 2013 bashrc <===mtime -rw-r--r--. 1 root root 176 10月 2 13:40 bashrc <===atime -rw-r--r--. 1 root root 176 10月 2 18:26 bashrc <===ctime # 将bashrc文件的日期调整为两天前 [root@localhost tmp]# touch -d "2 days ago" bashrc [root@localhost tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc 2020年 10月 02日 星期五 18:35:57 CST -rw-r--r--. 1 root root 176 9月 30 18:35 bashrc -rw-r--r--. 1 root root 176 9月 30 18:35 bashrc -rw-r--r--. 1 root root 176 10月 2 18:35 bashrc默认权限 umask
若用户建立为文件则默认没有可执行权限(x),即只有rw这两个项目,也就是最大为666
若用户建立为目录,因为x与是否可以进入此目录有关,因此默认为所以权限军开放,也就是777
umask有四组数字,第一组是给特殊权限用的;umask的数字指定的该默认值需要减掉的权限
查看方式
直接输入umask加入-S [root@localhost ~]# umask 0022 [root@localhost ~]# touch test1 [root@localhost ~]# mkdir test2 [root@localhost ~]# ll -d test* -rw-r--r--. 1 root root 0 10月 3 21:07 test1 drwxr-xr-x. 2 root root 6 10月 3 21:07 test2隐藏属性
chattr(配置文件隐藏属性)
[root@localhost ~]# chattr [+-=] [ASacdistu] 文件或目录参数 + 增加某一个特殊参数,其他原本存在的参数不动 - 删除某一个特殊参数,其他原本存在的参数不动 = 直接设置参数,且仅有后面接的参数 a 当设置a之后,这个文件只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性 i 可以让一个文件 【不能被删除、改名、设置链接也无法写入或新增数据】 只有root才能设置这个属性 [root@localhost ~]# cd /tmp [root@localhost tmp]# touch attrtest [root@localhost tmp]# chattr +i attrtest [root@localhost tmp]# rm attrtest rm:是否删除普通空文件 "attrtest"?y rm: 无法删除"attrtest": 不允许的操作 [root@localhost tmp]# rm -r attrtest rm:是否删除普通空文件 "attrtest"?y rm: 无法删除"attrtest": 不允许的操作 [root@localhost tmp]# chattr -i attrtest [root@localhost tmp]# rm attrtest rm:是否删除普通空文件 "attrtest"?y [root@localhost tmp]#lsattr(显示文件隐藏属性)
[root@localhost ~]# lsattr [-adR] 文件或目录 -a 将隐藏文件的属性也显示出来 -d 如果接的是目录,仅列出目录本身的属性而非目录的文件名 -R 连同子目录的数据也一并列出来 [root@localhost tmp]# touch attrtest [root@localhost tmp]# chattr +aiS attrtest [root@localhost tmp]# lsattr attrtest --S-ia---------- attrtest文件类型
如果你想要知道某个文件的基本信息,可以利用file命令来查看
[root@localhost ~]# file ~/.bashrc /root/.bashrc: ASCII text <===ASCII的纯文本文件 [root@localhost ~]# file /usr/bin/passwd /usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1e5735bf7b317e60bcb907f1989951f6abd50e8d, stripped [root@localhost ~]# file /var/lib/mlocate/mlocate.db /var/lib/mlocate/mlocate.db: data <===data文件which (查找【执行文件】)
[root@localhost ~]# which [-a] command -a 将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称 [root@localhost ~]# which ifconfig /usr/sbin/ifconfig [root@localhost ~]# which which alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/alias /usr/bin/which [root@localhost ~]# which history /usr/bin/which: no history in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin:/usr/local/java/jdk1.8.0_231/bin:/usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin) [root@localhost ~]# history --help bash: history: --: 无效选项 history: 用法:history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...] #注意:这个命令是根据 【PATH】这个环境变量所规范的路径去查找执行文件的文件名whereis(由一些特定的目录查找文件)
[root@localhost ~]# whereis [-bmsu] 文件或目录名 -b 只查找二进制格式的文件 -m 只找在说明文件manual路径下的文件 -s 只找source源文件 -u 查找不在上述三个项目当中的其他特殊文件 [root@localhost ~]# whereis ifconfig ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [root@localhost ~]# whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz [root@localhost ~]# whereis -m passwd passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gzlocate/updatedb
[root@localhost ~]# locate [-iclSr] keyword -i 忽略大小写 -c 仅计算找到的文件数量 -l 仅输出几行 -S 输出locate锁使用的数据库文件的相关信息 -r 接正则表达式的显示方式 [root@localhost ~]# locate -l 5 passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd [root@localhost ~]# locate -S 数据库 /var/lib/mlocate/mlocate.db: 13,547 文件夹 151,136 文件 7,687,603 文件名中的字节数 3,503,445 字节用于存储数据库 [root@localhost ~]#find
[root@localhost ~]# find [PATH] [option] [action] #与时间相关 -mtime n 列出n天之前被修改过内容的文件【一天之内】 -mtime +n 列出n天之前被修改过内容的文件【不含n天本身】 -mtime -n 李处n天之内被修改过内容的文件【含n天本身】 -newer file 列出比file新的文件 #与使用者或用户组名称相关 -uid n n为使用者的账号ID -gid n n为用户组名称的ID -user name 使用者账号名称 -group name 用户组名称 #与文件权限及名称有关 -name filename 查找文件名称为filename的文件 -size [+-]SIZE 查找比SIZE大或小的文件gzip zcat/zmore/zless/zgrep
[root@localhost ~]# gzip [-cdtv#] 文件名 [root@localhost ~]# zcat 文件名.gz -c 将压缩的数据输出到屏幕上,可通过数据重定向来处理 -d 解压缩的参数 -t 测试压缩文件的完整性 -v 显示压缩比等信息 -# #为数字,代表压缩等级;-1最快,但是压缩比最差,-9最慢,但是压缩比最好,默认是-6 # 找出/etc下面容量最大的文件复制到/tmp,然后以gzip压缩 [root@localhost ~]# ls -lSdr /etc/* -rw-r--r--. 1 root root 0 6月 10 2014 /etc/wvdial.conf -rw-r--r--. 1 root root 0 4月 11 2018 /etc/subuid ...... -rw-r--r--. 1 root root 81150 9月 29 13:44 /etc/ld.so.cache -rw-r--r--. 1 root root 670293 6月 7 2013 /etc/services [root@localhost ~]# cd /tmp [root@localhost tmp]# cp /etc/services . [root@localhost tmp]# gzip -v services services: 79.7% -- replaced with services.gz [root@localhost tmp]# ll /etc/services /tmp/services* -rw-r--r--. 1 root root 670293 6月 7 2013 /etc/services -rw-r--r--. 1 root root 136088 10月 4 20:39 /tmp/services.gz # 将上述的压缩文件的内容读出来 [root@localhost ~]# zcat services.gz ..... iqobject 48619/udp # iqobject matahari 49000/tcp # Matahari Broker # 将范例一的文件解压缩 [root@localhost tmp]# gzip -d services.gz # 将范例三解压缩的文件使用最佳的压缩比压缩,并保留原来的文件 [root@localhost tmp]# gzip -9 -c services > services.gz [root@localhost tmp]# ll ...... -rw-r--r--. 1 root root 670293 10月 4 20:39 services -rw-r--r--. 1 root root 135489 10月 4 20:48 services.gz ......bzip2 bzcat/bzmore/bzless/bzgrep
[root@localhost ~]# bzip2 [-cdkzv#] 文件名 [root@localhost ~]# bzcat 文件名.bz2 -c 将压缩的数据输出到屏幕上 -d 解压缩的参数 -k 保留原始文件 -z 压缩的参数 -v 显示压缩比等信息 -# 较佳的压缩比 # 将gzip范例留下来的/tmp/services以bzip2压缩 [root@localhost tmp]# bzip2 -v services services: 5.409:1, 1.479 bits/byte, 81.51% saved, 670293 in, 123932 out. [root@localhost tmp]# ll services* -rw-r--r--. 1 root root 123932 10月 4 20:39 services.bz2 -rw-r--r--. 1 root root 135489 10月 4 20:48 services.gz # 将上述的压缩文件的内容读出来 [root@localhost tmp]# bzcat services.bz2 ...... iqobject 48619/udp # iqobject matahari 49000/tcp # Matahari Broker # 将范例一的文件解压缩 [root@localhost tmp]# bzip2 -d services.bz2 # 将范例三解压缩的文件使用最佳的压缩比压缩,并保留原来的文件 [root@localhost tmp]# bzip2 -9 -c services > services.bz2xz xzcat/xzmore/xzless/xzgrep
[root@localhost ~]# xz [-dtlkc#] 文件名 [root@localhost ~]# xcat 文件名.xz -d 解压缩 -t 测试压缩文件的完整性,看有没有错误 -l 列出压缩文件的相关信息 -k 保留原本的文件不删除 -c 将数据在屏幕上输出 -# 较佳的压缩比 [root@localhost tmp]# xz -v services services (1/1) 100 % 97.3 KiB / 654.6 KiB = 0.149 [root@localhost tmp]# ll services* -rw-r--r--. 1 root root 123932 10月 4 20:58 services.bz2 -rw-r--r--. 1 root root 135489 10月 4 20:48 services.gz -rw-r--r--. 1 root root 99608 10月 4 20:39 services.xz [root@localhost tmp]# xz -l services.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 97.3 KiB 654.6 KiB 0.149 CRC64 services.xz [root@localhost tmp]# xzcat services.xz ...... iqobject 48619/udp # iqobject matahari 49000/tcp # Matahari Broker [root@localhost tmp]# xz -d services.xz [root@localhost tmp]# xz -k services注意:压缩时间:xz>bz2>gz 压缩比:xz>bz2>gz
[root@localhost tmp]# ll services* -rw-r--r--. 1 root root 670293 10月 4 20:39 services -rw-r--r--. 1 root root 123932 10月 4 20:58 services.bz2 -rw-r--r--. 1 root root 135489 10月 4 20:48 services.gz -rw-r--r--. 1 root root 99608 10月 4 20:39 services.xztar的选项与参数非常多,下面只介绍常用的几个选项,更多选项可以使用man tar查询
[root@localhost ~]# tar [-z][-h][-J][-cv] [-f 待建立的新文件名] filename... <==打包与压缩 [root@localhost ~]# tar [-z][-h][-J][-tv] [-f 既有的tar文件名] <==查看文件名 [root@localhost ~]# tar [-z][-h][-J][-xv] [-f 既有的tar文件名] [-C 目录] <==解压缩 -c 建立打包文件 -t 查看打包文件的内容含有那些文件名 -x 解包或解压缩 -z 通过 gzip 的支持进行压缩/解压缩 -j 通过 bzip2 的支持进行压缩/解压缩 -J 通过 xz 的支持进行压缩/解压缩 -v 在压缩/解压缩的过程中,将正在处理的文件名显示出来 -f filename -f 后面接要被处理的文件名 -C 目录 用在解压缩 -p 保留备份数据的原本权限与属性 -P 保留绝对路径 --exclude=FILE 在压缩的过程中,不要将FILE打包 使用tar 加入 -z、-j 或 -J 的参数备份/etc目录 [root@localhost ~]# time tar -zpcvf /root/etc.tar.gz /etc tar: 从成员名中删除开头的“/” <===注意这个警告信息 ... real 0m11.096s user 0m1.000s sys 0m0.581s [root@localhost ~]# time tar -jpcvf /root/etc.tar.bz2 /etc ...... real 0m14.313s user 0m2.615s sys 0m0.458s [root@localhost ~]# time tar -Jpcvf /root/etc.tar.xz /etc ...... real 0m24.112s user 0m11.482s sys 0m1.342s [root@localhost ~]# ll /root/etc* -rw-r--r--. 1 root root 9317777 10月 5 17:18 /root/etc.tar.bz2 -rw-r--r--. 1 root root 10726849 10月 5 17:13 /root/etc.tar.gz -rw-r--r--. 1 root root 7530208 10月 5 17:20 /root/etc.tar.xz [root@localhost ~]# du -sm /etc 37 /etc # 虽然使用gzip的速度相当快,但是压缩率最糟糕;使用xz压缩比最佳,但是花费的时间最长;所以如果备份的数据很大,则需要考虑时间成本 查看tar文件的数据内容 [root@localhost ~]# tar -ztvf /root/etc.tar.gz [root@localhost ~]# tar -jtvf /root/etc.tar.bz2 [root@localhost ~]# tar -Jtvf /root/etc.tar.xz 从上述的数据可以看出,每个文件名都没了根目录,这也是上一个练习出现的那个警告信息。 这也是为了安全。如果拿掉了根路径,假设备份数据在/tmp解开,那么解压缩的文件名就会变成【/tmp/etc/xxx】;但如果没有拿掉根路径,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置到/etc/xxx去,如此一来,原本在/etc/下面的数据就会被备份数据所覆盖 。但如果你确定就是要备份根目录到tar的文件中,可以使用-P这个选项,如下:
[root@localhost ~]# tar -jpPcvf /root/etc.and.root.tar.bz2 /etc [root@localhost ~]# tar -jtf /root/etc.and.root.tar.bz2 将备份的数据解压缩,并考虑特定目录的解压缩操作 [root@localhost ~]# tar -jxvf /root/etc.tar.bz2 [root@localhost ~]# ll ...... drwxr-xr-x. 135 root root 8192 10月 5 16:56 etc ...... # 此时打包文件会在本目录下进行解压缩的操作。也可以使用-C在指定的目录下解压缩 [root@localhost ~]# tar -jxvf /root/etc.tar.bz2 -C /tmp [root@localhost ~]# ll /tmp # 处理完毕后,记得将两个目录删除一下 [root@localhost ~]# rm -rf /root/etc tmp/etc 仅解开单一文件 # 先要找到需要的文件名 [root@localhost ~]# tar -jtvf /root/etc.tar.bz2 | grep 'shadow' ---------- root/root 766 2020-09-29 13:51 etc/gshadow ---------- root/root 1227 2020-09-29 13:51 etc/shadow ---------- root/root 753 2020-09-29 13:39 etc/gshadow- ---------- root/root 1123 2020-09-29 13:51 etc/shadow- # 将文件解开 [root@localhost ~]# tar -jtvf 打包文件.bz2 待解开的文件名 [root@localhost ~]# tar -jtvf /root/etc.tar.bz2 etc/shadow ---------- root/root 1227 2020-09-29 13:51 etc/shadow