Linux基础命令(一):文件、目录、查询、搜索、容量、压缩与解压

文章目录

  • 1、时间命令:date
  • 2、日历命令:cal
  • 3、计算器程序:bc
  • 4、基础组合键
  • 5、正确的关机指令使用
    • 5.1 将数据同步写入硬盘中的指令: sync
    • 5.2 惯用的关机指令: shutdown
    • 5.3 重新开机,关机: reboot, halt, poweroff
    • 5.4 管理工具 systemctl 关机
  • 6、改变文件属性
    • 6.1 改变所属群组: chgrp
    • 6.2 改变文件拥有者: chown
    • 6.3 改变文件权限:chmod
      • 6.3.1 数字类型改变文件权限
      • 6.3.2 符号类型改变文件权限
  • 7、复制、删除与移动
    • 7.1 复制文件或目录:cp
    • 7.2 移除文件或目录:rm
    • 7.3 移动文件与目录或更名:mv
  • 8、创建目录和文件
    • 8.1 创建目录
    • 8.2 创建文件
  • 9、查看文件命令:cat
  • 10、文件目录种类
  • 11、文件目录操作
    • 11.1 变换目录:cd
    • 11.2 显示目前的目录:pwd
    • 11.3 创建一个新的目录:mkdir
    • 11.4 删除一个空的目录:rmdir
    • 11.5 文件与目录的检视:ls
  • 12、获取文件名称和文件路径
    • 12.1 获取文件名称:basename
    • 12.2 获取文件路径:dirname
  • 13、查阅文件内容
    • 13.1 直接查看文件内容(常用)
      • 13.1.1 查看文件内容1:cat
      • 13.1.2 查看文件内容2:tac
      • 13.1.3 查看文件内容3:nl
    • 13.2 可翻页查看文件内容(常用)
      • 13.2.1 一页一页翻动1:more
      • 13.2.2 一页一页翻动2:less
    • 13.3 只查看部分文件内容(常用)
      • 13.3.1 取出前几行:head
      • 13.3.2 取出后面几行:tail
      • 13.3.3 取出指定段内的几行:head和tail组合(常用)
    • 13.4 查看非纯文本文件(不常用)
  • 14、修改文件时间
  • 15、指令与文件的搜寻
    • 15.1 指令文件名的搜寻:which
    • 15.2 文件文件名的搜寻:whereis,locate,find
      • 15.2.1 在特定目录中寻找文件名:whereis
      • 15.2.2 数据库中寻找文件名:locate / updatedb
      • 15.2.3 硬盘中寻找文件名:find
  • 16、文件系统操作命令
    • 16.1 磁盘与目录容量操作
      • 16.1.1 查看文件系统的整体磁盘使用量:df
      • 16.1.2 查看文件系统的磁盘使用量:du
  • 17、链接文件操作
  • 18、常用压缩和解压文件命令
    • 18.1 单一文件压缩和解压命令:gzip/bzip2/xz
      • 18.1.1 压缩和解压文件:gzip(查看压缩文件命令:zcat/zmore/zless/zgrep)
      • 18.1.2 压缩和解压文件:bzip2(查看压缩文件命令:bzcat/bzmore/bzless/bzgrep)
      • 18.1.3 压缩和解压文件:xz(查看压缩文件命令:xzcat/xzmore/xzless/xzgrep)
    • 18.2 多文件压缩和解压命令:tar

1、时间命令:date

date 格式化输出命令:+%Y/%m/%d或+%H:%M:%S

[test@test log]$ date
2022年 12月 29日 星期四 16:55:41 CST
[test@test log]$ date +%Y/%m/%d
2022/12/29
[test@test log]$ date +%H:%M:%S
16:55:55

2、日历命令:cal

cal:直接下达指令,显示当前月份日历
cal [year] :指定年份所有月份的日历
cal [month] [year]:指定年月的日历
注意:某些指令有特殊的参数存在,若输入错误的参数,则该指令会有错误讯息的提示,通过这个提示我们可以借以了解指令下达错误之处;

[test@test logs]$ cal
     十二月 2022    
日 一 二 三 四 五 六
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
[test@test logs]$ cal 5 2022
      五月 2022     
日 一 二 三 四 五 六
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

3、计算器程序:bc

bc:进入计算程序
quit:退出程序

[test@test logs]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+2
3
2*3
6
quit

4、基础组合键

Ctrl + c :停止当前正在运行的指令
Ctrl + d:退出当前用户,等同于exit
shift + pageUp | pageDown:翻页

5、正确的关机指令使用

5.1 将数据同步写入硬盘中的指令: sync

5.2 惯用的关机指令: shutdown

[root@study ~]# /sbin/shutdown [-krhc] [时间] [警告讯息]
选项与参数:
-k : 不要真的关机,只是发送警告讯息出去!
-r : 在将系统的服务停掉之后就重新开机(常用)
-h : 将系统的服务停掉后,立即关机。 (常用)
-c : 取消已经在进行的 shutdown 指令内容。
时间 : 指定系统关机的时间!时间的范例下面会说明。若没有这个项目,则默认 1 分钟后自动进行。

范例:
[root@study ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins'
Broadcast message from root@study.centos.vbird (Tue 2015-06-02 10:51:34 CST):
I will shutdown after 10 mins
The system is going down for power-off at Tue 2015-06-02 11:01:34 CST!

[root@study ~]# shutdown -h now
立刻关机,其中 now 相当于时间为 0 的状态
[root@study ~]# shutdown -h 20:25
系统在今天的 20:25 分会关机,若在21:25才下达此指令,则隔天才关机
[root@study ~]# shutdown -h +10
系统再过十分钟后自动关机
[root@study ~]# shutdown -r now
系统立刻重新开机
[root@study ~]# shutdown -r +30 'The system will reboot'
再过三十分钟系统会重新开机,并显示后面的讯息给所有在线上的使用者
[root@study ~]# shutdown -k now 'This system will reboot'
仅发出警告信件的参数!系统并不会关机啦!吓唬人!

shutdown -c ”来取消这次的关机指令。而如果你什么参数都没有加,单纯执行 shutdown 之后, 系统默认会在 1 分钟后进行“关机”的动作喔!

5.3 重新开机,关机: reboot, halt, poweroff

在默认的情况下, 这几个指令都会完成一样的工作!全部的动作都是去调用 systemctl 这个重要的管理命令!

[root@study ~]# halt # 系统停止~屏幕可能会保留系统已经停止的讯息!
[root@study ~]# poweroff # 系统关机,所以没有提供额外的电力,屏幕空白!

5.4 管理工具 systemctl 关机

[root@study ~]# systemctl [指令]
指令项目包括如下:
halt 进入系统停止的模式,屏幕可能会保留一些讯息,这与你的电源管理模式有关
poweroff 进入系统关机模式,直接关机没有提供电力喔!
reboot 直接重新开机
suspend 进入休眠模式

[root@study ~]# systemctl reboot # 系统重新开机
[root@study ~]# systemctl poweroff # 系统关机

6、改变文件属性

6.1 改变所属群组: chgrp

使用说明:这个指令就是change group的缩写,chgrp [-R] dirname/filename
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况

[root@study ~]# chgrp users log.log
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 log.log

6.2 改变文件拥有者: chown

使用说明:这个指令就是change owner的缩写,chown [-R] dirname/filename
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个拥有者。常常用在变更某一目录内所有的文件之情况

[root@study~]#chown [-R] 帐号名称 文件或目录
[root@study~]#chown [-R] 帐号名称:群组名称文件或目录
范例:将initial-setup-ks.cfg的拥有者改为bin这个帐号:
[root@study~]#chown bin initial-setup-ks.cfg
[root@study~]#ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将initial-setup-ks.cfg的拥有者与群组改回为root:
[root@study~]#chown root:root initial-setup-ks.cfg 
[root@study~]#ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
408page

6.3 改变文件权限:chmod

6.3.1 数字类型改变文件权限

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限,文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个一组的!可以使用数字来代表各个权限,各权限的分数对照 r:4 w:2 x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= — = 0+0+0 = 0
使用说明: chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变

[root@study ~]# ls -al log.log
-rw-r--r--. 1 root root 176 Dec 29 2013 log.log
[root@study ~]# chmod 777 log.log
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 log.log

6.3.2 符号类型改变文件权限

九个权限分别是(1)user (2)group (3)others三种身份,由u, g, o来代表三种身份的权限,a则代表 all 即全部的身份;

修改命令 权限命令 符号 linux权限 文件或目录
chmod u\g\o\a +-= r\w\x 文件或目录

● (1)设置权限,使用"=“符号;
● (2)增加权限,使用”+“符号;
● (3)减少权限,使用”-"符号;

[root@study ~]# chmod u=rwx,go=rx .bashrc
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

只想要增加.bashrc这个文件的每个人均可写入的权限
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

拿掉全部人的可执行权限
[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc

7、复制、删除与移动

7.1 复制文件或目录:cp

使用说明1: cp [-adfilprsu] 来源文件(source) 目标文件(destination)
使用说明2: cp [options] source1 source2 source3 … directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
–preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!

//范例一:用root身份,将主文件夹下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@study ~]# cp ~/.bashrc /tmp/bashrc
[root@study ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖


# 重复作两次动作,由于 /tmp 下面已经存在 bashrc 了,加上 -i 选项后,
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 来二次确认呢!
    
//范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[root@study ~]# cd /tmp
[root@study tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘
[root@study tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-r--r--. 1 root root 28416 Jun 11 19:01 wtmp
# 注意上面的特殊字体,在不加任何选项的情况下,文件的某些属性/权限会改变;
# 这是个很重要的特性!要注意喔!还有,连文件创建的时间也不一样了!
# 那如果你想要将文件的所有特性都一起复制过来该怎办?可以加上 -a 喔!如下所示:
[root@study tmp]# cp -a /var/log/wtmp wtmp_2
[root@study tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 wtmp_2
# 瞭了吧!整个数据特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!
    
//范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 下面
[root@study tmp]# cp /etc/ /tmp
cp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上 -r 的选项
[root@study tmp]# cp -r /etc/ /tmp
# 还是要再次的强调喔! -r 是可以复制目录,但是,文件与目录的权限可能会被改变
# 所以,也可以利用“ cp -a /etc /tmp ”来下达指令喔!尤其是在备份的情况下!
    
//范例四:将范例一复制的 bashrc 创建一个链接文件 (symbolic link)
[root@study tmp]# ls -l bashrc
-rw-r--r--. 1 root root 176 Jun 11 19:01 bashrc <==先观察一下文件情况
[root@study tmp]# cp -s bashrc bashrc_slink
[root@study tmp]# cp -l bashrc bashrc_hlink
[root@study tmp]# ls -l bashrc*
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc <==与原始文件不太一样了!
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc_hlink
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc
    
//范例五:将主文件夹的 .bashrc 及 .bash_history 复制到 /tmp 下面
[root@study tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!

7.2 移除文件或目录:rm

使用说明: rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除!最常用在目录的删除了!这是非常危险的选项!!!

//范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉!
[root@study ~]# cd /tmp
[root@study tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的文件名!
    
//范例二:通过万用字符*的帮忙,将/tmp下面开头为bashrc的文件名通通删除:
[root@study tmp]# rm -i bashrc*
# 注意那个星号,代表的是 0 到无穷多个任意字符喔!很好用的东西!

//范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉!
[root@study tmp]# rmdir /tmp/etc
rmdir: failed to remove '/tmp/etc': Directory not empty <== 删不掉啊!因为这不是空的目录!
[root@study tmp]# rm -r /tmp/etc
rm: descend into directory `/tmp/etc'? y
rm: remove regular file `/tmp/etc/fstab'? y
rm: remove regular empty file `/tmp/etc/crypttab'? ^C <== 按下 [crtl]+c 中断
# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!

7.3 移动文件与目录或更名:mv

使用说明1: mv [-fiu] source destination
使用说明2: mv [options] source1 source2 source3 … directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)

//范例一:复制一文件,创建一目录,将文件移动到目录中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest
# 将某个文件移动到某个目录去,就是这样做!

//范例二:将刚刚的目录名称更名为 mvtest2
[root@study tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~
# 其实在 Linux 下面还有个有趣的指令,名称为 rename ,
# 该指令专职进行多个文件名的同时更名,并非针对单一文件名变更,与mv不同。请man rename。
                         
//范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
[root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标文件一定是“目录!”
# 意思是说,将所有的数据移动到该目录的意思!

8、创建目录和文件

8.1 创建目录

使用说明:mkdir 目录

[root@study tmp]# mkdir testing 

8.2 创建文件

使用说明:touch 文件

[root@study tmp]# touch testing/testing 

9、查看文件命令:cat

使用说明:cat 文件名

[test@testapi]$ cat test.log 
test

10、文件目录种类

. 代表此层目录
… 代表上一层目录

  • 代表前一个工作目录
    ~ 代表“目前使用者身份”所在的主文件夹
    ~account 代表 account 这个使用者的主文件夹(account是个帐号名称)

11、文件目录操作

11.1 变换目录:cd

[dmtsai@study ~]$ su - # 先切换身份成为 root 看看!
[root@study ~]# cd [相对路径或绝对路径]
# 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号啰!
[root@study ~]# cd ~dmtsai
# 代表去到 dmtsai 这个使用者的主文件夹,亦即 /home/dmtsai
[root@study dmtsai]# cd ~
# 表示回到自己的主文件夹,亦即是 /root 这个目录
[root@study ~]# cd
# 没有加上任何路径,也还是代表回到自己主文件夹的意思喔!
[root@study ~]# cd ..
# 表示去到目前的上层目录,亦即是 /root 的上层目录的意思;
[root@study /]# cd -
# 表示回到刚刚的那个目录,也就是 /root 啰~
[root@study ~]# cd /var/spool/mail
# 这个就是绝对路径的写法!直接指定要去的完整路径名称!
[root@study mail]# cd ../postfix
# 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/postfix 就这样写!

11.2 显示目前的目录:pwd

使用说明: pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用链接 (link) 路径。

 范例:单纯显示出目前的工作目录:
[root@study ~]# pwd
/root <== 显示出目录啦~
范例:显示出实际的工作目录,而非链接文件本身的目录名而已
[root@study ~]# cd /var/mail <==注意,/var/mail是一个链接文件
[root@study mail]# pwd
/var/mail <==列出目前的工作目录
[root@study mail]# pwd -P
/var/spool/mail <==怎么回事?有没有加 -P 差很多~
[root@study mail]# ls -ld /var/mail
lrwxrwxrwx. 1 root root 10 May 4 17:51 /var/mail -> spool/mail
# 看到这里应该知道为啥了吧?因为 /var/mail 是链接文件,链接到 /var/spool/mail
# 所以,加上 pwd -P 的选项后,会不以链接文件的数据显示,而是显示正确的完整路径啊!

11.3 创建一个新的目录:mkdir

使用说明:mkdir [-mp] 目录名称
选项与参数:
-m :设置文件的权限喔!直接设置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递回创建起来!
范例:请到/tmp下面尝试创建数个新目录看看:

[root@study ~]# cd /tmp
[root@study tmp]# mkdir test <==创建一名为 test 的新目录
[root@study tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory
# 话说,系统告诉我们,没可能创建这个目录啊!就是没有目录才要创建的!见鬼嘛?
[root@study tmp]# mkdir -p test1/test2/test3/test4
# 原来是要建 test4 上层没先建 test3 之故!加了这个 -p 的选项,可以自行帮你创建多层目录!
范例:创建权限为rwx--x--x的目录
[root@study tmp]# mkdir -m 711 test2
[root@study tmp]# ls -ld test*
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
# 仔细看上面的权限部分,如果没有加上 -m 来强制设置属性,系统会使用默认属性。

11.4 删除一个空的目录:rmdir

使用说明:rmdir [-p] 目录名称
选项与参数:
-p :连同“上层”“空的”目录也一起删除

范例:将于mkdir范例中创建的目录(/tmp下面)删除掉!
[root@study tmp]# ls -ld test* <==看看有多少目录存在?
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
[root@study tmp]# rmdir test <==可直接删除掉,没问题
[root@study tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir: failed to remove ‘test1’: Directory not empty
[root@study tmp]# rmdir -p test1/test2/test3/test4
[root@study tmp]# ls -ld test* <==您看看,下面的输出中test与test1不见了!
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
# 瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~

11.5 文件与目录的检视:ls

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-A :全部的文件,连同隐藏文件,但不包括 ... 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
-F :根据文件、目录等信息,给予附加数据结构,例如:
*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号码,inode 的意义下一章将会介绍;
-l :长数据串行出,包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件大小大小排序,而不是用文件名排序;
-t :依时间排序,而不是用文件名。
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设置来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
而非内容变更时间 (modification time)

12、获取文件名称和文件路径

12.1 获取文件名称:basename

[root@study ~]# basename /etc/sysconfig/network
network <== 很简单!就取得最后的文件名~

12.2 获取文件路径:dirname

[root@study ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!

13、查阅文件内容

● cat:由第一行开始显示文件内容!
● tac:从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
● nl:显示的时候,顺道输出行号!
● more:一页一页的显示文件内容!
● less:与 more 类似,但是比 more 更好的是,他可以往前翻页!
● head:只看头几行!
● tail:只看尾巴几行!
● od:以二进制的方式读取文件内容!

13.1 直接查看文件内容(常用)

13.1.1 查看文件内容1:cat

使用说明: cat [-AbEnTv] 文件
选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已; (较常用)
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符

//范例一:检阅 /etc/issue 这个文件的内容
[root@study ~]# cat /etc/issue
\S
Kernel \r on an \m
//范例二:承上题,如果还要加印行号呢?
[root@study ~]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
# 所以这个文件有三行!看到了吧!可以印出行号呢!这对于大文件要找某个特定的行时,有点用处!
# 如果不想要编排空白行的行号,可以使用“cat -b /etc/issue”,自己测试看看:
//范例三:将 /etc/man_db.conf 的内容完整的显示出来(包含特殊字符)
[root@study ~]# cat -A /etc/man_db.conf
# $
....(中间省略)....
MANPATH_MAP^I/bin^I^I^I/usr/share/man$
MANPATH_MAP^I/usr/bin^I^I/usr/share/man$
MANPATH_MAP^I/sbin^I^I^I/usr/share/man$
MANPATH_MAP^I/usr/sbin^I^I/usr/share/man$

13.1.2 查看文件内容2:tac

使用说明:tac 文件

[root@study ~]# tac /etc/issue
Kernel \r on an \m
\S
# 与刚刚上面的范例一比较,是由最后一行先显示!

13.1.3 查看文件内容3:nl

使用说明: nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。

// # 行号加上来啰~那么如果要让行号前面自动补上0
[root@study ~]# nl -b a -n rz /etc/issue
000001 \S
000002 Kernel \r on an \m
000003
// # 嘿嘿!自动在自己字段的地方补上 0 了~默认字段是六位数,如果想要改成 3 位数?
[root@study ~]# nl -b a -n rz -w 3 /etc/issue
001 \S
002 Kernel \r on an \m
003

13.2 可翻页查看文件内容(常用)

13.2.1 一页一页翻动1:more

使用说明:more 文件
空格键 (space):代表向下翻一页;
Enter :代表向下翻“一行”;
/字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;
:f :立刻显示出文件名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

[test@test etc]$ more man.config 
#
# If no catdir is given, it is assumed to be equal to the mandir
... 省略 ...
# Certain versions of the FHS recommend putting formatted versions of
# /usr/.../share/man/[locale/]manx/page.x into
# /var/cache/man/.../[locale/]catx/page.x.
# The keyword FHS will cause this behaviour (and overrides FSSTND).
# Explicitly given catdirs override.
#
# FSSTND
FHS
#
--More--(25%)

13.2.2 一页一页翻动2:less

使用说明:
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个数据的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序;

[test@test etc]$ less man.config 
#
# If no catdir is given, it is assumed to be equal to the mandir
... 省略 ...
# Certain versions of the FHS recommend putting formatted versions of
# /usr/.../share/man/[locale/]manx/page.x into
# /var/cache/man/.../[locale/]catx/page.x.
# The keyword FHS will cause this behaviour (and overrides FSSTND).
# Explicitly given catdirs override.
#
# FSSTND
FHS
/man

13.3 只查看部分文件内容(常用)

13.3.1 取出前几行:head

使用说明: head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思(数字为正数代表显示几行,数字为负数代表末尾后面多少行不显示)

//范例1:# 默认的情况中,显示前面十行!若要显示前 3 行,就得要这样:
[test@test etc]$ head -n 3 man.config 
#
# Generated automatically from man.conf.in by the
# configure script.
// 范例2:如果后面100行的数据都不打印,只打印/etc/man_db.conf的前面几行,该如何是好?
[root@study ~]# head -n -100 /etc/man_db.conf

13.3.2 取出后面几行:tail

使用说明: tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测

[root@study ~]# tail /etc/man_db.conf
//# 默认的情况中,显示最后的十行!若要显示最后的 20 行
[root@study ~]# tail -n 20 /etc/man_db.conf
    
//范例一:如果不知道/etc/man_db.conf有几行,却只想列出100行以后的数据时?
[root@study ~]# tail -n +100 /etc/man_db.conf
    
//范例二:持续侦测/var/log/messages的内容
[root@study ~]# tail -f /var/log/messages
<==要等到输入[crtl]-c之后才会离开tail这个指令的侦测!

13.3.3 取出指定段内的几行:head和tail组合(常用)

1、基于head取文件或查询条件中的前多少行;
2、基于tail取文件或查询条件的后多少行;【tail -n [+]数字】 "+"代表从多少行开始显示
两者结合使用,可自行根据查询条件进行截取中间数据,常用案例如下:

// 案例1:获取指定行数(3754227)后两行数据
[test@test ~]# cat info.log | tail -n +3754227 | head -n 2
3754227 2023-03-02 20:15:32.880 |-INFO  230302201532886 ,, org.OrderServiceImpl [892] -| Info:[{"amount":1,"operate":"fee","max_fee_flag":0}]
3754228 2023-03-02 20:15:32.926 |-INFO  230302201532886 ,, org.impl.OrderServiceImpl [1118] -| <<<<<取XX费用

// 案例2:查询日志某关键字前后十行
[test@test ~]# grep -C 10 'Exception' xxx.log  xxx为日志文件名称
// 案例3:上面10行
[test@test ~]# grep -B 10 'Exception' xxx.log
// 案例4:下面10行
[test@test ~]# grep -A 10 'Exception' xxx.log

13.4 查看非纯文本文件(不常用)

使用说明: od [-t TYPE] 文件
选项或参数:
-t :后面可以接各种“类型 (TYPE)”的输出,例如:
a :利用默认的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size Bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size Bytes ;
o[size] :利用八进位(octal)来输出数据,每个整数占用 size Bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size Bytes ;

[test@test]$ od -t a passwd 
0000000 del   E   L   F stx soh soh nul nul nul nul nul nul nul nul nul
0000020 etx nul   > nul soh nul nul nul   P  sp nul nul nul nul nul nul
0000040   @ nul nul nul nul nul nul nul   0   q nul nul nul nul nul nul

14、修改文件时间

使用说明: touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不创建新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date=“日期或时间”
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
使用范围:
(1)创建一个空的文件;
(2)将某个文件日期修订为目前 (mtime 与 atime)

//范例一:新建一个空的文件并观察时间
[dmtsai@study ~]# cd /tmp
[dmtsai@study tmp]# touch testtouch
[dmtsai@study tmp]# ls -l testtouch
-rw-rw-r--. 1 dmtsai dmtsai 0 Jun 16 00:45 testtouch
# 注意到,这个文件的大小是 0 呢!在默认的状态下,如果 touch 后面有接文件,
# 则该文件的三个时间 (atime/ctime/mtime) 都会更新为目前的时间。若该文件不存在,
# 则会主动的创建一个新的空的文件喔!例如上面这个例子!
    
//范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期
[dmtsai@study tmp]# cp -a ~/.bashrc bashrc
[dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
Tue Jun 16 00:49:24 CST 2015 <==这是目前的时间
-rw-r--r--. 1 dmtsai dmtsai 231 Mar 6 06:06 bashrc <==这是 mtime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 23:44 bashrc <==这是 atime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:47 bashrc <==这是 ctime

15、指令与文件的搜寻

15.1 指令文件名的搜寻:which

使用说明:which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

[test@test /]$ which -a date
/bin/date
[test@test /]$ which -a ls
alias ls='ls --color=auto'
        /bin/ls

15.2 文件文件名的搜寻:whereis,locate,find

15.2.1 在特定目录中寻找文件名:whereis

使用说明: whereis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
说明:whereis 主要是针对 /bin/sbin 下面的可执行文件, 以及 /usr/share/man 下面的 man page 文件,跟几个比较特定的目录来处理;

[test@test]$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz

15.2.2 数据库中寻找文件名:locate / updatedb

使用说明: locate [-ir] keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正则表达式的显示方式
说明:locate 来寻找数据的时候特别的快, 是因为 locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据搜索;
缺点:数据库的创建默认是在每天执行一次;
解决办法:
● updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;
● locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名。

//范例一:找出系统中所有与 passwd 相关的文件名,且只列出 5[root@study ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

//范例二:列出 locate 查询所使用的数据库文件之文件名与各数据数量
[root@study ~]# locate -S
Database /var/lib/mlocate/mlocate.db:
8,086 directories # 总纪录目录数
109,605 files # 总纪录文件数
5,190,295 Bytes in file names
2,349,150 Bytes used to store database

15.2.3 硬盘中寻找文件名:find

使用说明: find [PATH] [option] [action]
选项与参数:

  1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
    -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名。
  2. 与使用者或群组名称有关的参数:
    -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字。
    -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在/etc/group。
    -user name :name 为使用者帐号名称喔!例如 dmtsai
    -group name:name 为群组名称喔,例如 users ;
    -nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
    -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
    当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,就可以使用 -nouser 与 -nogroup 搜寻。
  3. 与文件权限及名称有关的参数:
    -name filename:搜寻文件名称为 filename 的文件;(常用)
    范例:找出文件名为 filename 这个文件
    eg: find / -name filename
    -size [±]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB 还要大的文件,就是“ -size +50k ”
    -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
    -perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
    -perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,我们要搜寻 -rwxr–r-- ,亦即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r-- 的属性了。
    -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw… 的属性存在!
  4. 额外可进行的动作:
    -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
    -print :将结果打印到屏幕上,这个动作是默认动作!
//范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
[root@study ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 有变动过的文件都被列出的意思!
//范例二:寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出
[root@study ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的
    
//范例三:搜寻 /home 下面属于 dmtsai 的文件
[root@study ~]# find /home -user dmtsai
# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,就可以利用这个指令将属于某个使用者的所有文件都找出来喔!
//范例四:搜寻系统中不属于任何人的文件
[root@study ~]# find / -nouser
# 通过这个指令,轻易找出那些不太正常的文件。如果有找到不属于系统任何人的文件时,
# 不要太紧张,那有时候是正常的~尤其是你曾经以源代码自行编译软件时。
    
//范例五:找出文件名为 passwd 这个文件
[root@study ~]# find / -name passwd
//范例五-1:找出文件名包含了 passwd 这个关键字的文件
[root@study ~]# find / -name "*passwd*"
# 利用这个 -name 可以搜寻文件名啊!默认是完整文件名,如果想要找关键字,
# 可以使用类似 * 的任意字符来处理
//范例六:找出 /run 目录下,文件类型为 Socket 的文件名有哪些?
[root@study ~]# find /run -type s
# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件

//范例七:将上个范例找到的文件使用 ls -l 列出来~
[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!
范例九:找出系统中,大于 1MB 的文件
[root@study ~]# find / -size +1M

16、文件系统操作命令

16.1 磁盘与目录容量操作

16.1.1 查看文件系统的整体磁盘使用量:df

使用说明:df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示

[test@test]$ df -h
Filesystem            	Size  Used Avail Use% Mounted on
/dev/mapper/vg-lv_root  50G  3.8G   43G   9% /
tmpfs                 5.9G     0  5.9G   0% /dev/shm
/dev/sda1             190M   70M  111M  39% /boot

16.1.2 查看文件系统的磁盘使用量:du

使用说明: du [-ahskm] 文件或目录名称
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。(常用)
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

[test@test]$ du -ah
584K    ./error1.log
26M     ./error2.log

查看硬盘使用情况: du -h --max-depth=1 /usr/local/ | sort -h

17、链接文件操作

使用说明:ln [-sf] 来源文件 目标文件
选项与参数:
-s:如果不加任何参数就进行链接,那就是hard link,至于-s就是symbolic link :
-f:如果目标文件存在时,就主动的将目标文件直接移除后再创建!
说明:
符号链接文件:Symbolic link,删除原文件,链接文件失效,无法打开;
实体链接文件:Hard Link 基于inode创建的实体文件,删除源文件,链接文件依旧能打开,但不能对目录创建链接;

// 创建空文件test.log
[test@test]$ touch test.log
// 创建符号链接文件
[test@test]$ ln -s test.log testSymbolic.log
// 创建实体链接文件
[test@test]$ ln test.log testHardLink.log
[test@test]$ ll test*
-rw-rw-r-- 2 posp test 0 23 09:55 testHardLink.log
-rw-rw-r-- 2 posp test 0 23 09:55 test.log
lrwxrwxrwx 1 posp test 8 23 09:55 testSymbolic.log -> test.log

18、常用压缩和解压文件命令

常见压缩文件扩展名:
*.Z: compress程序压缩的文件;
*.zip: zip程序压缩的文件;
*.gz: gzip程序压缩的文件;
*.bz2: bzip2程序压缩的文件;
*.xz: xz程序压缩的文件;
*.tar: tar程序打包的数据,并没有压缩过;
*.tar.gz: tar程序打包的文件,其中并且经过gzip的压缩;
*.tar.bz2: tar程序打包的文件,其中并且经过bzip2的压缩;
*.tar.xz: tar程序打包的文件,其中并且经过xz的压缩;

18.1 单一文件压缩和解压命令:gzip/bzip2/xz

18.1.1 压缩和解压文件:gzip(查看压缩文件命令:zcat/zmore/zless/zgrep)

gzip 是应用度最广的压缩指令了!目前gzip可以解开compress,zip与gzip等软件所压缩的文件。gzip所创建的压缩文件为*.gz的文件名
使用说明:gzip [-cdtv#] 文件名
使用说明:zcat 文件名.gz
选项与参数:
-c:将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t:可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v:可以显示出原文件/压缩文件的压缩比等信息;
-#:#为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好

[test@test]$ ls
test.log
// 压缩文件到指定压缩文件名字
[test@test]$ gzip -9 -c test.log > test.gz
[posp@test]$ ls
test.gz  test.log
[test@apptest135 tkoFile]$ ls
test.gz  test.log
[test@test]$ rm -f test.log 
[posp@test]$ ls
test.gz
// 解压文件
[test@test]$ gzip -d test.gz 
[test@test]$ ls
test

18.1.2 压缩和解压文件:bzip2(查看压缩文件命令:bzcat/bzmore/bzless/bzgrep)

若说gzip是为了取代compress并提供更好的压缩比而成立的,那么bzip2则是为了取代gzip并提供更佳的压缩比而来的,其压缩比gzip还要好,用法几乎与gzip相同。
使用说明:bzip2 [-cdkzv#] 文件名
使用说明:bzcat 文件名.bz2
选项与参数:
-c:将压缩的数据输出到屏幕上,可通过数据流重导向来处理;(常用压缩)
-d :解压缩的参数;
-t:可以用来检验一个压缩文件的一致性~看看文件有无错误;
-k:保留原始文件,而不会删除原始的文件;
-z:压缩的参数(默认值,可以不加);
-v:可以显示出原文件/压缩文件的压缩比等信息;(压缩)
-#:#为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好

// 压缩文件
[test@test tkoFile]$ bzip2 -9 -c test.log > test.bz2
[test@test tkoFile]$ ll
-rw-rw-r--  1 test test   54 215 14:22 test.bz2
-rw-rw-r--  1 test test   11 215 14:21 test.log
// 显示压缩文件信息方式来压缩
[test@test tkoFile]$ bzip2 -v test.log 
  test.log:  0.204:1, 39.273 bits/byte, -390.91% saved, 11 in, 54 out.
[test@test tkoFile]$ ll
-rw-rw-r--  1 test test   54 215 14:22 test.bz2
-rw-rw-r--  1 test test   54 215 14:21 test.log.bz2
[test@test tkoFile]$ bzip -d test.log.bz2 
-bash: bzip: command not found
[test@test tkoFile]$ bzip2 -d test.log.bz2 
[test@test tkoFile]$ ll
-rw-rw-r--  1 test test   54 215 14:22 test.bz2
-rw-rw-r--  1 test test   11 215 14:21 test.log

18.1.3 压缩和解压文件:xz(查看压缩文件命令:xzcat/xzmore/xzless/xzgrep)

使用说明:xz [-dtlkc#] 文件名
使用说明:xcat 文件名.xz
选项与参数:
-d:就是解压缩啊!
-t:测试压缩文件的完整性,看有没有错误
-l:列出压缩文件的相关信息
-k:保留原本的文件不删除~
-c:同样的,就是将数据由屏幕上输出的意思!
-#:同样的,也有较佳的压缩比的意思!

// 压缩文件
[test@test tkoFile]$ xz -v xz.log 
xz.log (1/1)
  100.0 %                         68 B / 12 B = 5.667                         
[test@test tkoFile]$ ls -l
总用量 4
-rw-rw-r-- 1 test test 68 215 14:41 xz.log.xz
// 解压文件
[test@test tkoFile]$ xz -d xz.log.xz 
[test@test tkoFile]$ ls -l
总用量 4
-rw-rw-r-- 1 test test 12 215 14:41 xz.log
[test@test tkoFile]$ xz -c -9 xz.log > xz.xz
[test@test tkoFile]$ ls -l
总用量 8
-rw-rw-r-- 1 test test 12 215 14:41 xz.log
-rw-rw-r-- 1 test test 68 215 14:45 xz.xz

压缩时间与空间总结:

  1. gzip时间最短;
  2. bzip2时间其次,但压缩性能比gzip强;
  3. xz时间最长,压缩最强,但是压缩性能是最强的;

18.2 多文件压缩和解压命令:tar

使用说明: tar [-z|-j|-J] [cv] [-f 待创建的新文件名] filename… <==打包与压缩
使用说明: tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] <==察看文件名
使用说明: tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] <==解压缩
选项与参数:
    -c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
    -t :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
    -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串命令行中。
    -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
    -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
    -J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串命令行中
    -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
    -f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记)
    -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
    -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
    -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
    --exclude=FILE:在压缩的过程中,不要将 FILE 打包!

最简单的使用tar就只要记忆下面的方式即可:
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

案例如下:
//案例1:对tkoFile目录进行打包,使用gz语法打包
[test@test]$ tar -zcv -f test.tar.gz ../tkoFile
tar: 从成员名中删除开头的“../”
../tkoFile/
../tkoFile/xz.log
../tkoFile/xz.xz
tar: ../tkoFile: 在我们读入文件时文件发生了变化
[test@test]$ ls -l
-rw-rw-r--  1 test test  277 227 16:48 test.tar.gz
-rw-rw-r--  1 test test   12 215 14:41 xz.log
-rw-rw-r--  1 test test   68 215 14:45 xz.xz

// 案例2:对tkoFile目录进行打包,使用bz2语法打包
[test@test tkoFile]$ time tar -jcv -f bak.tar.bz2 ../tkoFile
tar: 从成员名中删除开头的“../”
../tkoFile/
../tkoFile/test.tar.bz2
../tkoFile/xz.log
../tkoFile/test.tar.gz
../tkoFile/xz.xz
tar: ../tkoFile: 在我们读入文件时文件发生了变化

real    0m0.334s
user    0m0.006s
sys     0m0.024s
[test@test tkoFile]$ ls -l
总用量 20
-rw-rw-r-- 1 test test 1668 33 17:05 bak.tar.bz2
-rw-rw-r-- 1 test test  723 227 17:12 test.tar.bz2
-rw-rw-r-- 1 test test  277 227 16:48 test.tar.gz
-rw-rw-r-- 1 test test   12 215 14:41 xz.log
-rw-rw-r-- 1 test test   68 215 14:45 xz.xz

// 案例3:对bak.tar.bz2解压到指定目录
[test@test tkoFile]$ tar -jxv -f bak.tar.bz2 -C bak
tkoFile/
tkoFile/test.tar.bz2
tkoFile/xz.log
tkoFile/test.tar.gz
tkoFile/xz.xz
// 案例4:对bak.tar.bz2压缩文件进行查询文件
[test@test tkoFile]$ tar -jtv -f bak.tar.bz2 
drwxrwxr-x test/test         0 2023-02-27 17:12 tkoFile/
-rw-rw-r-- test/test       723 2023-02-27 17:12 tkoFile/test.tar.bz2
-rw-rw-r-- test/test        12 2023-02-15 14:41 tkoFile/xz.log
-rw-rw-r-- test/test       277 2023-02-27 16:48 tkoFile/test.tar.gz
-rw-rw-r-- test/test        68 2023-02-15 14:45 tkoFile/xz.xz

你可能感兴趣的:(Linux命令,linux,服务器,运维)