第三周blog
-
1
列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
# who|cut -d’ ‘ -f 1 |sort -u -
2
取出最后登录到当前系统的用户的相关信息。
# who | tail -n 1 -
3
取出当前系统上被用户当作其默认shell的最多的那个shell。
# cat /etc/passwd|cut -d: -f7|sort|uniq -c|sort -n|tail -n 1 -
4
将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
# cat /etc/passwd|sort -n -t: -k3|tail -n 10|tr [a-z] [A-Z] > /tmp/etc.conf -
5
取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
# ifconfig |grep “inet addr” |cut -d: -f2|cut -d’ ‘ -f1 -
6
列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
# ls /etc/*.conf|tr [a-z] [A-Z] > /tmp/etc.conf -
7
显示/var目录下一级子目录或文件的总个数。
# ls /var | wc -l -
8
取出/etc/group文件中第三个字段数值最小的10个组的名字。
# cat /etc/group|sort -n -t: -k3|head -n 10|cut -d: -f1 -
9
将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
# cat /etc/fstab /etc/issue > /tmp/etc.test
-10
用户及组管理命令概叙,
主要 – 1 用户的增,删,改,查:useradd,userdel,usermod,id
– 2 组的增,删,改,查 : groupadd,groupdel,groupmod,id
– 3 用户及组的密码管理
用户密码:passwd
组密码:gpasswd
~ (1) 创建组distro,其GID为2016; # groupadd -g 2016 distro ~ (2) 创建用户mandriva, 其ID号为1005;基本组为distro; # useradd -u 1005 -g distro mandriva ~ (3) 创建用户mageia,其ID号为1100,家目录为/home/linux; # useradd -u 1100 -d /home/linux mageia ~ (4) 给用户mageia添加密码,密码为mageedu; # echo mageedu|passwd --stdin mageia ~ (5) 删除mandriva,但保留其家目录; # userdel mandriva ~ (6) 创建用户slackware,其ID号为2002,基本组为distro,附加组peguin; # useradd -u 2002 -g distro -G peguin slackware ~ (7) 修改slackware的默认shell为/bin/tcsh; # usermod -s /bin/tcsh slackware ~ (8) 为用户slackware新增附加组admins; # usermod -G admins slackware ~ (9) 为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天; # passwd -n 3 -x 180 -w 3 slackware ~ (10) 添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova; # useradd -u 3003 -g clouds -G peguin,nova openstack ~ (11) 添加系统用户mysql,要求其shell为/sbin/nologin; # useradd -r mysql -s /sbin/nologin ~ (12) 使用echo命令,非交互式为openstack添加密码。 # echo "openstack" | passwd --stdin openstack
sed用法
-
1 sed作用
-
2 sed如何工作
-
3 sed详细用法
sed用来处理什么
首先来看看man文档中如何介绍sed
sed - stream editor for filtering and transforming text
其意是数据流编辑器,过滤并且改变文本.用于编辑文本的工具.
sed如何工作
-
sed工作机制
sed是数据流处理工具,每次只读取一行数据,逐个读取,并将其复制到内存中的特定空间,此空间是sed自己的工作车间,被称为模式空间,即图中parttern space。在模式空间中根据sed所指定的条件进行模式的匹配,可以匹配的行进行处理后,可能保留在模式空间中,可能直接打印至终端(stdout),这需要根据具体的编辑操作,如果不能匹配的行则不处理,保留在模式空间中,在下一行读入数据之前,将模式空间中还保存的数据打印至标准输出(stdout).一直循环此机制到条件对应的行.
sed详细用法
sed [OPTION]... 'scripts' [file]... scripts:指的是sed命令匹配的标准,格式为"{[地址定位][编辑命令]}",即{[address-range][sed-command]}. OPTION: -n:不输出模式空间的内容至屏幕; -e script, --expression=script: 多点编辑; -f /PATH/TO/SED_SCRIPT_FILE 直接运行sed脚本文件编辑,每行一个编辑命令 -r, --regexp-extended:支持使用扩展正则表达式; -i : 直接编辑原文件; 地址定位: 空地址:对全文进行处理;相当于1,$; #: 特定的第#行,例如5行即匹配第5行; $: 最后一行; /pattern/:被模式所匹配到的每一行; /pattern/,/pattern/: 从第一次模式匹配到的行开始,到第二次模式匹配到的行为止; #,/pattern/: 第#行到第一次模式匹配到的行为止; #,#: 指定行范围,左侧为起始行,右侧为结束行; #,+#: 指定行范围, 左侧为起始行,右侧为以左侧为标准的偏移量; 例如: 3,+7 第三行至第十行 1,$ 第一行至最后一行 步进:~ 1~2:所有奇数行 2~2:所有偶数行 编辑命令: d:删除; p:显示模式空间内容; a \text:在行后面追加文本"text",支持使用\n实现多行追加; i \text:在行前面插入文本"text",支持使用\n实现多行插入; c \text: 把匹配到的行替换为此处指定的文本"text"; w /path/to/filename:将当前模式空间所匹配的行写入到指定文件中; r /path/to/filename:读取指定文件至匹配行的后面;可做文件合并; =:为模式匹配到的行打印行号;每个行号独占一行; !:条件取反; 地址定位!编辑命令; 例如:'$!d',最后一行不删除; s///:查找替换,其分隔符可自行指定,常用的有s$$$,s###等; 替换标记: g:全局替换; w:/path/to/somefile:将替换成功的结果保存至指定文件中; p:显示替换成功的行;
example:
将/etc/hosts文件打印,为什么会每行显示两遍呢,其实就是sed工作机制,首先将一行读入,根据条件是全文匹配,因此第一行直接打印至终端,然后再将模式空间保留原有的行再打印一次,因此便是两行。 # sed 'p' /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 使用-n选项不打印模式空间的行,只显示处理之后的行 # sed -n 'p' /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
创建一个测试文件/tmp/test
]# cat > /tmp/test # 1 # 2 # 3 # 4 # 5 删除: 删除/tmp/test第一行至第3行 ]# sed '1,3d' /tmp/test # 4 # 5 删除/tmp/test第一行到三行以后,即到第四行 ]# sed '1,+3d' /tmp/test # 5 删除/tmp/test全文 ]# sed '1,$d' /tmp/test 或者 ]# sed 'd' /tmp/test ]# 删除/tmp/test奇数行,因此显示偶数行 ]# sed '1~2d' /tmp/test # 2 # 4 删除/tmp/test偶数行,因此显示奇数行 ]# sed '2~2d' /tmp/test # 1 # 3 # 5 不删除最后一行/tmp/test,并其显示行号 ]# sed '$!d;=' /tmp/test 5 # 5
第二个测试文件/tmp/test_1
]# cat > /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 在$符号开头的行后添加两行文本'test_1'和'test_2' ]# sed '/^\$/a \test_1 \ntest_2' /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 test_1 test_2 将/tmp/test_2中文件内容读到/tmp/test_1文件末尾 ]# sed 'r /tmp/test w /tmp/test_2' /tmp/test_1 # 1 @ 2 # 3 @ 4 $ 5 # 1 # 2 # 3 # 4 # 5 将非#开头的行的行首修改为#,且仅显示修改成功的行 ]# sed -n 's/^[^#]/#/p' /tmp/test_1 # 1 # 2 # 3 # 4 # 5 将所有非#的字符替换成#,并显示替换成功的行 ]# sed -n 's/[^#]/#/gp' test_1 ### ### ### ### ### 将前三行所有非#字符替换成#,显示成功替换的行,并且显示4,5行 ]# sed -n -e '1,3s/[^#]/#/gp' -e '4,5p' test_1 ### ### ### @ 4 $ 5
高级使用:
在sed工作空间中,不仅仅只有parttern spacc,还有hold space,即保持空间。
以下是其使用:
高级编辑命令(仅做了解): h H : 覆盖/追加从模式空间到保持空间; g G :覆盖/追加从保持空间到模式空间; n N :覆盖/追加读取匹配到的行的下一行至模式空间中; d:删除模式空间中的行; D: 删除模式空间中的所有行; x:交换两个空间的内容;
-
sed模式空间与保持空间
由于sed有两个内存空间,且开始都是空的,便可以允许数据之间的交换,此处只是初步知晓其操作即可。以下有实例:
example: sed 'G' FILE:在原有的每行后方添加一个空白行; sed '1!G;h;$!d' FILE:逆序显示文件的内容; sed 'n;d' FILE:显示奇数行; sed '$!N;$!D' FILE:取出文件后两行;
原创文章,作者:N25_sadan,如若转载,请注明出处:http://www.178linux.com/64133