三、文件相关命令

1. 文件操作命令

(1)touch创建文件

touch+不存在的文件名,创建一个文件。

image

如果touch后面是一个已经存在的文件,那么将会更改文件的最后访问时间。

image

(2)rm删除文件

Linux下一切皆文件!

删除目录的时候一般要加上 -r 选项,表示递归删除子目录(因为Linux中的目录是树状的)

image

-f选项表示强制删除

rm -rf *

这条命令表示强制删除当前目录的所有内容( * 适配任意个字符)。

删除多个文件,直接在rm命令后写上多个文件的文件名即可

更多的选项可以通过 man rm 查看。

(3)cp拷贝命令

cp命令的使用要分为几种情况:

① 首先目标文件不存在的情况,会直接把源文件拷贝一份并命名为目标文件名;

image

② 目标文件已存在,源文件会覆盖目标文件,并重命名为目标文件名;

image

③ 目标文件是目录,会把源文件拷贝到目标目录中,如果源文件目录有子目录,需要加 -r选项递归拷贝子目录。

image

(4)mv文件移动

和cp命令一样,也要考虑情况:

① 目标文件不存在,相当于给源文件重命名,和cp的区别是,cp之后源文件依然存在,但是mv之后源文件就没了。

image

② 目标文件存在,将覆盖目标文件,并且源文件消失(区别于cp命令)

image

③ 目标文件为路径,会将源文件移动到目标路径下面。

2. 文件内容相关

(1)cat查看内容

查看文件的内容,加 -n 选项可以显示行号。

image

(2)more按屏查看内容

more可以只显示一屏的文件内容,并且在屏幕下方会显示百分比,按enter将一行一行的滚动翻页,按空格可以一屏一屏的滚动翻页,当显示到100%会自动结束,more不能向上翻页。

image

(3)less按屏查看

less比more功能更多一些,less可以使用上下键翻页,每次滚动一行,enter按行向下滚动,空格按屏向下滚动,上键按行向上滚动(more不可以上翻),并且less显示到末尾不会自动退出,按q键手动退出。

(4)head查看文件头部

如果不加选项参数,默认显示文件的前十行,通过 -n选项可以指定显示行数

image

(5)tail查看文件尾部

如果不加选项参数,默认显示文件的后十行,通过 -n选项可以指定显示行数

image

tail通常的用法是通过 -f 选项一直显示文件尾,通过该选项可以不停的显示文件尾部信息,如果文件尾部信息发生变化,那么tail会立马显示出来,通过 tail -f 可以用于追踪日志变化,比如在通信中,我们通过日志打印连接情况,这样就可以在终端不停的显示最新的连接情况。通过SecureCRT克隆会话功能,可以实现一个会话用于通信中的各种操作,另一个会话通过 tail -f 追踪日志变化。

3. 文件权限与用户属性

当我们使用 ls -l 查看详细信息的时候,会看到文件的详细信息,每部分的含义请看下图

image

说明:目录都是具有可执行权限的,如果把目录权限修改为不可执行,那么目录将无法进入;目录大小一般都是4096字节,也就是4kb。

文件类型 含义
d 目录文件
- 普通文件
l 软连接(符号链接)
b 块设备
p pipe管道设备
s 本地套接字
c 字符设备
权限 含义
r 读权限
w 写权限
x 执行权限

权限位是按照 读权限-写权限-执行权限 顺序排列的,第一位表示读权限,有则写 r,无则为 - ;第二位是写权限,有则写 w ,无则为 - ;第三位是执行权限,有则写 x ;无则为 - 。对应的权限位数字表示法为,有权限为1,无权限为0。下面举例说明:

image

(1)umask查看8进制文件掩码

umask可以查看文件权限的掩码,那么什么是权限掩码呢?这应该分文件和目录两种情况来考虑,因为二者的默认权限是不同的。

① 目录

以上面看到的aa目录为例,它的权限为 rwxr-xr-x 用数字表示是0755,那么用umask查看它的8进制权限掩码为0022

image

目录默认的满权限为0777,用掩码0022对满权限0777取反得0755,再用0755&0777,得到0755这就是目录aa的权限。或者直接 0777-0022=0755 也可。

② 文件

文件默认满权限是0666,所以应将文件掩码对0666取反再相与,或0666减去掩码,比如文件3.c,0666-0022=0666 对应 rw-r–r–。

4. 修改用户权限

我们在命令行的时候可以看到最前面有一个 # 或者 $ 他们分别代表超级用户root和普通用户。

# :超级用户root,管理员用户

$:普通用户

image

我的前面是一个 # 说明我当前用的是root超级用户。

我们通常会有用户和用户组,用户组的存在方便了对用户的管理,比如对一个文件,我给某个用户组相应权限,其他用户没有权限,那么这个用户组就可以方便的对文件进行相应操作。注意,root是超级用户,它不属于任何一个组,且具有最高权限。

(1)whoami我是谁

查看当前用户

image

(2)chmod修改用户权限

① 直接增删权限

chmod [u/g/o/a] [+/-] [r/w/x]

u:用户,修改当前用户的权限

g:组,修改当前用户组的权限

o:其他用户,修改其他用户的权限

a:所有用户,修改所有用户权限

+:增加权限

-:去除权限

r:读权限

w:写权限

x:执行权限

通过上面的组合来达到修改权限的目的。举例:

image

比如上面的1111.txt文件,我们要去除它的用户写权限,应该使用的命令组合是

image

然后我们要给所有用户增加写权限,应使用

image

② 使用8进制数字权限修改文件权限

比如,我们给1111.txt当前用户和用户组只有写权限,无读权限,无可执行权限,其他用户没有任何权限,那么这个权限的8进制数字表示为 0220,可以使用命令

image

可以看到,1111.txt原先的 rw-rw-rw- 变成了 -w–w----。

第一种方法适用于对一个用户(或用户组)增减删除某个权限,如果需要要修改的权限位比较多的话,使用8进制数字修改更为方便。

(3)chown修改文件归属用户

需要管理员权限

该命令是让1111.txt归属于qq用户组的qq1用户。

(4)chgrp修改文件所属组

需要管理员权限

该命令是让1111.txt归属于qq2用户组。

5. 软链接和硬链接

首先介绍以下什么是软链接,什么是硬链接。

① 硬链接

硬链接是指通过索引节点来进行链接。在Linux文件系统中,存放在磁盘中的文件都会有一个索引节点号(inode index),硬链接就是多个文件名对应同一个索引节点,硬链接就是指向一个磁盘文件的有效路径名,硬链接文件和源文件是同一个文件。

② 软链接

软链接也叫符号链接,它是一个文件,文件中保存了指向文件的位置信息。

image

通过 ll 命令查看源文件,软链接和硬链接如上图所示,可以看到硬链接和源文件大小一致,而软链接不同,并且在软链接后面还有个箭头标志 -> 指向了源文件。并且可以看到硬链接和源文件的链接数都是2,而软链接的链接数是1。

实际上,对于软硬连接的本质可以这么理解:

软链接其实是新建立了一个文件,会新建一个inode节点,这个文件保存了源文件的位置,也就是指向了源文件,你可以把它理解为Windows下面的快捷方式,或者理解为C语言中的指针,如果删除软链接,源文件不会受到任何影响,因为软链接和硬链接是两个不同的文件,但是如果删除源文件,虽然软链接不会受影响,但是他就失去了意义,可以对比C语言指针去理解。

硬链接不会建立新的inode节点,和它源文件是同一个文件,只是将链接计数加1,所以硬链接不可以跨文件系统,可以把硬链接理解为C++中的引用,如果我们修改了源文件,那么硬链接的内容也会相应修改,软链接就是源文件的别名而已。当我们删除硬链接的时候,链接计数就会减一,当链接计数为0的时候,源文件就被删除了,对于硬链接就按照C++引用去理解。

我们可以通过 ls -i 选项来查看文件i节点来验证

image

硬链接和源文件具有相同的i节点,说明他俩是同一个文件,硬链接不会建立新的i节点,只是将链接数加1,而软链接有自己的i节点,说明软链接是一个单独的文件,和源文件不是一回事。那么硬链接和copy有什么关系呢,copy得到的是一个单独的文件,修改它对源文件无任何影响,所以硬链接和copy无任何关系,硬链接是指,两个连接引用同一块磁盘空间(拷贝是拷贝了一块内存空间,总共两个不同的空间)。

(1)ln建立软硬连接

建立软链接的时候要加一个 -s 选项

image

(2)unlink删除链接

unlink可以删除软链接或硬链接,unlink每次删除一个硬链接,文件的链接计数就会减1,当链接计数为0时,文件被删除(所有链接被删除,磁盘空间就无法找到了)。

image

如果使用 rm 删除源文件,那么软链接失效,硬链接计数减1。

image

可以看到硬链接计数减一,软链接变成红色失效了。

四、查看空间占用相关命令

(1)wc统计

选项:

-w :统计单词数

-l :统计行数

-c :统计字节数

image

查看2.txt的单词数、行数、字节数分别为2、2、6。

(2)du查看占用空间大小

① 查看当前目录占用空间情况

image

② 查看某一个目录占用空间情况

image

③ -h选项,按照适合程序员观看的方式显示(显示单位K)

image

④ 多级子目录只显示一级

–max-depth=1 选项,指定子目录递归最大深度

image

(3)df查看磁盘使用情况

显示磁盘使用情况,以及按照GB单位显示

image

更多选项可以通过man获取。

Linux tar命令一个有用的参数--strip-component
在解压文件的时候,如果压缩包中的文件存在多级目录。解压出来的时候如果你不想要这些多级目录,你就可以使用–strip-component参数来实现。
Linux 日志查看命令journalctl
Journald是Linux系统中新的系统日志方式,它把日志信息写入二进制文件,它终结了文本日志。查看所有系统日志,只用一个命令即可,这个命令就是journalctl。Journald守护进程:systemd-journald,其中systemd日志服务就由此守护程序处理。
Linux mktemp命令
mktemp会在本地目录中创建一个文件。要用mktemp命令在本地目录中创建一个临时文件,你只要指定一个文件名模板就行了。模板可以包含任意文本文件名,在文件名末尾加上N个X就行了。
深度剖析 Linux cp 命令的秘密
用 cp 拷贝了一个 100 GiB 的文件,竟然一秒不到就拷贝完成了。一个 SATA 机械盘的写能力能到 150 MiB/s (大部分的机械盘都是到不了这个值的)就算非常不错了,所以,正常情况下,copy 一个 100G 的文件至少要 682 秒 ( 100 GiB/ 150 MiB/s ),也就是 11 分钟。
Linux系统-gzip命令 – 压缩和解压文件
gzip命令来自于英文单词gunzip的缩写,其功能是用于压缩和解压文件。gzip是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz后缀结尾,与tar命令合用后即为.tar.gz后缀。