Linux文件系统的权限
属主(owner, u), 属组(group, g), 其他用户(other, o): rwx, rwx, rwx
对应当前资源,每类账户都通过三位权限限定.(000-111: 0-7)
权限管理相关命令
权限管理 chmod
所属关系管理: chown, chgrp
文件遮罩码: umask
chmod
chmod – 修改文件的权限
基本用法
-R: recursive #递归修改权限
二种用法
操作指定类别用户的权限
=model
=rx, =r, =
ug=rx, go=, a=
操作某类用户的某位或某些位权限
+|-
[\+|-]mode
u\+r,
\+x
\+w
操作实践
#SYNOPSIS
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
$ chmod u=r file #会覆盖掉已有的权限
--> -r--rwxrwx 1 root root 0 Nov 29 15:12 file
$ chmod u+wx file
--> -rwxrwxrwx 1 root root 0 Nov 29 15:12 file
$ ll
-rw-rw-rw- 1 root root 0 Nov 30 13:37 a
-rw-r--r-- 1 root root 0 Nov 30 13:37 b
## 参考文件a的权限修改b的权限
$ chmod --reference=a b
$ ll
--> -rw-rw-rw- 1 root root 0 Nov 30 13:37 a
-rw-rw-rw- 1 root root 0 Nov 30 13:37 b
$ chmod u-r,g-w c
--> --w-r--rw- 1 root root 0 Nov 30 13:37 c
#eg:复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限.
$ cp -R /etc/skel/ /home/tuser1/
$ chmod go= -R /home/tuser1
$ ll -a tuser1/
--> drwx------ 4 root root 4096 Nov 30 13:34 .
drwxr-xr-x. 7 root root 4096 Nov 30 13:34 ..
-rw------- 1 root root 18 Nov 30 13:34 .bash_logout
-rw------- 1 root root 176 Nov 30 13:34 .bash_profile
-rw------- 1 root root 124 Nov 30 13:34 .bashrc
drwx------ 2 root root 4096 Nov 30 13:34 .gnome2
drwx------ 4 root root 4096 Nov 30 13:34 .mozilla
chown
chown – 修改文件的属主或属组
基本用法
#SYNOPSIS
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
-R, --recursive # 递归操纵文件或目录
USER # 只改属主
USER:GROUP(USER.GROUP) # 同时修改属主,属主
操作实践
# 修改b文件的属主为gentoo
$ chown gentoo b
$ ll b
--> -rw-rw-rw- 1 gentoo root 0 Nov 30 13:37 b
# 修改b文件的属主,属组为centos
$ chown centos:centos b
$ ll
--> -rw-rw-rw- 1 centos centos 0 Nov 30 13:37 b
# 参照文件b的属主,属主为a设置
$ ll a
--> -rw-rw-rw- 1 root root 0 Nov 30 13:37 a
$ chown --reference=b a
$ ll a b
--> -rw-rw-rw- 1 centos centos 0 Nov 30 13:37 a
-rw-rw-rw- 1 centos centos 0 Nov 30 13:37 b
chgrp
chgrp – 修改组
基本用法
#SYNOPSIS
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R, --recursive # 递归操纵文件或目录
umask
umask – 设定和显示遮罩码
操作实践
# 显示遮罩码
$ umask
--> 0022
# 设置遮罩码, 仅对当前shell进程有效
$ umask 0002
$ umask
--> 0002
grep
Linux文本处理三剑客
grep: 文本过滤工具;
sed:文本编辑器(行);stream editor
awk:文本报告生成器;Linux上awk的实现为gawk
基本用法
## SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
--color=auto # 对匹配到的行做高亮显示
-v, --invert-match #显示模式匹配不到的行
-i, --ignore-case # 忽略字符大小写
-q, --quiet, --silent # 静默模式, 不输出到标准输出
-E, --extended-regexp # 解释模式问扩展的正则表达式
-P, --perl-regexp # 解释模式作为一个Perl的正则表达式。这是高度的实验和grep -P可以警告未实现的功能。
-c, --count # 输出匹配到的行数
操作实践
# 输出匹配到的行数
$ grep 'bash\>' /etc/passwd -c
--> 6
基本正则表达式
字符匹配
.: # 匹配任意单个字符;
[]: # 匹配指定范围内的任意单个字符;
[^]: # 匹配指定范围内的任意单个字符;
[:lower:] # 小写字符
[:upper:] # 大写字符
[:alnum:] # 文字数字字符
[:digit:] # 数字字符
[:space:] # 所有空白字符(新行,空格,制表符)
[:blank:] # 空格或制表符
[:punct:] # 标点符号
[:alpha:] # 文字字符
[:blank:] # 空格或制表符
[:cntrl:] # 控制字符
[:graph:] # 非空字符(非空格、控制字符)
[:print:] # 非空字符(包括空格)
[:xdigit:] # 十六进制数字(0-9,a-f,A-F)
次数匹配
? # 0到1次
* # 0到多次
+ # 1到多次
{n} # 匹配n次
{n,} # 至少匹配n次
{,m} # 最多m次
{n,m} # 最少n次,最多m次
.* # 匹配任意长度的任意字符
位置锚定:
^: # 行首锚定;用于模式的最左侧;
$: # 行尾锚定;用于模式的最右侧;(用单引号)
\<, \b: # 词首锚定;用于表示单词的模式的左侧;
\>, \b: # 词尾锚定;用于表示单词的模式的右侧;
^$: # 空白行
分组:()
分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存在内置变量中,这些变量分别是\1,\2…
\1: 从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容.
\2: …
向后引用: 使用变量引用前面的分组括号中的模式所匹配到的字符.
扩展的正则表达式
grep家庭有三个命令
grep #基本正则表达式
-E #扩展正则表达式
-F #不支持正则表达式
egrep #扩展正则表达式
fgrep #不支持正则表达式
字符匹配
. # 任意单个字符
[]
[^]
次数匹配
*
?: # 0次或1次;
+: # 1次以上;
{m}: # 精确匹配m次;
{m,n}: # 至少m次,至多n次;
位置锚定
^: # 行首锚定;用于模式的最左侧;
$: # 行尾锚定;用于模式的最右侧;(用单引号)
\<, \b: # 词首锚定;用于表示单词的模式的左侧;
\>, \b:# 词尾锚定;用于表示单词的模式的右侧;
^$: # 空白行
或者
(a|b)wk # awk或者bwk
显示/etc/passwd文件中以bash结尾的行
egrep 'bash$' /etc/passwd
显示/etc/passwd文件中的两位数或三位数
egrep '\<[[:digit:]]{2,3}\>' /etc/passwd
显示netstat -tan
命令结果中以’LISTEN’后跟0个、1个或者多个空白字符结尾的行
netstat -nat | egrep '\<LISTEN[[:blank:]]*'
添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/ passwd文件中用户名与其shell名相同的行
egrep '^([[:alnum:]]*\>).*\1$' /etc/passwd
显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
egrep '^(centos|user1|root)' /etc/passwd | cut -d: -f3,7
找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
egrep '([[:alpha:]]|_)+\(\)' /etc/rc.d/init.d/functions
使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
egrep ... //TODO
找出ifconfig命令执行结果中1-255之间的数字
ifconfig | egrep '\<(1?[1-9]{1,2}|2[0-5]{2})\>'