码迷,mamicode.com
首页 > 其他好文 > 详细

标准I/O与管道;用户、组和权限;文件处理工具及正则表达式总结

时间:2018-12-25 01:04:28      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:冒号   完全   out   tee   删除   非root   magedu   unique   EDA   

四、标准I/O与管道
标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
?打开的文件都有一个fd: file descriptor (文件描述符)
?Linux给程序提供三种I/O设备
?标准输入(STDIN)-0 默认接受来自键盘的输入
?标准输出(STDOUT)-1 默认输出到终端窗口
?标准错误(STDERR)-2 默认输出到终端窗口
?I/O重定向:改变默认位置
把输出和错误重新定向到文件
?STDOUT和STDERR可以被重定向到文件
命令 操作符号 文件名
支持的操作符号包括:

把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
?> 文件内容会被覆盖
set –C 禁止将内容覆盖已有文件,但可追加
| file 强制覆盖
set +C 允许覆盖
?>> 原有内容基础上,追加内容
把输出和错误重新定向到文件
?2> 覆盖重定向错误输出数据流
?2>> 追加重定向错误输出数据流
?标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
?合并标准输出和错误输出为同一个数据流进行重定向
? &> 覆盖重定向
? &>> 追加重定向
?COMMAND > /path/to/file
?tr 命令是:转换和删除 常用选项 -d:delete,删除 -s:squeeze-repeat,压缩
从文件中导入STDIN
?使用<来重定向标准输入
?某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成大写字符
?tr –d abc < /etc/fstab
删除fstab文件中的所有abc中任意字符
?cat > file
mage
wangxiaochun
按ctrl+d离可以使用文件来代替键盘的输入
?cat < file1 > file2
?Cat < file1 >> file1
把多行发送给STDIN
mail -s "Please Call" admin@magedu.com <<END
Hi Wang

Please give me a call when you get in. We may need
to do some maintenance on server1.

Details when you‘re on-site
Zhang
END
管道
管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的
STDIN
?STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
?最后一个命令会在当前shell进程的子shell进程中执行
?组合多种工具的功能
ls | tr ‘a-z’ ‘A-Z
重定向到多个目标(tee)
?命令1 | tee [-a ] 文件名 | 命令2
把命令1的STDOUT保存在文件中,做为命令2的输入
-a 追加
?使用:
?保存不同阶段的输出
?复杂管道的故障排除
?同时查看和记录输出
五、用户、组、权限
用户user
?令牌token,identity
?Linux用户:Username/UID
?管理员:root, 0
?普通用户:1-60000 自动分配
系统用户:1-499, 1-999 (CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)
交互式登录
组group
?Linux组:Groupname/GID
?管理员组:root, 0
?普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
用户和组的配置文件
?Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
passwd文件格式 :共七项
?login name:登录用名(wang)(1):用户名。
?passwd:密码 (x) (2):密码(已经加密)
?UID:用户身份编号 (1000) (3):UID(用户标识),操作系统自己用的
?GID:登录默认所在组编号 (1000) (4):GID组标识。
?GECOS:用户全名或注释 (5):用户全名或本地帐号
?home directory:用户主目录 (/home/wang) (6):开始目录
?shell:用户默认使用shell (/bin/bash) (7):登录使用的Shell,就是对登录命令进行解析的工具。
shadow文件格式?
登录用名?用户密码:一般用sha512加密?从1970年1月1日起到密码最近一次被更改的时间?密码再过几天可以被变更(0表示随时可被变更)?密码再过几天必须被变更(99999表示永不过期)?密码过期前几天系统提醒用户(默认为一周)?密码过期几天后帐号会被锁定?从1970年1月1日算起,多少天后帐号
group文件格式
?群组名称:就是群组名称
?群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
?GID:就是群组的 ID
?以当前组为附加组的用户列表(分隔符为逗号)
gshdow文件格式
?群组名称:就是群的名称
?群组密码:
?组管理员列表:组管理员的列表,更改组密码和成员
?以当前组为附加组的用户列表:多个用户间用逗号分隔当前组为附加组的用户列表(分隔符为逗号)
用户创建:useradd
?useradd [options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G G
用户属性修改
?usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被
覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c ‘COMMENT‘:新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目
查看用户相关的ID信息
?id [OPTION]... [USER]
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
切换用户或以其他用户身份执行命令
?su [options...] [-] [user [args...]]
?切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变
当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目
录,完全切换
?root su至其他用户无须密码;非root用户切换时需要密
设置密码
?passwd [OPTIONS] UserName: 修改指定用户的密码
?常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期
修改用户密码策略
?chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 显示密码策略
?示例:
chage -d 0 tom 下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
文件权限:例如、-rwxr-xrw- 5 root root 25195 Dec 17 10:43 f1
-:文件属性 rwxr-xrw- :权限 5:连接数 root:属主 root:属组 25195:大小 Dec:时间 f1:文件名
修改文件的属主和属组
?修改文件的属主:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用法说明:
OWNER
OWNER:GROUP
:GROUP,冒号也可用 . 替换
-R: 递归
chown [OPTION]... --reference=RFILE FILE...
?修改文件的属组:chgrp
chgrp [OPT
文件权限
?文件:
r 可使用文件查看类工具获取其内容
w 可修改其内容
x 可以把此文件提请内核启动为一个进程
?目录:
r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件
x 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
X 只给目录x权限,不给文件x权限I
修改文件权限
?chmod [OPTION]... OCTAL-MODE FILE...
-R: 递归修改权限
?chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
修改一类用户的所有权限
u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + -
?chmod [OPTION]... --
新建文件和目录的默认权限
?umask值 可以用来保留在创建文件权限
?新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权
限,则将其权限+1
?新建目录的默认权限: 777-umask
?非特权用户umask是 002
?root的umask 是 022
?umask: 查看
?umask # 设定
示例:umask 002
umask u=rw,g=r,o=
?umask –S 模式方式显示
?umask –p 输出可被调用
?全局设置: /etc/bashrc 用户设置:~/.bashrc
权限位映射
?SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
?SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
?Sticky: other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
六、文本处理工具、正则表达式
抽取文本的工具?
文件内容:less和 cat?
文件截取:head和tail?
按列抽取:cut?
按关键字抽取:grep
显示文本前或后行内容
?head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行
-# 指定行数
?tail [OPTION]... [FILE]...
-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor
-F 跟踪文件名,相当于--follow=name --retry
?tailf 类似tail –f,当文件不增长时并不访问文件
按列抽取文本cut和合并文件paste
?cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
cut和paste
?显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
?paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
收集文本统计数据wc
?计数单词总数、行总数、字节总数和字符总数
?可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
?常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m只计数字符总数
-L 显示文件中最长行的长度
文本排序sort
?把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
?常用选项
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次
uniq
?uniq命令:从输入中删除前后相接的重复的行
?uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复
?常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
Grep:文本过滤(模式:pattern)工具
grep命令选项
? --color=auto: 对匹配到的文本着色显示
? -v: 显示不被pattern匹配到的行
? -i: 忽略字符大小写
? -n:显示匹配的行号
? -c: 统计匹配的行数
? -o: 仅显示匹配到的字符串
? -q: 静默模式,不输出任何信息
? -A #: after, 后#行
? -B #: before, 前#行
? -C #:context, 前后各#行
? -e:实实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
? -w:匹配整个单词
? -E:使用ERE
? -F:相当于fgrep,不支持正则表达式
? -f file: 根据模式文件处理
正则表达式
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

  • 匹配前面的字符任意次,包括0次
    贪婪模式:尽可能长的匹配
    . 任意长度的任意字符
    \? 匹配其前面的字符0或1次
    + 匹配其前面的字符至少1次
    {n} 匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n} 匹配前面的字符至多n次
    {n,} 匹配前面的字符至少n次
    位置锚定:定位出现的位置
    ^ 行首锚定,用于模式的最左侧
    $ 行尾锚定,用于模式的最右侧
    ^PATTERN$ 用于模式匹配整行
    ^$ 空行
    ^[[:space:]]
    $ 空白行
    \< 或 \b 词首锚定,用于单词模式的左侧
    \> 或 \b 词尾锚定,用于单词模式的右侧
    \<PATTERN\> 匹配整个单词
    分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+
    ?分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些
    变量的命名方式为: \1, \2, \3, ...
    ?\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
    ?示例: (string1+(string2))
    \1 :string1+(string2)

    \2 :string2
    ?后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
    ?或者:|
    示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat
    ^ 行首
    $ 行尾
    . 任意单一字符
    [] []内任意单一字符
    [^] 除[]内任意单一字符
  • 前面字符重复不确定次数
    + +前面字符重复一次以上不确定次数
    \? ?前面字符重复0或1次
    \ 转义符
    .
    任意长度字符
    {n} 前面字符重复n次
    {n,} 前面字符重复n次以上
    {m,n} 前面字符重复m次和n次之间
    egrep及扩展的正则表达式
    ?egrep = grep -E
    ?egrep [OPTIONS] PATTERN [FILE...]
    ?扩展正则表达式的元字符:
    ?字符匹配:
    . 任意单个字符
    [] 指定范围的字符
    [^] 不在指定范围的字符
    次数匹配:
  • 匹配前面字符任意次
    ? 0或1次
  • 1次或多次
    {m} 匹配m次
    {m,n} 至少m,至多n次
    位置锚定:
    ^ 行首
    $ 行尾
    \<, \b 语首
    \>, \b 语尾
    ?分组:
    ()
    后向引用:\1, \2, ...
    ?或者:
    a
    b a或b
    C
    cat C或cat
    (C
    c)at Cat或cat
    Vim 文本编辑器
    vim [OPTION]... FILE...
    +# 打开文件后,让光标处于第#行的行首,+默认行尾
    +/PATTERN 让光标处于第一个被PATTERN匹配到的行的行首
    –b file 二进制方式打开文件
    –d file1 file2… 比较多个文件
    -m file 只读打开文件
    ?vim -e file 或 ex file 直接进入ex模式
    ?如果该文件存在,文件被打开并显示内容
    如果该文件不存在,当编辑后第一次存盘时创建它
    vim:一个模式编辑器
    ?击键行为是依赖于 vim的 的“模式”
    ?三种主要模式:
    ?命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
    ?插入(Insert)或编辑模式:修改文本
    ?扩展命令(extended command )模式:保存,退出等
    ?Esc键 退出当前模式
    ?Esc键 Esc键 总是返回到命令模式
    模式转换
    ?命令模式 --> 插入模式
    i insert, 在光标所在处输入
    I 在当前光标所在行的行首输入
    a append, 在光标所在处后面输入
    A 在当前光标所在行的行尾输入
    o 在当前光标所在行的下方打开一个新行
    O 在当前光标所在行的上方打开一个新行
    插入模式 --------> 命令模式
    ESC
    ?命令模式 --------> 扩展命令模式

    ?扩展命令模式 --------> 命令模式
    ESC,enter
    关闭文件
    ?扩展命令模式:
    :q 退出
    :q! 强制退出,丢弃做出的修改
    :wq 保存退出
    :x 保存退出
    ?命令模式
    ZZ 保存退出
    ZQ 不保存退出

标准I/O与管道;用户、组和权限;文件处理工具及正则表达式总结

标签:冒号   完全   out   tee   删除   非root   magedu   unique   EDA   

原文地址:http://blog.51cto.com/14128387/2334744

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!