三、文件相关命令
1. 文件操作命令
(1)touch创建文件
touch+不存在的文件名,创建一个文件。
如果touch后面是一个已经存在的文件,那么将会更改文件的最后访问时间。
(2)rm删除文件
Linux下一切皆文件!
删除目录的时候一般要加上 -r 选项,表示递归删除子目录(因为Linux中的目录是树状的)
-f选项表示强制删除
rm -rf *
这条命令表示强制删除当前目录的所有内容( * 适配任意个字符)。
删除多个文件,直接在rm命令后写上多个文件的文件名即可
rm -f 1.c 2.c 3.c
更多的选项可以通过 man rm 查看。
(3)cp拷贝命令
cp命令的使用要分为几种情况:
- 目标文件存在和目标文件不存在;
- 目标文件是文件还是目录;
① 首先目标文件不存在的情况,会直接把源文件拷贝一份并命名为目标文件名;
② 目标文件已存在,源文件会覆盖目标文件,并重命名为目标文件名;
③ 目标文件是目录,会把源文件拷贝到目标目录中,如果源文件目录有子目录,需要加 -r选项递归拷贝子目录。
(4)mv文件移动
和cp命令一样,也要考虑情况:
① 目标文件不存在,相当于给源文件重命名,和cp的区别是,cp之后源文件依然存在,但是mv之后源文件就没了。
② 目标文件存在,将覆盖目标文件,并且源文件消失(区别于cp命令)
③ 目标文件为路径,会将源文件移动到目标路径下面。
2. 文件内容相关
(1)cat查看内容
查看文件的内容,加 -n 选项可以显示行号。
(2)more按屏查看内容
more可以只显示一屏的文件内容,并且在屏幕下方会显示百分比,按enter将一行一行的滚动翻页,按空格可以一屏一屏的滚动翻页,当显示到100%会自动结束,more不能向上翻页。
(3)less按屏查看
less比more功能更多一些,less可以使用上下键翻页,每次滚动一行,enter按行向下滚动,空格按屏向下滚动,上键按行向上滚动(more不可以上翻),并且less显示到末尾不会自动退出,按q键手动退出。
(4)head查看文件头部
如果不加选项参数,默认显示文件的前十行,通过 -n选项可以指定显示行数
(5)tail查看文件尾部
如果不加选项参数,默认显示文件的后十行,通过 -n选项可以指定显示行数
tail通常的用法是通过 -f 选项一直显示文件尾,通过该选项可以不停的显示文件尾部信息,如果文件尾部信息发生变化,那么tail会立马显示出来,通过 tail -f 可以用于追踪日志变化,比如在通信中,我们通过日志打印连接情况,这样就可以在终端不停的显示最新的连接情况。通过SecureCRT克隆会话功能,可以实现一个会话用于通信中的各种操作,另一个会话通过 tail -f 追踪日志变化。
3. 文件权限与用户属性
当我们使用 ls -l 查看详细信息的时候,会看到文件的详细信息,每部分的含义请看下图
说明:目录都是具有可执行权限的,如果把目录权限修改为不可执行,那么目录将无法进入;目录大小一般都是4096字节,也就是4kb。
- 文件类型介绍:
文件类型 | 含义 |
d | 目录文件 |
- | 普通文件 |
l | 软连接(符号链接) |
b | 块设备 |
p | pipe管道设备 |
s | 本地套接字 |
c | 字符设备 |
- 文件权限介绍
权限 | 含义 |
r | 读权限 |
w | 写权限 |
x | 执行权限 |
权限位是按照 读权限-写权限-执行权限 顺序排列的,第一位表示读权限,有则写 r,无则为 - ;第二位是写权限,有则写 w ,无则为 - ;第三位是执行权限,有则写 x ;无则为 - 。对应的权限位数字表示法为,有权限为1,无权限为0。下面举例说明:
(1)umask查看8进制文件掩码
umask可以查看文件权限的掩码,那么什么是权限掩码呢?这应该分文件和目录两种情况来考虑,因为二者的默认权限是不同的。
① 目录
以上面看到的aa目录为例,它的权限为 rwxr-xr-x 用数字表示是0755,那么用umask查看它的8进制权限掩码为0022
目录默认的满权限为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,管理员用户
$:普通用户
我的前面是一个 # 说明我当前用的是root超级用户。
我们通常会有用户和用户组,用户组的存在方便了对用户的管理,比如对一个文件,我给某个用户组相应权限,其他用户没有权限,那么这个用户组就可以方便的对文件进行相应操作。注意,root是超级用户,它不属于任何一个组,且具有最高权限。
(1)whoami我是谁
查看当前用户
(2)chmod修改用户权限
① 直接增删权限
chmod [u/g/o/a] [+/-] [r/w/x]
u:用户,修改当前用户的权限
g:组,修改当前用户组的权限
o:其他用户,修改其他用户的权限
a:所有用户,修改所有用户权限
+:增加权限
-:去除权限
r:读权限
w:写权限
x:执行权限
通过上面的组合来达到修改权限的目的。举例:
比如上面的1111.txt文件,我们要去除它的用户写权限,应该使用的命令组合是
chmod u-w 1111.txt
然后我们要给所有用户增加写权限,应使用
chmod a+w 1111.txt
② 使用8进制数字权限修改文件权限
比如,我们给1111.txt当前用户和用户组只有写权限,无读权限,无可执行权限,其他用户没有任何权限,那么这个权限的8进制数字表示为 0220,可以使用命令
chmod 0220 1111.txt
可以看到,1111.txt原先的 rw-rw-rw- 变成了 -w–w----。
第一种方法适用于对一个用户(或用户组)增减删除某个权限,如果需要要修改的权限位比较多的话,使用8进制数字修改更为方便。
(3)chown修改文件归属用户
需要管理员权限
sudo chown qq:qq1 1111.txt
该命令是让1111.txt归属于qq用户组的qq1用户。
(4)chgrp修改文件所属组
需要管理员权限
sudo chgrp qq2 1111.txt
该命令是让1111.txt归属于qq2用户组。
5. 软链接和硬链接
首先介绍以下什么是软链接,什么是硬链接。
① 硬链接
硬链接是指通过索引节点来进行链接。在Linux文件系统中,存放在磁盘中的文件都会有一个索引节点号(inode index),硬链接就是多个文件名对应同一个索引节点,硬链接就是指向一个磁盘文件的有效路径名,硬链接文件和源文件是同一个文件。
② 软链接
软链接也叫符号链接,它是一个文件,文件中保存了指向文件的位置信息。
通过 ll 命令查看源文件,软链接和硬链接如上图所示,可以看到硬链接和源文件大小一致,而软链接不同,并且在软链接后面还有个箭头标志 -> 指向了源文件。并且可以看到硬链接和源文件的链接数都是2,而软链接的链接数是1。
实际上,对于软硬连接的本质可以这么理解:
软链接其实是新建立了一个文件,会新建一个inode节点,这个文件保存了源文件的位置,也就是指向了源文件,你可以把它理解为Windows下面的快捷方式,或者理解为C语言中的指针,如果删除软链接,源文件不会受到任何影响,因为软链接和硬链接是两个不同的文件,但是如果删除源文件,虽然软链接不会受影响,但是他就失去了意义,可以对比C语言指针去理解。
硬链接不会建立新的inode节点,和它源文件是同一个文件,只是将链接计数加1,所以硬链接不可以跨文件系统,可以把硬链接理解为C++中的引用,如果我们修改了源文件,那么硬链接的内容也会相应修改,软链接就是源文件的别名而已。当我们删除硬链接的时候,链接计数就会减一,当链接计数为0的时候,源文件就被删除了,对于硬链接就按照C++引用去理解。
我们可以通过 ls -i 选项来查看文件i节点来验证
硬链接和源文件具有相同的i节点,说明他俩是同一个文件,硬链接不会建立新的i节点,只是将链接数加1,而软链接有自己的i节点,说明软链接是一个单独的文件,和源文件不是一回事。那么硬链接和copy有什么关系呢,copy得到的是一个单独的文件,修改它对源文件无任何影响,所以硬链接和copy无任何关系,硬链接是指,两个连接引用同一块磁盘空间(拷贝是拷贝了一块内存空间,总共两个不同的空间)。
(1)ln建立软硬连接
建立软链接的时候要加一个 -s 选项
(2)unlink删除链接
unlink可以删除软链接或硬链接,unlink每次删除一个硬链接,文件的链接计数就会减1,当链接计数为0时,文件被删除(所有链接被删除,磁盘空间就无法找到了)。
如果使用 rm 删除源文件,那么软链接失效,硬链接计数减1。
可以看到硬链接计数减一,软链接变成红色失效了。
四、查看空间占用相关命令
(1)wc统计
选项:
-w :统计单词数
-l :统计行数
-c :统计字节数
查看2.txt的单词数、行数、字节数分别为2、2、6。
(2)du查看占用空间大小
① 查看当前目录占用空间情况
② 查看某一个目录占用空间情况
③ -h选项,按照适合程序员观看的方式显示(显示单位K)
④ 多级子目录只显示一级
–max-depth=1 选项,指定子目录递归最大深度
(3)df查看磁盘使用情况
显示磁盘使用情况,以及按照GB单位显示
更多选项可以通过man获取。