一、权限操作
权限是操作系统用来限制资源访问的机制,权限一般分为读、写、执行。
每个文件都有特定的权限、所属用户、所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样的操作。
每个进程都是以某个用户的身份运行,所以 进程的权限与运行该进程的用户的权限一样,用户的权限越大,该进程拥有的权限就越大。
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 手工建立、更新数据库