一、权限操作

  • 权限是操作系统用来限制资源访问的机制,权限一般分为读、写、执行。

  • 每个文件都有特定的权限、所属用户、所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样的操作。

  • 每个进程都是以某个用户的身份运行,所以 进程的权限与运行该进程的用户的权限一样,用户的权限越大,该进程拥有的权限就越大。

  • Linux权限基于 UGO 模型进行控制:

    • U(ser), G(roup), O(ther)

    • 每一个文件的权限基于 UGO 进行设置。

    • 每个文件拥有一个 所属用户User 和 所属组Group,不属于该文件所属用户或所属组的用户则属于其他人Other 。

      权限    对 FILE 的影响    对 DIRECTORY 的影响
      r    可读取文件内容    可列出目录内容,即不能进入目录查看但可以列出其中的文件。
      w    可修改文件内容    可在目录中创建和删除文件
      x    可作为命令执行    可访问目录内容,即可以进入目录但无法查看文件(目录必须拥有x权限,否则无法查看)
      
      特殊权限    对 FILE 的影响            对 DIRECTORY 的影响
      suid = 4    以文件的所属用户身份执行    无
      sgid = 2    以文件所属组身份执行        在该目录中创建的任意新文件的所属组与该目录的所属组相同
      sticky = 1    无                对目录拥有写入权限的用户可以删除其所拥有的文件,无法删除其他用户所拥有的文件
      
      /etc/passwd 文件的权限为 -rwsr-xr-x , 所有者拥有 suid 权限
      可以通过 chmod 命令设置特殊权限:
        chmod 4755 FILE

1.1 默认权限

  • 每个终端都拥有一个 umask 属性,来确定新建文件、文件夹的默认权限。
  • umask 使用数字权限方式表示。
    • 目录的默认权限是 777
    • 文件的默认权限是 666
    • 一般,普通用户的默认 umask 是 002, root用户的默认umask是022
  • 也就是说,对普通用户来说:
    • 新建目录的权限是:777-002=775
    • 新建文件的权限是:666-002=664

1.2 相关命令

umask    查看、设置 umask 的值。

chmod    Change file Mode bits
    $chmod ugo=rwx,a-x,u+x file.txt
    $chmod 766 file.txt
    ```
    a    all    所有人
    u    user    文件属主
    g    group    文件属组
    o    other    其他人

    r    read    100 = 4
    w    write    010 = 2
    x    excute    001 = 1
    ```

chown    Change file Owner and group
    $sudo chown owner file.txt
    $sudo chown :group file.txt
    $sudo chown owner:group file.txt
    -R    --recursive    operate on files and directories recursively
chgrp    Change Group ownership
    $sudo chgrp group file.txt    = sudo chown :group file.txt
    -R

二、重定向

允许用户人为地改变程序 获取输入or产生输出 的位置。

文件标识符    含义
0        标准输入(stdin)    ,程序在默认情况下接收输入的地方,通常总是指向键盘
1        标准输出(stdout),程序在默认情况下输出结果的地方,通常总是指向显示器
2        标准错误(stderr)

2.1 输入重定向

  • 输入重定向符号"<"可以让程序从一个文件中获取输入(cat < file.txt)
  • 立即文档(here document),使用操作符"<<",告诉Shell从键盘接受输入,待输入结束(遇到约定的代表结束的分隔符),将分隔符以外的数据传递给程序。(cat << EOF)遇到EOF表示输入结束

2.2 输出重定向

  • 输出重定向符号">",如果指定的文件不存在,则创建文件;如果已经存在,则用新内容覆盖原有内容。
  • 输出重定向符号">>",如果指定的文件不存在,则创建文件;如果已经存在,则保留文件原有内容,并在后面追加新内容。
  • "2>" 或 "2>>",将 STDERR 重定向输出到指定文件中去。
  • "2>&1" 或 "2>>&1",将 STDERR 和 STDOUT 重定向输出到指定文件中去。

三、管道

  • Linux 中,几乎所有命令的返回数据都是纯文本的(因为命令运行在 CLI 下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让命令协作成为可能。
  • 通过管道和重定向可以完成多命令协作。
  • 以“|”分隔,将前一条命令的输出,作为后一条命令的输入。(ls -lh /etc | more)
  • 可在一行命令中使用多个管道,从而构造出复杂的Shell命令。

四、链接文件

普通文件    -
目录           d    directory
字符设备文件    c    character device
块设备文件      b    block device
本地域套接口    s    socket
有名管道        p    pipe
符号链接/软链接  l    link
ln    make Links between files(create hard links by default)
    ln -s TARGET LINK_NAME
    -s    --symbolic    make symbolic links(软链接) instead of hard links(硬链接)
    软链接,通过名称进行引用,软链接只是目标文件/文件夹的别名。删除目标文件会导致软链接失效。
    硬链接,直接引用,两个文件具有相同的内容,对其中一个文件的改动会反映在另一个文件中。删除其中一个对另一个不会有影响。

五、文件查找&定位

find    search for files in a directory hierarchy(搜索指定要求的文件)
    $find ./ -type f -mtime -1 -print
    +n    for greater than n
    -n    for less than n
    n    for exactly n
    -iname pattern    like -name, but the match is case insensitive(不区分大小写)
    -atime n    file was last Accessed n*24 hours ago
    -mtime n    file's data was last Modified n*24 hours ago
    -size n        file uses n units of space, rounding up
    -type c        file is type of c
        ```
        b      block (buffered) special
            c      character (unbuffered) special
            d      directory
            p      named pipe (FIFO)
            f      regular file
            l      symbolic link; this is never true if the -L option or the -follow option is in effect,
                     unless  the symbolic link is broken.  If you want to search for symbolic links when -L
                     is in effect, use -xtype.
            s      socket
            D      door (Solaris)
        ```
    -print        print the full file name on the stantard output, followed by a newline
    expr1 -a expr2    Same as expr1 expr2
    expr1 -o expr2    Or; expr2 is not evaluated if expr1 is true
    e.g.     find ./ -size +20k -a -size -5M -print
        find ./ -size -10k -print -o -size +10M -print
        *注意使用‘-o’时,前后都要加’-print',不然效果近似于: find ./ (-size -10k) or (-size +10M -print)。并且当第一条语句有返回结果时,第二条语句不会进行求值,即不执行。*

which     locate a command(在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果)
whereis    locate the binary, source, and manual page files for a command
    -b    search for binaries
    -s    search for sources
    -m    search for manuals

locate keyword    此命令需要预先建立数据库,用于快速查找文件、文件夹
    update    手工建立、更新数据库