首页 > 代码库 > linux系统命令进阶

linux系统命令进阶

1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

cp -a /etc/group /home/tuser1
chown -R o-rwx /home/tuser1

2、编辑/etc/group文件,添加组hadoop。

新建方法了解到的有如下两种
例子1:
echo "hadoop:x:2024:" >> /etc/group
例子2:
group hadoop

下面这种的创建方式,相对比较常见,具体看个人操作习惯

3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

这里也提供两种新建的方法:

例子1:
echo "hadoop:x:2020:2026::/home/hadoop:/bin/bash"
例子2:
useradd hadoop

讲解:默认创建的用户都会在/home目录下面,默认/bin/bash/下的用户都允许登录系统,如果需要拥有最大的超级管理员权限,只需要将ID号修改为0:0即可。


4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

[root@bogon ~]# cp  -a /etc/skel /home/hadoop 
[root@bogon ~]# chmod go-y /home/hadoop
[root@bogon hadoop]# su hadoop
bash: /home/hadoop/.bashrc: Permission denied
bash-4.2$

根据上面操作,hadoop,就没有访问家目录的权限了

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

chown -R hadoop.hadoop /home/hadoop || chown -R hadoop:doop /home/hadoop

上面两种操作方式都可以执行的,5系列的大部分都是使用前者,后者由于没有环境是否也可行,暂时未知,下次有机会试验,再补上。

6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

案例1
[root@bogon hadoop]# grep "^[sS]" /proc/meminfo 
案例2
[root@bogon hadoop]# cat /proc/meminfo |grep -i "^s"

讲解:关于这里其实不需要使用管道符号也是可以的 “|” ,在工作中,我们难免需要用到管道符,在写匹配的时候能尽量不用管道最好不用,加多一道管道,意味着需要增加资源的损耗。具体看个人习惯以及需求而定。


7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

[root@bogon hadoop]# grep "/bin/nologin" /etc/passwd

8、显示/etc/passw d文件中其默认shell为/bin/bash的用户;

[root@bogon hadoop]# grep "/bin/bash" /etc/passwd

9、找出/etc/passwd文件中的一位数或两位数;

grep -o "[0-9]\{1,2\}" /etc/passwd

10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

grep "^[[:space:]]" /boot/grub/grub.conf

11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

[root@bogon hadoop]# grep "^#[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit

12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

[root@bogon hadoop]# netstat -lan | grep "LISTEN[[:space:]]\+$"

参数介绍:
a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

[root@bogon hadoop]# useradd bash
[root@bogon hadoop]# useradd testbash
[root@bogon hadoop]# useradd basher
[root@bogon hadoop]# useradd nologin -s /sbin/nologin
[root@bogon hadoop]# grep "^\(\<[[:alpha:]]\+\>\).*\1$" /etc/passwd

总结:

本章用的最多的就是grep的命令例子了,主要是配合正则去匹配题目上要求的结果,这里对grep的一些高级用法,在下面列举一下。

励志话语:烂木头,如果现在努力了,后面就是甘泉,如果现在不努力,后面将是,噩梦的开始。


grep


一.匹配字符

.    匹配任意单个字符
[ ]  匹配指定范围内的任意字符
[^]  匹配飞指定范围内的任意字符
[:alpha:] 字母字符
[:lower:] 小写字母字符
[:upper:] 大写字母字符
[:digit:] 数字
[:alnum:] 字母数字字符
[:space:] 空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符
[:punct:] 标点字符
[:cntrl:] 控制字符(禁止打印)
[:print:] 可打印字符
使用时一般使用两个中括号,具体会在下面的例子中使用。


二.匹配次数

*      匹配前面的字符任一次
.*    匹配任意长度的任意字符(注意贪婪模式,比如  grep  “r.*t” /etc/passwd  )
x\{m,n\}  指定前面的字符至少出现m次,至多出现N次。
x\{m,\}    指定前面的字符至少出现m次
x\{0,n\}  指定前面的字符至多出现N次
x\{m\}    精确匹配m次
?        匹配其前面的字符0或1次


三.锚定符

1.^  锚定行首    grep  "^r..t"  /etc/passwd
2.$  锚定行尾    grep  "h$"  /etc/passwd
3.^$ 锚定空白行  grep  "^$"  /etc/passwd
4.\< (\b)  锚定词首    grep  "\<r..t"  /etc/passwd
5.\> (\b)  锚定词首    grep  "r..t\>"  /etc/passwd
示例(容易混淆):
至少包含一个空白字符          grep  "[[:space:]]\{1,\}"  /etc/passwd
至少包含一个非空白字符        grep  "[^[:space:]]\{1,\}"  /etc/passwd
没有一个空白字符              grep  -v "[^[:space:]]\{1,\}"  /etc/passwd
6.\(\)对字符分组  grep  "\(l..e\).*\1r"
示例:
grep --color "l\([13]\):\1:.*:\1"  /etc/inittab


四.选项

-v:对结果取反
-i:忽略字母大小写
-o:仅显示匹配到的字符串(行的其他内容不显示)
-E:支持扩展的正则表达式
-A:显示匹配到的行下面n行
-B:显示匹配到的行上面n行
-C:显示匹配到的行上下面各显示n行
-E:扩展正则表达式egrep
-F:一个换行符分隔的字符串的集合fgrep
-G:基本正则
-P:调用的perl正则
-e:后面根正则模式,默认无
-f:从文件中获得匹配模式
-i:不区分大小写
-w:匹配整个单词
-x:匹配整行
-z:一个 0字节的数据行,但不是空行





本文出自 “屋檐下的思考” 博客,请务必保留此出处http://wuyanxxk.blog.51cto.com/4130666/1843525

linux系统命令进阶