通过Linux工具对本主机的文件/etc/passwd进行文本处理,步骤如下:删除以 nologin 结尾的行,将剩余部分另存为文件a,并加上行号; 将文件a中所有的普通用户名输出到屏幕,并存入文件b中,注意:只要用户名,其它信息不要输出及保存。(UID>=1000为普通用户);将文件a中的所有普通用户,设置为登录后自动启动vim(路径为/bin/vim),并保存; 展示文件a中的所有普通用户中的UID。要求:输出用户名:UID的格式(eg. zgl1:1002)。
时间: 2024-03-22 19:41:38 浏览: 20
好的,我将逐步回答您的问题。
1. 删除以 nologin 结尾的行,将剩余部分另存为文件a,并加上行号:
```
sed '/nologin$/d' /etc/passwd | nl > a
```
2. 输出文件a中所有普通用户名,并存入文件b中:
```
awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' a > b
```
3. 将文件a中的所有普通用户设置为登录后自动启动vim,并保存:
```
awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' a | xargs -I{} chsh -s /bin/vim {}
```
4. 展示文件a中所有普通用户的UID:
```
awk -F: '$3 >= 1000 && $3 < 65534 {print $1":"$3}' a
```
希望这些命令和解释对您有所帮助。
相关问题
linux 从/etc/passwd文件中删除以bash为结尾的行
你可以使用`grep`命令过滤出符合条件的行,并使用重定向符号`>`将结果输出到一个新的文件中,覆盖原文件。具体命令如下:
```shell
grep -v '/bin/bash$' /etc/passwd > /etc/passwd.new && mv /etc/passwd.new /etc/passwd
```
上述命令中,`grep`命令用于过滤掉以`/bin/bash`结尾的行,`-v`选项表示反向匹配,即排除匹配到的行。`/etc/passwd`是需要过滤的文件名,`>`符号用于将过滤结果输出到一个新文件`/etc/passwd.new`中,`&&`符号用于将两个命令连接起来,表示当第一个命令执行成功时才执行第二个命令。最后,使用`mv`命令将新文件覆盖原文件。执行以上命令后,`/etc/passwd`文件中以`/bin/bash`结尾的行将被删除。
过滤/etc/passwd 以nologin结尾的行
过滤/etc/passwd以nologin结尾的行可以使用grep命令。具体命令如下:
```
grep ".*:.*:.*:.*:.*:nologin$" /etc/passwd
```
该命令中,grep表示过滤命令,".*:.*:.*:.*:.*:nologin$"表示以nologin结尾的行,/etc/passwd表示要过滤的文件路径。执行该命令后,会输出所有以nologin结尾的行。