Linux文件与目录管理
一、目录与路径
1.相对路径与绝对路径
绝地路径:一定是由根目录/
开始写起。例如/usr/share/doc
这个目录
相对路径:相对于目前工作目录的路径。举个例子,有两个目录:/usr/tmp
与/usr/share
,由tmp
目录到share
目录下,可以使用相对路径:
cd ../share
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cny1zj6H-1585898389726)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585570419028.png)]
当写shell脚本时
,务必使用绝对路径
2.目录相关的操作
首先来了解一下特殊的目录
. 代表本层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表当前使用者身份的家目录
~account 代表account这个使用者的家目录
需要特别注意的是,所有目录下面都会存在两个目录,分别是.
与..
,代表此层与上层目录的意思。根目录/
的上层目录与本层目录与自己均是同一个目录。
下面来了学习一下常用的处理目录的命令
cd: 切换目录
pwd: 显示当前目录
mkdir:建立一个新目录
rmdir:删除一个空目录
cd
是Change directory
的缩写,是用来切换工作目录的命令,当登陆Linux系统之后,每个账号都会在自己的家目录中,下面用cd
命令做个示范
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WhUwsfmc-1585898389728)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585571735905.png)]
pwd
是Print Working Dorectory
的缩写,是用来显示目录所在的命令。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnvDUYhB-1585898389738)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585572291901.png)]
mkdir
是make directory
的缩写
rmdir
删除空目录
示例:
rm -r test #test为要删除的目录
3. 关于执行文件路径的变量:$PATH
为什么在系统的任何地方都执行/bin/ls
这个命令,这是因为环境变量PATH
的帮助所致。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGZBCXEG-1585898389739)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585574517668.png)]
关于环境变量path
的几点说明:
- 不同身份的用户默认的PATH不同,默认能够随意执行的命令也不用(如
root
与kfk
) PATH
可以修改- 本目录(.)不要放在PATH当中
二、文件与目录管理
前面介绍完了目录与路径,下面来探讨一下关于文件的一些基本管理。
1.文件与目录查看:ls
ls [-aAdfFhilnrRst] 文件或目录名称 #每个字母代表一个相应的权限,可以使用时进行查询
#说几个比较常用的显示命令吧
ls -a #显示全部文件,连同隐藏文件一起显示
ls -al #显示全部文件,连同隐藏文件与属性一起显示
ls -l #详细信息显示,包含文件的属性与权限
ls -d #仅列出目录本身,而不是列出目录内的文件数据
#其他的命令
ls [--color={never,auto,always}] 文件名或目录名称,颜色显示选项
ls [--full-time] 文件名或目录名称 以完整时间模式输出
2.复制、删除与移动:cp、rm、mv
cp
除了单纯的复制功能,还可以建立连接文件(也就是快捷方式)、比对两文件的新旧予以更新以及复制整个目录的功能。
mv
可以移动文件,也可以重命名(rename)
rm
当然就是删除文件啦
下面对这三个命令进行介绍
2.1cp
(复制文件或目录)
cp [-adfilprsu] 源文件(source) 目标文件(destination)
几个常用的命令:
cp -a 源文件(source) 目标文件(destination)#将文件的所有特性都一起复制过来
cp -i 源文件(source) 目标文件(destination)#当目标文件已经存在时, 则覆盖时先询问
cp -p 源文件(source) 目标文件(destination)#连通文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
cp -r 源文件(source) 目标文件(destination)#递归复制
cp [options] source1 source2 source3 ... directory #如果源文件有两个以上,最后一个目标文件一定是“目录”才可以
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ibN89eC2-1585898389744)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585577316757.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vn0LV7bm-1585898389747)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585578001807.png)]
注意,在默认的条件中,cp 的源文件与目标文件的权限是不同的,目标文件的拥有者通常是命令操作者本身。由于这个特性,在进行备份类似于密码文件时,必须要加上-a
或者-p
等才可以。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mdfl34l-1585898389750)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585701360931.png)]
根据前面复制的.bashrc
文件建立一个符号链接文件(link file)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtexjB3Z-1585898389751)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585706977049.png)]
简单来说,bashrc_sink
是一个快捷方式,这个快捷方式会连接到bashrc,所以会有一个指向->
符号。
至于bashrc_hlink
文件与bashrc
的属性权限完全一模一样,与符号链接文件bashrc_slink
的区别就在于link
数由一个变为了两个。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IfbIFDJL-1585898389753)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585709745400.png)]
cp
具有种种文件属性与权限的特性,所以关于使用复制命令cp
时,需要明确一下几点:
- 是否需要完整地保留源文件的信息
- 源文件是否为符号链接文件
- 源文件是否为目录
- 源文件是否为特殊的文件,例如FIFO,socket
2.2rm
(删除文件或目录)
rm [-fir] 文件或目录
#选项与参数
-f:`force`,强制删除,忽略不存在的文件
-I:交互模式,在删除前会询问使用者是否操作
-r:递归删除,常用于删除`目录`,此操作很危险
在此不做示例操作了
2.3mv
[移动文件与目录。或重命名]
mv [-fiu] source destination
mv [options] source1 source1 source2 ... directory
#选项与参数
-f:force强制的意思,若目标文件已存在,不会询问直接覆盖
-i:若目标文件(destination)已经存在,就会进行询问
-u:若目标文件已经存在。且source比较新,才会更新(update)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHaTHqEo-1585898389756)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585739818293.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lwo7aFOo-1585898389760)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585740037449.png)]
- 注意如果有多个源文件或目录,则最后一个目标文件一定是目录
3.获取路径的文件名与目录名称
#获取文件名
basename /etc/sysconfig/network
--->network
#获取目录名
dirname /etc/sysconfig/network
--->/etc/sysconfig
三、文件内容查看
最常见的查看文件内容的命令是:cat
,more
,less
,tail
,tac
。下面说一下,各个命令的用途。
1.直接查看文件内容
cat
由第一行开始显示文件内容cat [-AbEnTv] #选项与参数 -b :列出行号,仅针对非空白行号显示,空白行不标行号; -E :将结尾的换行符$显示出来 -n :打印出行号,连同空白行也会显示行号 -T :将[tab]按键以`^T`显示出来 -v :列出一些看不见的特殊字符 -A :相当于`-vET`的整合选项
- tac 从最后一行开始显示,能够看出tac是cat的倒写
- nl 显示的时候,同时输出行号
nl
可以将输出的文件内容自动地加上行号,具有位数与自动补齐0等功能
2.翻页查看
-
more 一页一页的显示文件内容
在
more
这个程序的运行过程中,有以下几个按键可以使用:- 1.空格键:代表向下翻一页
- 2.Enter:代表向下翻一行
- 3./字符串:代表在这个显示的内容当中,向下查找字符串这个关键词
- 4.:f 立即显示出文件名以及目前显示的行数
- 5.q 代表理科离开
more
,不再显示该文件内容 - 6.b 代表往回翻页,这操作只对文件有用,对管道
pipline?
无用
-
less 与more类似,但是它可以向前翻页
less
里面拥有更多的查找功能,不止可以向下查找,也可以向上查找,可以输入的命令有:- 1.空格键 :向下翻动一页
- 2.[pagedown]:向下翻动一页
- 3.[pageup]:向上翻动一页
- 4./字符串:向下查找字符串的功能
- 5.?/字符串:向上查找字符串的功能
- 6.n:重复前一个查找(与/或?有关)
- 7.N:反向的重复前一个查找
- 8.g:前进到这个数据的第一行
- 9.G:前进到这个数据的最后一行去
- 10.q:离开
less
程序
3.数据截取
-
head 只看前面几行
head [-n number] 文件 -n表示显示几行 若将某个文件的后100行都不打印出来,则有 head -n -100 filename
-
tail 只看后面几行
tail [-n number]文件
-n 表示显示几行
-f 表示持续刷新
4.非纯文本文件:od
od
以二进制的方式读取文件内容
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
5.修改文件时间或创建新文件:touch
Linux系统中的三种时间
-
修改时间[modification time,mtime]
当文件的[内容数据]变更时,这个时间便会更新,内容指的是文件的内容,不要误以为是文件的权限。 -
状态时间[status time,ctime]
当文件的[状态status]改变时,就会更新这个时间,举例来说,是权限与属性被更改了,都会更新这个时间。 -
读取时间[access time,atime]
当[该文件的内容被读取时],就会更新这个读取时间(access)。 -
默认情况下,ls显示出的是该文件的mtime
touch
不仅可以建立一个空白文件也可以将文件日期定义为目前()mtime
与atime
)touch [-acdmt] 文件 -a :仅自定义access time; -c :仅修改文件的时间,若文件不存在则不建立新文件 -d :后面可以接自定义的日期而不用目前的日期,也可以使用`--date="日期或时间"` -m :仅修改mtime -t :后面可以接自定义的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
四、文件与目录的默认权限与隐藏权限
1.文件默认权限:umask
当新建一个文件时,它的默认权限是什么?
这就与umask
有关了,它用来指定用户在建立文件或目录时候的权限默认值。
它的指定条件以下面的方式来指定:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ycAh4rrg-1585898389767)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585748151172.png)]
在默认权限的属性上,目录与文件是不一样的。x
权限对于目录而言是非常重要的,而一般文件的建立则不应该具有执行的权限,因此默认的情况如下:
-
若为用户建立的文件,则默认不应该具有可执行的权限,即只有
rw
这两个项目,也就是最大为666
,默认权限如下:-rw-rw-rw-
-
若为用户建立的目录,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即
777
,默认权限如下:drwxrwxrwx
umask
的数字指的是该默认值需要减掉的权限,因为rwx
分别是4,2,1,所以拿掉写入的权限w
,就是输入2
,依次类推
上图中的umask
默认为0022
,也就是说 ,user并没有被拿掉任何权限,group与others的权限被拿掉了写入的权限2
,所以,当用户
- 建立目录时,默认:[drwxr-xr-x],
755
- 建立文件时,默认:[-rw-r–r--],
644
2.文件隐藏属性
chattr
(配置文件隐藏属性)
chattr [+-=][ASacdistu] 文件或目录名称
#选项与参数
a :当设置`a`之后,这个文件只能增加数据,而不能删除也不能修改数据,只有root才能设置此属性
i :它可以让一个文件【不能被删除、改名、设置连接也无法写入或新增数据】
lsattr
(显示文件隐藏属性)
lsattr [-adR] 文件或目录
#选项与参数:
-a :将隐藏文件的属性也显示出来
-d :
3. 文件特殊权限:SUID
、SGID
、SBIT
文件的权限不只有r
,w
,x
,而且还有特殊权限(s
与t
)。下面来让我们看一下,特殊权限是什么意思?有什么作用呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yZctpbm5-1585898389767)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585824632146.png)]
五、命令与文件的查找
下面会介绍一些查找命令。分别是脚本文件查找,还有就是文件的查找。
1.查找脚本文件
- which(查找[执行文件])
which [-a] command
#选项或参数:
-a :将所有`PATH`目录中可以找到的命令均列出来,而不止第一个被找到的命令名称
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2Vxy1Ou-1585898389772)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585825871033.png)]
2.查找文件
下面来介绍两个查找文件的命令:whereis
与locate
whereis
(由一些特定的目录中查找文件)
whereis [-bmsu]
#选项与参数
-l :可以列出`whereis`会查询的几个主要目录
-b :只查找二进制格式的文件
-m :只找在说明文件`manual`路径下的文件
-s :只查找soucre源文件
-u :只查找不在上述三个项目中的其他持续文件
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTZHtHnk-1585898389773)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585826579733.png)]
whereis
只是查询/bin/sbin以及/usr/share/man下面的man page
文件,相较于全局搜索的find
命令,是比较快的
- locate/updatedb
locate
是依据/var/lib/mlocate
内的数据库记录,找出用户输入关键词的文件名,此数据库默认是每天执行一次。
locate [-ir] keyword
#选项与参数:
-i :忽略大小写的差异
-c :不输出文件名,仅计算找到的文件数量
-l :输出几行的意思
-S :输出`locate`所使用的数据库文件的相关信息,包括数据库记录的文件/目录数量等。
-r :后面接正则表达式
updatedb
,根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件
find
find
命令比较多,分为以下三部分
find [PATH] [options] [action]
#选项与参数:
#1.与时间有关的选项:-atime、-ctime与-mtime
-mtime n:n为数字,意义为在n天之前[`一天之内`]被修改过内容的文件
-mtime +n:列出在n天之前(`不含n天本身`)被修改过内容的文件
-mtime -n:列出在n填之内(`含n填本身`)被修改过内容的文件
-newer file:file为一个存在的文件,列出比file还要新的文件
find / -mtime 0 #将系统24小时之内有修改过内容(mtime)的文件列出
find / -mtime 3 #有变动过的文件都被显示
find /etc newer /etc/password # 寻找/etc 下面的文件,如果文件日期比/etc/password新就列出来
#2.与使用者或者用户组名称有关的参数
-uid n :n为数字,这个数字是使用者的账号ID,即UID,这个UID是记录在/etc/passwd里面
-gid name:n为数字,这个数字是用户组名称的ID,即GID,这个GID记录在`/etc/group`中
-user name:name为使用者账号的名称,例如`kfk`
-group name:name为用户组名称,例如`users`
-nouser:查找文件的拥有者不在`/etc/passed`中
-nogroup:查找的文件的拥有者不在`/etc/group`中
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiViBhgl-1585898389774)(C:\Users\lee\AppData\Roaming\Typora\typora-user-images\1585891444050.png)]
#3.与文件权限及名称有关的参数
-name filename:查找文件名称为`filename`的文件
-size [+-]SIZE:查找比SIZE还要大(+)或(-)的文件,这个SIZE的规格有:
c代表Bytes,k代表1024Bytes
-type TYPE:查找文件类型为TYPE的,类型主要有:一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),及FIFO(p)等属性
-perm mode:查找文件权限【刚好等于】`mode`的文件,`mode为类似chmod的属性值`
-pern -mode:查找文件权限【必须要全部囊括mode的权限】
find / -name passwd
find / -name "*passwd*"
find /run -type s
find / -perm /7000 #7000为---s--s--t
#4.额外可进行的操作:
-exec command :command为其他命令,-exec后面可再接额外的命令来处理查找到的结果
注意:在find在查找数据的时候相当消耗硬盘资源
六、重点回顾
- Linux系统中的特殊目录:
.
,..
,-
,~
,~account需要注意 - 与目录相关的指令有:
cd
、mkdir
、rmdir
、pwd
等重要命令 rmdir
仅能删除空白目录,删除费控目录需要rm -r
命令- ls可以查看文件的属性,尤其
ls -d
、ls -a
、ls -l
等选项很重要 cp
文件的复制,rm
文件的移动,mv
文件的移动- 检查文件的内容可使用的命令包括:
cat
、tac
、nl
,more
,less
,head
,tail
,od
等 touch
可以修改文件的时间参数,但可以用来建立空文件- 文件的记录时间参数由三种,分别是读取时间(access time,atime)、状态时间(status time,ctime)、修改时间(modification time,time)、ls 默认显示的是
mtime
. - 除了传统的
rwx
权限之外,在ext2
、ext3
、ext4
、xfs
文件系统中,可以使用chattr
与lsattr
设置及观察隐藏属性。常见的有只能新增数据的+a
与不能完全修改文件的+i
属性。 - 新建文件/目录时,默认权限使用的是
umask
规范 - 文件具有
SUID
的特殊权限时,代表用户执行此二进制程序时,在执行过程中用户会暂时具有程序拥有者的权限; - 目录具有
SGID
的特殊权限时,代表用户在这个目录下面新建的文件用户组都会与该目录的组名相同 - 目录具有
SBIT
的特殊权限时,代表在该目录下用户建立的文件只有自己与root
能够删除 - 观察文件的类型可以使用
file
命令来观察 find
查询文件系统
modification time,time)、ls 默认显示的是mtime
.- 除了传统的
rwx
权限之外,在ext2
、ext3
、ext4
、xfs
文件系统中,可以使用chattr
与lsattr
设置及观察隐藏属性。常见的有只能新增数据的+a
与不能完全修改文件的+i
属性。 - 新建文件/目录时,默认权限使用的是
umask
规范 - 文件具有
SUID
的特殊权限时,代表用户执行此二进制程序时,在执行过程中用户会暂时具有程序拥有者的权限; - 目录具有
SGID
的特殊权限时,代表用户在这个目录下面新建的文件用户组都会与该目录的组名相同 - 目录具有
SBIT
的特殊权限时,代表在该目录下用户建立的文件只有自己与root
能够删除 - 观察文件的类型可以使用
file
命令来观察 find
查询文件系统- 查找文件的完整文件名可以使用
whereis
找特定目录或locate
到数据库查找,而不是实际查找文件系统