Linux 文件&目录相关命令简介

命令描述

此处要介绍的相关命令共有29个
关于文件与目录管理的命令有9个,分别是cdlspwdmkdirrmdircprmmvtouch

  • cd用于切换工作目录
  • ls用于列出目录中的文件
  • pwd用于显示当前工作目录
  • mkdir用于创建新的目录
  • rmdir用于删除空的目录
  • cp用于复制文件或目录
  • rm用于删除文件或目录
  • mv用于移动文件或目录
  • touch用于更新文件修改时间,或创建新的空文件

关于文件与目录权限的命令有6个,分别是chownchgrpchmodumaskchattrlsattr

  • chown用于修改某一文件或目录的所属人,同时也可以修改文件所属组
  • chgrp用于修改某一文件或目录的所属组
  • chmod用于修改某一文件或者目录的权限信息。
  • umask用于设置文件或目录被创建时的默认权限
  • chattr用于配置文件的隐藏权限属性
  • lsattr用于显示文件的隐藏权限属性

关于文件查看与寻找的命令有14个,分别是cattacnlmorelessheadtailodwhichwhereislocatefindfileupdatedb

  • cat从第一行开始显示文件内容
  • tac从最后一行开始显示文件内容
  • nl显示内容并且带有行号
  • more一页一页的显示文件内容
  • less与more类似,但是与more相比,less可以向前翻页
  • head只看某文件的头几行
  • tail只看某文件尾巴几行
  • od以二进制位的方式读取文件内容
  • which用于查询可运行文件
  • whereis用于寻找特定文件或目录
  • locate用于搜索文件
  • updatedb用于更新locate搜索时所用的数据库
  • find用于搜索硬盘中的文件
  • file用于观察文件类型

常用参数

  • pwd
    -P :显示出真是路径,而非link的路径
  • mkdir
    -m :创建目录时同时配置目录权限,忽略umask设置
    -p :递归创建目录,如果上级目录不存在则一起创建
  • rmdir
    -p :递归删除目录,连通上级空目录一起删除
  • ls
    -l :显示文件详情,包括文件名,大小,修改时间,文件权限等属性
    -a :显示包括隐藏文件
    -d :仅列出目录本身,而不是列出目录内的文件数据
    -h :将文件容量以人类较易读的方式(例如 GB, KB 等)列出来
    -i :列出 inode 号码,inode 的意义下一章将会介绍
    -r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小
    -R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
    -S :以文件容量大小排序,而不是用档名排序
    -t :依时间排序,而不是用档名
    –full-time :显示文件的所有时间信息,包括atime,ctime,mtime
  • cp
    -a :相当於 -pdr 的意思,至於 pdr 请参考下列说明
    -d :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身
    -f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
    -i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行
    -l :进行硬式连结(hard link)的连结档创建,而非复制文件本身
    -p :连同文件的属性一起复制过去,而非使用默认属性(备份常用)
    -r :递回持续复制,用於目录的复制行为
    -s :复制成为符号连结档 (symbolic link),亦即『捷径』文件
    -u :若 destination 比 source 旧才升级 destination
  • rm
    -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息
    -i :互动模式,在删除前会询问使用者是否删除
    -r :递归删除!最常用在目录的删除了
  • mv
    -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
    -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
    -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
  • touch
    -a :仅更新access time
    -c :仅修改文件的时间,若该文件不存在则不创建新文件
    -d :可以接欲修订的日期而不用目前的日期,也可以使用 –date=”日期或时间”
    -m :仅修改 mtime
    -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
  • cat
    -A :相当於 -vET 的组合选项,可列出一些特殊字符而不是空白而已
    -b :列出行号,仅针对非空白行做行号显示,空白行不标行号
    -E :将结尾的断行字节 $ 显示出来
    -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同
    -T :将 [tab] 按键以 ^I 显示出来
    -v :列出一些看不出来的特殊字符
  • nl
    -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n)
    -b t :如果有空行,空的那一行不要列出行号(默认值)
    -n :列出行号表示的方法,主要有三种:
    -n ln :行号在萤幕的最左方显示
    -n rn :行号在自己栏位的最右方显示,且不加 0
    -n rz :行号在自己栏位的最右方显示,且加 0
    -w :行号栏位的占用的位数
  • head
    -n :后面接数字,代表显示几行的意思
  • tail
    -n :后面接数字,代表显示几行的意思
    -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
  • od
    -t :后面可以接各种『类型 (TYPE)』的输出,例如:
    -t a :利用默认的字节来输出
    -t c :使用 ASCII 字节来输出
    -t d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes
    -t f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes
    -t o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes
    -t x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes
  • which
    -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
  • whereis
    -b :只找 binary 格式的文件
    -m :只找在说明档 manual 路径下的文件
    -s :只找 source 来源文件
    -u :搜寻不在上述三个项目当中的其他特殊文件
  • locate
    -i :忽略大小写的差异
    -r :后面可接正规表示法的显示方式
  • find
    与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明:
    -mtime n :n 为数字,意义为在 n 天之前的一天之内被更动过内容的文件
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
    与使用者或群组名称有关的参数:
    -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 搜寻
    与文件权限及名称有关的参数:
    -name filename :搜寻文件名称为 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…. 的属性存在
    额外可进行的动作:
    -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到的结果
    -print :将结果列印到萤幕上,这个动作是默认动作
  • chgrp
    -R :递归得改变次级目录中的文件及目录权限
  • chown
    -R :递归得改变次级目录中的文件及目录权限
  • chmod
    -R :递归得改变次级目录中的文件及目录权限
  • chattr
    + :添加某一个特殊参数,其他原本存在参数则不动
    – :移除某一个特殊参数,其他原本存在参数则不动
    = :配置一定,且仅有后面接的参数
    A :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
    S :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中
    a :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root才能配置这个属性
    c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
    d :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
    i :可以让一个文件『不能被删除、改名、配置连结,也无法写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
    s :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来
    u :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁碟中,可以使用来救援该文件
  • lsattr
    -a :将隐藏档的属性显示出来
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名
    -R :连同子目录的数据也一并列出来

应用示例

[root@www ~]# cd                    //切换至家目录
[root@www ~]# cd -                  //切换到上一个工作目录
[root@www /]# cd /lib               //切换到/lib目录
[root@www ~]# ls -l --time=atime a  //查看a文件的access time
[root@www lib]# pwd                 //显示当前工作路径
[root@www ~]# mkdir -p a/b/c        //连续创建a/b/c目录
[root@www ~]# mkdir -m 777 -p a/b/d //连续创建a/b/d目录并且设置目录权限为777
[root@www ~]# rmdir -p a/b/c        //连续删除a/b/c目录
[root@www ~]# cp -s a as            //符号连接(symbolic link)
[root@www ~]# cp -l a al            //实体连接(hard link)
[root@www ~]# rm -rf a              //递归强制删除a目录及其子目录所有数据
[root@www ~]# mv a b c .            //将a、b、c移动到当前工作目录
[root@www ~]# cat -A sshd.conf      //显示sshd.conf文件内容,包括特殊符号
[root@www ~]# tac /etc/issue        //倒着显示issue文件内容
[root@www ~]# nl -b a -n rz -w 3 a  //显示a文件内容,所有行带行号,行号显示在右侧且不足3位时补足0
[root@www ~]# more /etc/man.config  //翻页查看man.config文件
[root@www ~]# less /etc/man.config  //翻页查看man.config文件
[root@www ~]# head -n -20 file      //查看file文件倒数20行以前的内容
[root@www ~]# tail -n +100 file     //查看file文件100行以后的数据
[root@www ~]# od -t c passwd        //以ascii方式查看passwd文件
[root@www ~]# touch -d "2 days ago" bashrc //更改修改日期到两天前
[root@www ~]# umask 052             //设置默认权限为拿掉同组读执行,其他写权限
[root@www ~]# chattr +i attrtest    //为attrtest添加隐藏的i属性
[root@www ~]# lsattr attrtest       //显示attrtest的隐藏属性
[root@www ~]# file /usr/bin/passwd  //显示passwd的文件类型
[root@www ~]# which ifconfig        //查找ifconfig的来源
[root@www ~]# whereis ifconfig      //查找ifconfig文件(该命令搜索时搜索的是数据库而非直接搜索磁盘)
[root@www ~]# locate passwd         //查找passwd文件
[root@www ~]# updatedb              //更新/var/lib/mlocate/内的数据库
[root@www ~]# find / -mtime 0       //找出今天更改过的文件
[root@www ~]# find / -perm +7000 -exec ls -l {} \;   //查找包含7000任意一个权限的文件,并且使用ll列出详情
[root@www ~]# chgrp root file       //更改文件所有群组为root组
[root@www ~]# chgrp -R root dir/    //递归更改dir下所有的文件和目录的所有者为root用户
[root@www ~]# chown root file       //更改文件所有者为root用户  //更改文件所有者和所属群组为root
[root@www ~]# chown -R root dir/    //递归更改dir下所有的文件和目录的所有者为root用户     
[root@www ~]# chown root:root file  //更改文件所有者和所属群组为root账户和root组
[root@www ~]# chown :root file      //更改文件所有群组为root组
[root@www ~]# chmod 777 file        //对更改文件权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行
[root@www ~]# chmod -R 777 dir/     //递归更改目dir下所有文件和目录权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行
[root@www ~]# chmod 7777 file       //对更改文件权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行,同时增加SUID,SGID,SBIT权限。

概念简介

目录概念

在linux中,有5个特殊目录:

  • .代表此目录
  • ..代表上一层目录
  • 代表前一个工作目录
  • ~代表当前登录账户的家目录
  • ~account代表account账户的家目录

权限概念

ls -l命令的输出内容中,显示出每一个文件或目录的一些常见属性,例如:

[root@www ~]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Mar  2 07:58 dir
-rw-r--r-- 1 root root    0 Mar  2 07:58 file
权限 连接数 所属用户 所属用户组 占用空间 最后修改日期 文件/目录

在上述的属性中,第一栏drwxr-xr-x为该文件的权限栏,该块共有10个字符组成。其中第一个字符显示该文件的类型,共有7种文件类型:

  • d代表目录
  • -代表文件
  • l代表连接档
  • b代表设备文件里可供存储的接口设备
  • c代表设备文件里的串行端口设备。
  • s代表数据接口文件
  • p代表FIFO文件

其余9个字符分为三组,第一组代表文件拥有者的权限,第二组代表文件拥有组的权限,第三组代表其他用户的权限
三组中每组又有三个字符,分别代表这rwx权限,也就是读,写,执行权限。当权限不存在时,系统会以-填充该位。

三个特殊权限

SUID
该权限仅作用于文件,主要用途是让使用者临时拥有文件所有者的权限,仅对可执行的二进制文件有用,对脚本无效,在文件所有者的x权限上生效,存在时x权限变为小写s,当x权限本身不存在时,显示大写S

  • SUID 权限仅对二进位程序(binary program)有效
  • 运行者对於该程序需要具有 x 的可运行权限
  • 本权限仅在运行该程序的过程中有效 (run-time)
  • 运行者将具有该程序拥有者 (owner) 的权限

SGID
当该权限作用在文件上时,主要用于是让使用者拥有该文件群组的权限;如果该权限作用在目录上时,主要是让新建的文件或者目录的所属组为当前目录的所属组,在文件群组的x权限上生效,存在时x权限变为小写s,当x权限本身不存在时,显示大写S
作用于文件

  • SGID 对二进位程序有用
  • 程序运行者对於该程序来说,需具备 x 的权限
  • 运行者在运行的过程中将会获得该程序群组的权限

作用于目录

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

SBIT
该权限仅作用于目录,主要用途是让使用者在该目录创建了新文件或目录时,仅有该使用者或root才有权利删除该文件,在文件其他用户的x权限上生效,存在时x权限变为小写t,当x权限本身不存在时,显示大写T

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

以上三个特殊权限的配置与一般权限配置类似,只不过在需要配置特殊权限时,chmod后跟四位权限信息即可(需要注意的是,在配置特殊权限时要保证对应的位置上有x权限,否则将会显示大写的字母来标识无效)

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

权限总结

一、让使用者能进入某目录成为『可工作目录』的基本权限为何?

  • 可使用的命令:例如 cd 等变换工作目录的命令
  • 目录所需权限:使用者对这个目录至少需要具有 x 的权限
  • 额外需求:如果使用者想要在这个目录内利用 ls 查阅档名,则使用者对此目录还需要 r 的权限。

二、使用者在某个目录内读取一个文件的基本权限为何?

  • 可使用的命令:例如cat, more, less等等
  • 目录所需权限:使用者对这个目录至少需要具有 x 权限
  • 文件所需权限:使用者对文件至少需要具有 r 的权限才行

三、让使用者可以修改一个文件的基本权限为何?

  • 可使用的命令:例如 nano 或 vi 编辑器等
  • 目录所需权限:使用者在该文件所在的目录至少要有 x 权限
  • 文件所需权限:使用者对该文件至少要有 r, w 权限

四、让一个使用者可以创建一个文件的基本权限为何?

  • 目录所需权限:使用者在该目录要具有 w,x 的权限

五、让使用者进入某目录并运行该目录下的某个命令之基本权限为何?

  • 目录所需权限:使用者在该目录至少要有 x 的权限
  • 文件所需权限:使用者在该文件至少需要有 x 的权限
    原文作者:镜下尘埃
    原文地址: https://www.jianshu.com/p/e898e43dc6bd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞