四、标准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" [email?protected] <<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: 根据模式文件处理 正则表达式 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|