第二部分 Linux 文件、目录与磁盘格式 - Chapter 7 Linux文件和目录管理



# 目录与路径

    * 相对路径与绝对路径 (略)

    * 目录的相关操作
        .         代表此层目录
        ..        代表上一层目录
        -         代表前一个工作目录
        ~         代表『目前使用者身份』所在的家目录
        ~account  代表 account 这个使用者的家目录

        ** cd∶变换目录
        ** pwd∶显示目前的目录 -p
        ** mkdir∶建立一个新的目录 -m -p
        ** rmdir∶删除一个空的目录 -p
    * 关于执行文件路径的变量(环境变量)∶ $PATH

# 文件与目录管理
    * 查看文件与目录∶ ls
        参数∶
        -a  ∶全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来~
        -A  ∶全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
        -d  ∶仅列出目录本身,而不是列出目录内的文件数据
        -f  ∶直接列出结果,而不进行排序 (ls 预设会以档名排序!)
        -F  ∶根据文件、目录等资讯,给予附加数据结构,例如∶
              *∶代表可执行档; /∶代表目录; =∶代表 socket 文件; |∶代表 FIFO 文件;
        -h  ∶将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
        -i  ∶列出 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)

    * 复制、移动与删除∶ cp, rm, mv

        ** cp  (复制文件或目录)

        $ cp [-adfilprsu] 源文件(source) 目标文件(destination)

        如果源文件有两个以上,则最后一个目标文件一定要是『目录』才行,即
        $ cp [options] source1 source2 source3 .... directory

            -p  ∶连同文件的属性一起复制过去,而非使用默认属性;
            -d  ∶若来源文件为链接文件(link file),则复制链接文件属性而非文件本身;
            -r  ∶递归连续复制,用于目录的复制行为;
            -a  ∶相当于 -pdr 的意思;

            -u  ∶若 destination 比 source 旧才更新 destination !
            -i  ∶若目标文件(destination)已经存在时,在覆盖时会先询问是否真的动作!
            -f  ∶为强制 (force) 的意思,若有重复或其他疑问时,不会询问用户,而强制复制;

            -l  ∶创建硬链接 (hard link) 的链接文件,而非复制文件本身;
            -s  ∶复制成为符号链接文件(symbolic link),亦即『快捷方式』文件;

        ** rm  (移除文件或目录)

        $ rm [-fir] 文件或目录

            -f  ∶就是 force 的意思,强制删除;
            -i  ∶互动模式,在删除前会询问用户是否动作
            -r  ∶递归删除,最常用在目录的删除了



        ** mv (移动文件与目录,或更名)

        $ mv [-fiu] 源文件 目标文件
        $ mv [options] source1 source2 source3 .... directory
       
        -f  ∶force 强制的意思,强制直接移动而不询问;
        -i  ∶若目标文件 (destination) 已经存在时,就会询问是否覆盖!
        -u  ∶若目标文件已经存在,且 source 比较新,才会更新 (update)

    * 取得路径的文件名称与目录名称
    $ basename /etc/sysconfig/network
    $ dirname /etc/sysconfig/network


# 查看文件内容
    * cat  由第一行开始显示文件内容

        $ cat [-AEnTv] 文件

        参数∶
        -A  ∶相当于 -vET 的整合参数,可列出一些特殊字符~
        -E  ∶将结尾的断行字元 $ 显示出来;
        -n  ∶列印出行号;
        -T  ∶将 [tab] 按键以 ^I 显示出来;
        -v  ∶列出一些看不出来的特殊字符


    * tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
        $ tac 文件


    * nl   显示的时候,顺道输出行号!
        $ nl [-bnw] 文件
        参数∶
        -b  ∶指定行号指定的方式,主要有两种∶
              -b a ∶表示不论是否为空行,也同样列出行号;
              -b t ∶如果有空行,空的那一行不要列出行号;
        -n  ∶列出行号表示的方法,主要有三种∶
              -n ln ∶行号在屏幕的最左方显示;
              -n rn ∶行号在自己栏位的最右方显示,且不加 0 ;
              -n rz ∶行号在自己栏位的最右方显示,且加 0 ;
        -w  ∶行号栏位的占用的位元数。


    * more 一页一页的显示文件内容
        $ more 文件
            *  空格键 (space)∶代表向下翻一页;
            * Enter          ∶代表向下翻『一行』;
            * /字符串        ∶代表在这个显示的内容当中,向下搜寻『字符串』;
            * :f             ∶立刻显示出文件名以及目前显示的行数;
            * q              ∶代表立刻离开 more ,不再显示该文件内容。


    * (常用) less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
        $ less 文件
            *  空格键    ∶向下翻动一页;
            * [pagedown]∶向下翻动一页;
            * [pageup]  ∶向上翻动一页;
            * /字串     ∶向下搜寻『字串』的功能;
            * ?字串     ∶向上搜寻『字串』的功能;
            * n         ∶重复前一个搜寻 (与 / 或 ? 有关!)
            * N         ∶反向的重复前一个搜寻 (与 / 或 ? 有关!)
            * q         ∶离开 less 这个程序;

    * head 只看头几行
        $ head [-n number] 文件
        参数∶
        -n  ∶后面接数字,代表显示几行的意思


    * (常用) tail 只看尾巴几行
        $ tail [-n number] 文件

        参数∶
        -n  ∶后面接数字,代表显示几行的意思

    * 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 ;


# 修改文件时间与建立新文件∶ touch
    *  建立一个空的文件;
        $ touch 新文件

    * 将某个文件日期修订为目前 (mtime 与 atime)
        $ touch [-acdmt] 文件


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

## 文件默认权限

    * 查看当前默认权限
        $ umask [-S]

    * 修改当前默认权限
        $ umask 002


## 文件隐藏属性

    * chattr (设定文件隐藏属性)

        $ chattr [+-=][ASacdistu] 文件或目录名称

        参数∶
        +   ∶增加某一个特殊参数,其他原本存在参数则不动。
        -   ∶移除某一个特殊参数,其他原本存在参数则不动。
        =   ∶设定一定,且仅有后面接的参数

        A  ∶当设定了 A 这个属性时,这个文件(或目录)的存取时间 atime (access)
             将不可被修改,可避免例如手提式电脑容易有磁碟 I/O 错误的情况发生!
        S  ∶这个功能有点类似 sync 的功能!就是会将数据同步写入磁碟当中!
             可以有效的避免数据流失!
        a  ∶当设定 a 之后,这个文件将只能增加数据,而不能删除,只有 root
             才能设定这个属性。
        c  ∶这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
             但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
        d  ∶当dump(备份)程序被执行的时候,设定 d 属性将可使该文件(或目录)不具有dump功能
        i  ∶这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入
             或新增数据!』对于系统安全性有相当大的助益!
        j  ∶当使用 ext3 这个文件系统格式时,设定 j 属性将会使文件在写入时先记录在
             journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了
             日了,所以这个属性无效!
        s  ∶当文件设定了 s 参数时,他将会被完全的移除出这个硬碟空间。
        u  ∶与 s 相反的,当使用 u 来设定文件时,则数据内容其实还存在磁碟中,
             可以使用来 undeletion.
        注意∶这个属性设定上面,比较常见的是 a 与 i 的设定值,而且很多设定值必须要身为
        root 才能够设定的喔!

    * lsattr (显示文件隐藏属性)

        $ lsattr [-aR] 文件或目录
        参数∶
        -a ∶将隐藏档的属性也秀出来;
        -R ∶连同子目录的数据也一并列出来!


## 文件特殊权限∶ SUID/SGID/Sticky Bit
    * Set UID
    会制作出 s 与 t 的权限,是为了让一般使用者在执行某些程序的时候, 能够暂时的具有该程序拥有者的权限。

    SUID 仅可用在『二进位制文件(binary file)』上

    * Set GID
        **  文件∶如果 SGID 是设定在 binary file 上面,则不论使用者是谁,在执行该程序的时候, 他的有效群组 (effective group) 将会变成该程序的群组所有人 (group id)。

        ** 目录∶如果 SGID 是设定在 A 目录上面,则在该 A 目录内所建立的文件或目录的 group ,将会是 此 A 目录的 group !

    * Sticky Bit
    这个 Sticky Bit 目前只针对目录有效,对于文件已经没有效果了。
    SBit 对于目录的作用是∶『在具有 SBit 的目录下,使用者若在该目录下具有 w 及 x 的权限, 则当使用者在该目录下建立文件或目录时,只有文件拥有者与 root 才有权力删除』。

    * SUID/SGID/SBIT 权限设定
        4 为 SUID
        2 为 SGID
        1 为 Sticky bit

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

## 查看文件类型∶file
    $ file 文件


# 文件的搜寻
    * (常用 & 重点) which (寻找『可执行文件』)
        $ which [-a] command
        参数∶
        -a ∶将所有可以找到的指令均列出,而不止第一个被找到的指令名称


    * (常用 & 重点) whereis (寻找特定文件)
        $ whereis [-bmsu] 文件或目录名
        参数∶
        -b    :只找 binary 的文件
        -m    :只找在说明档 manual 路径下的文件
        -s    :只找 source 来源文件
        -u    :没有说明档的文件!


    * locate
        $ locate 文件

    * (常用 & 重点) find
        $ find [PATH] [option] [action]
        参数∶
        1. 与时间有关的参数∶
           -atime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 access 过的文件;
           -ctime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的文件;
           -mtime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的文件;
           -newer file ∶file 为一个存在的文件,意思是说,只要文件比 file 还要新,
                         就会被列出来~
        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 搜寻。
        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.... 的属性存在!
        4. 额外可进行的动作∶
           -exec command ∶command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到
                           的结果。
           -print        ∶将结果列印到萤幕上,这个动作是预设动作!

你可能感兴趣的:(数据结构,linux,socket,F#,资讯)