• linux 文件和目录管理


    文件管理命令

    ls命令 文件查看

    [root@client ~]# ls -la
    总用量 420
    dr-xr-x---.  9 root  root    4096 2月  28 12:07 .
    dr-xr-xr-x. 17 root  root     224 2月  27 21:16 ..
    -rwxrwxrwx.  1 test1 test1      0 2月  27 21:02 aaaa.txt
    -rw-r--r--.  1 root  root       0 11月 27 21:12 abc
    drwxr-xr-x.  2 root  root       6 11月 27 21:12 abcc
    -rw-------.  1 root  root    1923 3月  28 2019 anaconda-ks.cfg
    -rw-------.  1 root  root    4517 11月 27 21:06 .bash_history
    -rw-r--r--.  1 root  root      18 12月 29 2013 .bash_logout
    -rw-r--r--.  1 root  root     176 12月 29 2013 .bash_profile
    -rw-r--r--.  1 root  root     176 12月 29 2013 .bashrc
    [    1   ][  2 ][   3  ][  4 ][    5   ][     6     ][       7          ]
    
    [  权限  ][连结][拥有者][群组][文件容量][  修改日期 ][      檔名        ]
    [root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
    
    [root@www ~]# ls [--color={never,auto,always}] 目录名称
    
    [root@www ~]# ls [--full-time] 目录名称
    
    选项与参数:
    
    -a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
    
    -A  :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录
    
    -d  :仅列出目录本身,而不是列出目录内的文件数据(常用)
    
    -f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)
    
    -F  :根据文件、目录等资讯,给予附加数据结构,例如:
    
          *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
    
    -h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
    
    -i  :列出 inode 号码,inode 的意义下一章将会介绍;
    
    -l  :长数据串列出,包含文件的属性与权限等等数据;(常用)
    
    -n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
    
    -r  :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
    
    -R  :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;
    
    -S  :以文件容量大小排序,而不是用档名排序;
    
    -t  :依时间排序,而不是用档名。
    
    --color=never  :不要依据文件特性给予颜色显示;
    
    --color=always :显示颜色
    
    --color=auto   :让系统自行依据配置来判断是否给予颜色
    
    --full-time    :以完整时间模式 (包含年、月、日、时、分) 输出
    
    --time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 
    
                           而非内容变更时间 (modification time)
    ls更多详细参数

    文件的时间的三种:

      • modification time (mtime)
        当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!

      • status time (ctime)
        当该文件的『状态 (status)』改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。 

      • access time (atime)
        当『该文件的内容被取用』时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config , 就会升级该文件的 atime 了。
    [root@client ~]# stat aaaa.txt   #单独查看文件三种时间的方法
      文件:"aaaa.txt"
      大小:0             块:0          IO 块:4096   普通空文件
    设备:fd00h/64768d    Inode:51391120    硬链接:1
    权限:(0777/-rwxrwxrwx)  Uid:( 1003/   test1)   Gid:( 1003/   test1)
    环境:unconfined_u:object_r:admin_home_t:s0
    最近访问:2020-02-27 21:02:47.070000000 +0800
    最近更改:2020-02-27 21:02:47.070000000 +0800
    最近改动:2020-02-27 21:07:06.723000000 +0800
    创建时间:-
    [root@client ~]#

    chgrp命令 改变所属群组

    [root@www ~]# chgrp [-R] dirname/filename ...
    
    选项与参数:
    
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
    
         都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
    
    范例:
    
    [root@www ~]# chgrp users install.log
    
    [root@www ~]# ls -l
    
    -rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
    
    [root@www ~]# chgrp testing install.log
    
    chgrp: invalid group name `testing' <== 发生错误讯息啰~找不到这个群组名~

    chown命令 改变文件拥有者

    [root@www ~]# chown [-R] 账号名称 文件或目录
    
    [root@www ~]# chown [-R] 账号名称:组名 文件或目录
    
    选项与参数:
    
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
    
    
    
    范例:将install.log的拥有者改为bin这个账号:
    
    [root@www ~]# chown bin install.log
    
    [root@www ~]# ls -l
    
    -rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
    
    
    
    范例:将install.log的拥有者与群组改回为root:
    
    [root@www ~]# chown root:root install.log
    
    [root@www ~]# ls -l
    
    -rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

    chmod命令 改变文件权限

    [root@www ~]# chmod [-R] xyz 文件或目录
    
    选项与参数:
    
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
    
    举例:
    [root@www ~]# ls -al .bashrc
    
    -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    
    [root@www ~]# chmod 777 .bashrc
    
    [root@www ~]# ls -al .bashrc
    
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

    cp命令 复制

    [root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
    
    [root@www ~]# cp [options] source1 source2 source3 .... directory
    
    选项与参数:
    
    -a  :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
    
    -d  :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
    
    -f  :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
    
    -i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    
    -l  :进行硬式连结(hard link)的连结档创建,而非复制文件本身;
    
    -p  :连同文件的属性一起复制过去,而非使用默认属性(备份常用);
    
    -r  :递回持续复制,用於目录的复制行为;(常用)
    
    -s  :复制成为符号连结档 (symbolic link),亦即『捷径』文件;
    
    -u  :若 destination 比 source 旧才升级 destination !
    
    最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!

    rm命令 删除

    [root@www ~]# rm [-fir] 文件或目录
    
    选项与参数:
    
    -f  :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
    
    -i  :互动模式,在删除前会询问使用者是否动作
    
    -r  :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

    mv命令 移动或重命名

    [root@www ~]# mv [-fiu] source destination
    
    [root@www ~]# mv [options] source1 source2 source3 .... directory
    
    选项与参数:
    
    -f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    
    -i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    
    -u  :若目标文件已经存在,且 source 比较新,才会升级 (update)

    basename命令 从路径中取出路径名和文件名

    [root@www ~]# basename /etc/sysconfig/network
    
    network         <== 很简单!就取得最后的档名~
    
    [root@www ~]# dirname /etc/sysconfig/network
    
    /etc/sysconfig  <== 取得的变成目录名了! 

    pwd命令 展示目录

    [root@www ~]# pwd [-P]
    选项与参数:
    -P  :显示出确实的路径,而非使用连结 (link) 路径。
    
    范例:单纯显示出目前的工作目录:
    [root@www ~]# pwd
    /root   <== 显示出目录~
    
    范例:显示出实际的工作目录,而非连结档本身的目录名而已
    [root@www ~]# cd /var/mail   <==注意,/var/mail是一个连结档
    [root@www mail]# pwd
    /var/mail         <==列出目前的工作目录
    [root@www mail]# pwd -P
    /var/spool/mail   <==怎么回事?有没有加 -P 差很多~
    [root@www mail]# ls -ld /var/mail
    lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail
    # 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail 
    # 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!

    mkdir命令 创建目录

    [root@www ~]# mkdir [-mp] 目录名称
    
    选项与参数:
    
    -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
    
    -p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!

    rmdir命令 删除目录

    [root@www ~]# rmdir [-p] 目录名称
    
    选项与参数:
    
    -p :连同上一级『空的』目录也一起删除

    关于环境变量的增加和查看

    [root@client ~]# echo $PATH   # 查看环境变量,root和普通用户的环境变量不同。
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@client ~]# useradd wangzengyi
    [root@client ~]# su - wangzengyi
    [wangzengyi@client ~]$ echo $PATH
    /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wangzengyi/.local/bin:/home/wangzengyi/bin
    [wangzengyi@client ~]$ exit
    logout
    [root@client ~]# PATH="$PATH":/root   #增加环境变量
    [root@client ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
    [root@client ~]#

    cat命令 查看文件

    [root@www ~]# cat [-AbEnTv]
    
    选项与参数:
    
    -A  :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    
    -b  :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    
    -E  :将结尾的断行字节 $ 显示出来;
    
    -n  :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
    
    -T  :将 [tab] 按键以 ^I 显示出来;
    
    -v  :列出一些看不出来的特殊字符

    tac命令 倒序查看文件

    [root@www ~]# tac /etc/issue
    
    
    Kernel 
     on an m
    
    CentOS release 5.3 (Final)
    
    # 嘿嘿!与刚刚上面的范例一比较,是由最后一行先显示喔!

    nl命令 查看文件

    [root@www ~]# nl [-bnw] 文件
    
    选项与参数:
    
    -b  :指定行号指定的方式,主要有两种:
    
          -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    
          -b t :如果有空行,空的那一行不要列出行号(默认值);
    
    -n  :列出行号表示的方法,主要有三种:
    
          -n ln :行号在萤幕的最左方显示;
    
          -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    
          -n rz :行号在自己栏位的最右方显示,且加 0 ;
    
    -w  :行号栏位的占用的位数。

    more命令 查看文件

    空白键 (space):代表向下翻一页; 
    Enter         :代表向下翻『一行』; 
    /字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字; 
    :f            :立刻显示出档名以及目前显示的行数; 
    q             :代表立刻离开 more ,不再显示该文件内容。 
    b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

    less命令 查看文件

    空白键    :向下翻动一页; 
    [pagedown]:向下翻动一页; 
    [pageup]  :向上翻动一页; 
    /字串     :向下搜寻『字串』的功能; 
    ?字串     :向上搜寻『字串』的功能; 
    n         :重复前一个搜寻 (与 / 或 ? 有关!) 
    N         :反向的重复前一个搜寻 (与 / 或 ? 有关!) 
    q         :离开 less 这个程序;

    head命令 查看文件

    [root@www ~]# head [-n number] 文件 
    
    选项与参数:
    
    -n  :后面接数字,代表显示几行的意思
    
    
    
    [root@www ~]# head /etc/man.config
    
    # 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样:
    
    [root@www ~]# head -n 20 /etc/man.config

    tail命令 查看文件

    [root@www ~]# tail [-n number] 文件 
    
    选项与参数:
    
    -n  :后面接数字,代表显示几行的意思
    
    -f  :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
    
    
    
    [root@www ~]# tail /etc/man.config
    
    # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
    
    [root@www ~]# tail -n 20 /etc/man.config

    od命令 查看特殊文件

    [root@www ~]# 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 ;

    touch命令 创建文件

    [root@www ~]# touch [-acdmt] 文件
    
    选项与参数:
    
    -a  :仅修订 access time;
    
    -c  :仅修改文件的时间,若该文件不存在则不创建新文件;
    
    -d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
    
    -m  :仅修改 mtime ;
    
    -t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

    which 命令路径搜索

    [root@www ~]# which [-a] command
    
    选项或参数:
    
    -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称

    whereis 文件搜索

    [root@www ~]# whereis [-bmsu] 文件或目录名
    
    选项与参数:
    
    -b    :只找 binary 格式的文件
    
    -m    :只找在说明档 manual 路径下的文件
    
    -s    :只找 source 来源文件
    
    -u    :搜寻不在上述三个项目当中的其他特殊文件

    locate 文件搜索

    [root@www ~]# locate [-ir] keyword
    
    选项与参数:
    
    -i  :忽略大小写的差异;
    
    -r  :后面可接正规表示法的显示方式
    • 如果搜索不到,可能是数据库没更新。updatedb:根据 /etc/updatedb.conf 的配置去搜寻系统硬盘内的档名,并升级 /var/lib/mlocate 内的数据库文件。
    • locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字档名。

    find 强大的查找命令

    [root@www ~]# find [PATH] [option] [action]
    
    选项与参数:
    
    1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
    
       -mtime  n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
    
       -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
    
       -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
    
       -newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
    
    
    
    范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
    
    [root@www ~]# find / -mtime 0
    
    # 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
    
    # 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
    
    # find / -mtime 3 有变动过的文件都被列出的意思!
    
    
    
    范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
    
    [root@www ~]# find /etc -newer /etc/passwd
    
    # -newer 用在分辨两个文件之间的新旧关系是很有用的!
    选项与参数:
    
    2. 与使用者或群组名称有关的参数:
    
       -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 搜寻。
    
    
    
    范例三:搜寻 /home 底下属於 vbird 的文件
    
    [root@www ~]# find /home -user vbird
    
    # 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,
    
    # 就可以利用这个命令将属於某个使用者的所有文件都找出来喔!
    
    
    
    范例四:搜寻系统中不属於任何人的文件
    
    [root@www ~]# find / -nouser
    
    # 透过这个命令,可以轻易的就找出那些不太正常的文件。
    
    # 如果有找到不属於系统任何人的文件时,不要太紧张,
    
    # 那有时候是正常的~尤其是你曾经以原始码自行编译软件时。
    选项与参数:
    
    3. 与文件权限及名称有关的参数:
    
       -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.... 的属性存在!
    
    
    
    范例五:找出档名为 passwd 这个文件
    
    [root@www ~]# find / -name passwd
    
    # 利用这个 -name 可以搜寻档名啊!
    
    
    
    范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些?
    
    [root@www ~]# find /var -type s
    
    # 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,
    
    # 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找!
    
    
    
    范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
    
    [root@www ~]# find / -perm +7000 
    
    # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,
    
    # 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,
    
    # 因此,就是 +7000  
    选项与参数:
    
    4. 额外可进行的动作:
    
       -exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到
    
                       的结果。
    
       -print        :将结果列印到萤幕上,这个动作是默认动作!
    
    
    
    范例八:将上个范例找到的文件使用 ls -l 列出来~
    
    [root@www ~]# find / -perm +7000 -exec ls -l {} ;
    
    # 注意到,那个 -exec 后面的 ls -l 就是额外的命令,命令不支持命令别名,
    
    # 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!
    
    
    
    范例九:找出系统中,大於 1MB 的文件
    
    [root@www ~]# find / -size +1000k
    
    # 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,
    
    # 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!

      

    umask 查看和设置文件权限的反掩码(略)

    file 查看文件类型(略)

    cd 切换目录(略)

    文件隐藏属性

    [root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
    
    选项与参数:
    
    +   :添加某一个特殊参数,其他原本存在参数则不动。
    
    -   :移除某一个特殊参数,其他原本存在参数则不动。
    
    =   :配置一定,且仅有后面接的参数
    
    
    
    A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
    
         将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
    
    S  :一般文件是非同步写入磁碟的,如果加上 S 这个
    
         属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
    
    a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 
    
         才能配置这个属性。 
    
    c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
    
         但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
    
    d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
    
    i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
    
         写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
    
    s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
    
         空间,所以如果误删了,完全无法救回来了喔!
    
    u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
    
         存在磁碟中,可以使用来救援该文件喔!
    
    注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置
    chattr, lsattr

    SUID/SGID/SBIT 权限配置

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

    假设要将一个文件权限改为『-rwsr-xr-x』时,由於 s 在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来配置!

    • Set UID

    当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么SUID的权限对於一个文件的特殊功能是什么呢?

    基本上SUID有这样的限制与功能:

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

    与 SUID 不同的是,SGID 可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

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

    这个 Sticky Bit, SBIT 目前只针对目录有效,对於文件已经没有效果了。 SBIT 对於目录的作用是:

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

    linux的文件种类

    • 正规文件(regular file ):
      • 纯文本档(ASCII):这是Linux系统中最多的一种文件类型啰, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
      • 二进制文件(binary):还记得我们在『 第零章、计算器概论 』里面的软件程序的运作中提过, 我们的系统其实仅认识且可以执行二进制文件(binary file)吧?没错~ 你的Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的啦~ 举例来说,刚刚下达的指令cat就是一个binary file。
      • 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码~因为他是属于一种特殊格式的文件。瞭乎?
    • 目录(directory):就是目录~第一个属性为 [ d ],例如 [drwxrwxrwx]。
    • 连结档(link):就是类似Windows系统底下的快捷方式啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
    • 设备与装置文件(device):与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
      • 区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备啰!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔!
      • 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
    • 数据接口文件(sockets):既然被称为数据接口文件, 想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
    • 数据输送文件(FIFO, pipe):FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。

    linux的文件后缀

    • *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ;
    • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
    • *.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!

    linux文件名限制

    由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:
    * ? > < ; & ! [ ] | ' " ` ( ) { }
    因为这些符号在文字接口下,是有特殊意义的!另外,文件名的开头为小数点『.』时, 代表这个文件为『隐藏档』喔!同时,由于指令下达当中,常常会使用到 -option 之类的选项,
    所以你最好也避免将文件档名的开头以 - 或 + 来命名。

    linux文件长度限制

    在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的档名长度限制为:
    单一文件或目录的最大容许文件名为 255 个字符;
    包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。

    权限与命令之间的关系

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

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

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

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

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

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

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

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

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

    • 目录所需权限:使用者在该目录至少要有 x 的权限; 
    • 文件所需权限:使用者在该文件至少需要有 x 的权限

    linux目录结构和用途

    linux目录结构

    /etc目录作用解释

    /etc这个目录主要用于存放系统的配置文件;

    /usr目录解释

    /usr是应用程序安装目录,所有的程序默认都会安装在此目录;

    /var目录解释

    /var此目录主要用于存放系统运行以及软件运行的日志信息;

    /dev目录解释

    /dev目录包含系统所有的设备文件。

    /proc目录解释

    /proc是虚拟目录,这个目录存在于内存中,目录中的所有信息都是内存映射,可以通过这个目录修改系统运行中的参数。

    其他目录解释

     

  • 相关阅读:
    服务器学习
    第七章节 排序
    第六章节 优先队列/堆
    用cmd运行java时的问题
    转载一下如何联系口语
    在翻译群里看到的一个句子的翻译
    Android EditText的设置(转)
    荐 android 如何打包自定义控件(转)
    Android 自定义 SpinnerButton(转)
    Android PopupWindow的使用技巧(转)
  • 原文地址:https://www.cnblogs.com/wangzengyi/p/12377825.html
Copyright © 2020-2023  润新知