Linux文件与目录管理

本文主要介绍了如何操作管理文件及目录,包括了在不同目录间切换、建立与删除目录、建立与删除文件,还有寻找文件、查看文件内容等。

目录与路径

目录的相关操作

特殊的目录

1
2
3
4
5
.		表示此层目录
.. 表示上一层目录
- 表示前一个工作目录
~ 表示【目前用户身份】所在的家目录
~acount 表示accoun这个用户的家目录(account是个账号名称)

在所有目录底下都会存在的两个目录,分别时【.】与【..】。

常见的处理目录指令

  • cd:变换目录

  • pwd [-p]:显示当前目录

    -p:显示出真正的路径,而非使用链接(link)路径

  • mkdir [-mp] 目录名称:创建一个新目录

    -m:设置文件的权限,直接设置

    -p:递归创建

  • rmdir [-p] 目录名称:删除一个空目录

    -p:连同上层“空的”目录名称

关于执行文件路径的变量:$PATH

  • 当执行一个命令的时候,例如ls,系统会依照PATH的设置去每个PATH定义的目录下查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先找查找到的同名命令先被执行;
  • PATH(一定是大写),这个变量的内容是由一推目录所组成,每个目录中间用冒号【:】来隔开;
  • 为安全起见,不建议将【.】加入PATH的查找目录中

文件与目录管理

文件与目录的查看:ls

1
2
3
ls [-aAdfFhilnrRSt] 文件名或目录名称..
ls [--color={never,auto,always}] 文件名或目录名称..
ls [--full-time] 文件名或目录名称..

常用参数:

  • -a:全部的文件,连同隐藏的文件(开头为.的文件)一起列出来
  • -d:仅列出目录本身,而不是列出目录内的文件数据
  • -l:详细信息显示,包含文件的属性与权限等数据

复制、删除与移动:cp、rm、mv

cp:复制

1
2
cp [-adfilprsu] 源文件 目标文件
cp [options] source1 source2 source3 ... directory

常用参数:

  • -a:相当于-dr –preserve=all的意思
  • -d:若源文件为链接文件的属性,则复制链接文件属性而非文件本身
  • -f:强制,若目标文件已经存在且无法开启,则移除后再尝试一次
  • -i:若目标文件已经存在时,在覆盖时会先询问动作的进行
  • -p:连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(多用于备份)
  • -r:递归复制
  • –preserve=all:除了-p的权限参数外,还加入SELinux的属性,links、xattr等也复制了

rm:移除文件或目录

1
rm [-fir] 文件或目录

常用参数:

  • -f:忽略不存在的文件,不会出现警告信息
  • -i:交互模式,删除前会询问是否操作
  • -r:递归删除

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

1
2
mv [-fiu] source destination
mv [options] source1 source2 source3 ... directory

常用参数:

  • -f:如果目标文件已经存在,不会询问而直接覆盖
  • -i:若目标文件已存在,会询问是否覆盖
  • -u:若目标文件已经存在,且source比较新,才会更新

文件内容查看

直接查看文件内容

cat:concatenate

1
cat [-AbEnTv] 文件名

参数:

  • -A:相当于-vET,可列出一些特殊符号而不是空白符
  • -b:列出行号,仅针对非空白行
  • -E:显示结尾的换行符$
  • -n:打印出行号,空白行也有
  • -T:将【tab】按键以【^I】显示出来
  • -v:列出一些看不出来的特殊符号

tac:反向列示

与cat命令功能相反,由最后一行到第一行方向在屏幕上显示

nl:添加行号打印

1
nl [-bnw] 文件

参数:

  • -b:指定行号指定的方式,两种:-b a空行也显示行号,-b t空行不显示行号
  • -n:列出行号的表示方式,三种:-n ln行号屏幕左边显示;-n rn行号屏幕右边显示,不加0;-n rz行号右边显示,加0

可翻页查看

more:一页一页翻动

1
more 文件名

按键操作:

less:一页一页反动

1
less 文件名

按键操作:

数据截取

head:取出前面几行

1
head [-n number] 文件

tail:取出后面几行

1
tail [-n number] 文件

参数:

  • -f:表示持续刷新显示后面所接文件中的内容

非纯文本文件:od

1
od [-t TYPE] 文件

参数:

  • -t:后面接各种【类型】的输出;如TYPE:【a】默认、【c】使用ASCII字符输出、【d[size]】十进制、【f[size]】浮点数、【o[size]】八进制、【x[size]】十六进制

修改文件时间或创建新文件:touch

linux中每个文件下面都会记录许多的时间参数,其中有三个主要的变动时间:

修改时间(modification time,mtime)

当该文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限;

状态时间(status time,ctime)

当该文件的【状态】改变时,就会更新这个时间,如:权限与属性被更改了,都会更新这个时间

读取时间(access time,atime)

当【该文件的内容被读取】时,就会更新这个读取时间,如:使用cat去读取了某个文件,则该文件的atime就会更新

1
2
3
4
5
[root@yun19 ~]# date; ls -l /etc/man_db.conf ; ls -l --time=atime /etc/man_db.conf; ls -l --time=ctime /etc/man_db.conf
Thu Jan 2 09:05:47 CST 2020
-rw-r--r--. 1 root root 5171 Jun 10 2014 /etc/man_db.conf
-rw-r--r--. 1 root root 5171 Jan 2 03:44 /etc/man_db.conf
-rw-r--r--. 1 root root 5171 Apr 21 2017 /etc/man_db.conf
1
touch [-acdmt] 文件

参数:

  • -a:仅自定义access time
  • -c:仅修改文件的时间,若该文件不存在则不创建新文件
  • -d:后面可以接欲自定义的日期而不用目前的时间,也可以使用“–date=”日期或时间
  • -m:仅修改mtime
  • -t:后面可以接欲自定义的时间而不用目前的时间,格式为【YYYYMMDDhhmm】

touch命令最常使用得情况:

  • 建立一个空文件
  • 将某个文件日期自定义为目前(mtime与atime)

文件与目录的默认权限与隐藏权限

文件预设权限:umask

·umask:指目前用户在建立文件或目录时候的权限默认值。

1
2
$ umask		## 显示数字形态的权限设定分数
$ umask -S ## 显示以符号类型的方式来显示出权限

umask的分数表示的是默认值需要减掉的权限

  • 建立文件时:(-rw-rw-rw)-(—–w–w-)==> -rw-r–r–
  • 建立目录时:(drwxrwxrwx)-(d—-w–w-)==> drwxr-xr-x

如何修改预设权限

1
$ umask 权限数字  ## 如: umask 002

文件隐藏属性

chattr指令只能在Ext2/Ext3/Ext4的Linux传统文件系统上面完整生效

chattr(配置文件隐藏属性)

1
chattr [+-=][ASacdisu] 文件或目录名称

选项与参数:

  • +:增加某一个特殊参数,其它原本存在参数不动
  • -:移除某一个特殊参数,其它原本存在参数不动
  • =:直接设置参数,且仅有后面接的参数
  • A:当设定A这个属性时,若你在存取文件(或目录)时,他的访问时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘。
  • S:一般文件是异步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该修改会【同步】写入磁盘。
  • a:当设定a之后,这个文件将只能增加数据,而不能删除和修改数据,root可以设定此属性
  • c:设定该属性,将会自动的将此文件【压缩】,在读的时候将会自动解压缩;存储时先压缩在存储
  • d:当dump程序被执行的时候,设定d属性将可使该文件(或目录)不会被dump备份
  • i:使文件不能被删除、改名、设置链接和无法写入或新增数据
  • s:文件被删除,则会被完全从硬盘删除,无法恢复
  • u:与s相反,文件被删除,数据内容仍然存在磁盘中

注意:

  1. 属性设置常见的是ai的设置值,而且很多设置值必须要是root才能设置;
  2. xfs文件系统仅支持AadiS而已

lsattr(显示文件隐藏属性)

1
lsattr [-adR] 文件或目录

选项与参数:

  • -a:将隐藏文件的属性显示出来
  • -d:如果是目录,仅列出目录本身的属性而非目录内的文件名
  • -R:连同子目录的数据也一并列出来

文件特殊权限:SUID,SGID,SBIT

Set UID

s这个标志出现在文件拥有者的x权限上时,则被称为Set UID,简称SUID。针对文件,目录无效

作用:

  • SUID权限仅对二进制程序有效
  • 执行者对于该程序需要具有x的可执行权限
  • 本权限仅在执行该程序的过程中有效
  • 执行者将具有该程序拥有者的权限

注意:

  • SUID仅可用在二进制程序上,不能够用在shell脚本上面
  • SUID对目录无效

Set GID

s这个标志出现在用户组的x权限上时,则被称为Set GID,简称SGID。针对目录和文件

对于文件的作用:

  • SGID对二进制程序有用
  • 程序执行者对于该程序来说,需要具有x的权限
  • 执行者在执行的过程中将会获得该程序用户组的支持

对于目录的作用:

  • 用户若对于此目录具有rx的权限时,该用户能够进入此目录
  • 用户在此目录下的有效用户组将会变成该目录的用户组
  • 用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该文件的用户组与此目录的用户组相同

Sticky Bit

Sticky Bit当前只针对目录有效,对于文件没有效果。

作用:

  • 当用户对于此目录具有wx权限,既具有写入的权限;
  • 当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件

例如:甲用户对于A目录有用户组和其他人身份,且拥有w的权限,则对于该目录甲用户可以对目录内的任何人建立的文件或目录均可删除、更名、移动等操作;但是如果加上SBIT的权限选项,则甲只能够针对自己建立的文件或目录进行删除、更名、移动等操作,而无法删除其他人的文件。

SUID/SGID/SBIT权限设置

SUID:4

SGID:2

SBIT:1

例如:将一个文件的权限修改为【-rwsr-xr-x】

1
chmod 4755 filename

查看文件类型:file

1
file 文件名

命令与文件的查找

脚本文件的查找

用于在PATH变量指定的路径中,搜索某个系统命令的位置,返回读一个搜索结果。该命令可以知道某个系统命令是否存在,以及执行的是哪个位置的命令

1
2
## -a:表示将所有由PATH目录中可以找到的指令均列出,不止第一个被找到的指令名称
$ which [-a] command

文件的查找

文件的查找有whereislocatefind等一些优秀的命令,其中find的查找性能比较慢,也比较影响硬盘性能;一般都是先通过whereis或者locate命令先进行查找,如果找不到再通过find命令查找。

whereis (由一些特定的目录中查找文件)

用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis主要是针对/bin /sbin下面的执行文件,以及/usr/share/man下面的man page文件,跟几个特定的目录来处理而已。

1
whereis [-lbmsu] 文件或目录名

参数:

  • -l:列出whereis会去查询的几个主要目录
  • -b:只找二进制文件
  • -m:只找在说明文件manual路径下的文件
  • -s:只找source源文件
  • -u:查找不再上述三个项目当中的其他特殊文件

locate / updatedb

updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件;

locate:依据/var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名

1
locate [-ir] keyword

参数:

  • -i:忽略大小写的差异
  • -c:不输出文件名,仅计算找到的文件数量
  • -l:仅输出几行的意思
  • -S:输出locate所使用的数据库相关信息
  • -r:后面可接正则表达式的显示方式

find

由于find在查找数据的时候相当消耗硬盘资源,所以没事不要随便使用find

1
find [PATH] [option] [action]

选项与参数:

  • 与时间有关的选项:共有-atime-ctime-mtime,以-mtime说明:

    • -mtime n:找出n天之前的【一天之内】被修改过的文件; n==0表示目前时间

    • -mtime +n:找出n天之前(不含n天本身)被修改过的文件

    • -mtime -n:找出n天之内(含n天本身)被修改过的文件

    • newer file:file为一个存在的文件,列出比file还要新的文件

  • 与使用者或用户组名称有关的参数

    • -uid n:n为数字, 使用者的账号ID,即UID;存在/etc/passwd
    • -gid n:用户组名称的ID,即GID;存在/etc/group
    • -user name:name为使用者账号名称
    • -group name:name为用户组名称
    • nouser:查找文件的拥有者不在/etc/passwd
    • -nogroup:查找文件的用户组不在/etc/group
  • 与文件权限及名称有关的参数

    • -name filename:查找文件名为filename的文件
    • -size [+-]SIZE:查找比SIZE大[+]或小[-]的文件;SIZE的规格:c:Bytes,k:代表1024Bytes
    • -type TYPE:查找文件类型为TYPE的;TYPE类型:一般正规文件(f)、设备文件(b,c)、目录(d)、链接文件(l)、socket(s)、及FIFO(p)等
    • -perm mode:查找文件权限【刚好等于】mode的文件
    • -perm -mode:查找文件权限【必须要全部囊括mode的权限】的文件
    • -perm /mode:查找文件权限【包含任一mode的权限】mode的文件
  • 额外可进行的操作

    • -exec command:command为其他命令,-exec后面可再接额外的命令来处理查找到的结果

      1
      find /usr/bin /usr/sbin/ -perm /7000 -exec ls -l {} \;

      意义:

      {} 代表由find找到的内容,将结果放置到{位置中}

      -exec 一直到 \;关键字,表示从开始-exec到结束\;,在中间的就是find命令内的额外操作

      由于在bash环境下有特殊意义,所以使用\转义

    • -print:将结果打印到屏幕上,该操作为默认操作

参考资料

《鸟哥的LINUX私房菜》

-------------本文结束感谢您的阅读-------------

本文标题:Linux文件与目录管理

文章作者:Mr.wj

发布时间:2020年01月05日 - 18:54

最后更新:2020年01月05日 - 18:57

原始链接:https://www.wjqixige.cn/2020/01/05/Linux文件与目录管理/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Mr.wj wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!