Linux运维命令以及概念整理总结(2)

1、tr 命令
2、单行重定向,多行重定向
3、管道 | 、 |tee
4、新增用户、用户组管理,以及用户权限管理

第四天

 

 

1、tr命令

tr 转换和删除字符

tr set1 set2

选项:

-c –C –complement:取字符集的补集

-d –delete:删除所有属于第一字符集的字符

-s –squeeze-repeats:把连续重复的字符以单独一个字符表示

-t –truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

\n 换行 \r 回车  \t tab \v 垂直版tab

 

tr ‘a-z’ ‘A-Z’

等待你输入: 如 abcde

则显示 ABCDE

 

tr ‘abcd’ ‘1234’

asdfasdf

1s4f1s4f

 

tr ‘a-z’ ‘A-Z’ < anaconda-ks.cfg > f1.log

意思就是把文件anaconda-ks.cfg内容输入到tr然后通过tr把内容中的小写字母转换成大写字母在输出到文件

f1.log

 

tr ‘abcd’ ‘1234’

abcdef

1234ef

 

tr ‘abc’ ‘1234’

abcdef

123def

 

tr -d ‘abc’

abdfabxxc

dfxx

 

tr -dc ‘abc’   对’abc‘取反然后删除

23423aabc3sff

必须按CTRL+D才显示

aabc

 

tr -s ‘abc’     连续重复的字母压缩成一个

aaaaabbbbaaaaccccdddd

abacdddd

 

在windows中建立文件win.txt 内容为

a

b

c

 

在linux中显示为abc怎么转换成正确格式?

\r就是return回车的意思

通过hexdump -c打开文件发现比linux文件多了0d通过ASC表发现0d为10进制13代表回车

 

tr -d ‘\r’ < win.txt > win3.txt

cat win3.txt

a   b       c

把多个空格压缩成一个空格

tr -s ‘ ‘ < win3.txt

a b c

 

tr -s “ “ :df.log

把df.log中的空格压缩成一个并把空格替换成:号

 

 

2、单行重定向<,多行重定向<<

 

单行重定向 <

tr ‘a-z’ ‘A-Z’ > /etc/issue

该命令会把/etc/issue中的小写字符都转换成大写字符

tr -d abc < /etc/fstab删除fstab文件中的所有abc中任意字符

 

 

多行重定向《自己喜欢的任意词例如END 有时称为就地文本(heretext)

 

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

 

cat >f2 <<E

>hh

> dj…

>E 才结束 而且E必须单行而且不能有空格

 

3、管道 | 、 |tee

 

 

管道   |

 

cmd1|cmd2

cmd1的标准输出做为cmd2的标准输入,相互利用

hostname|tr ‘a-z’ ‘A-Z’

CENTOS7.MAGEDU.COM

hostname | tr ‘a-z’ ‘A-Z’ | tr -d ‘.’

CENTOS7MAGEDUCOM

 

如果不能保证cmd1中的内容正确例如不存在/error但是也想把错误内容输入则

ls /boot /error 2>&1 | tr ‘a-z’ ‘A-Z’

或者

ls /boot /error |& tr ‘a-z’ ‘A-Z’

 

df | tr -s ‘ ‘ ‘;’

替换df下空格为;

 

计算1+2+3…100

echo {1..100}|tr ‘ ‘ + |bc

seq -s + 100|bc

5050

 

 

重定向到多个目标 tee

 

ls | tee ls.log

即写入文件还在屏幕显示结果

ls | tee -a ls.log

在ls.log里追加ls显示结果

如果同时想把ls.log里面内容换行删除可以

ls | tee -a ls.log | tr -d ‘\n’

 

注意:左边命令必须有标准输入 右边命令必须有标准输出

echo abcdef | tr ‘abcd’ ‘xyz’

xyzzef

 

 

练习

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

3、一个linux用户给root发邮件,要求邮件标题为”help” ,邮件正文如下:

Hello, I am 用户名,The system version is here,please help me to check it ,thanks!

操作系统版本信息

4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开

5、计算1+2+3+..+99+100的总和

6、删除Windows文本文件中的‘^M’ 字符

7、处理字符串“ xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格

8、将PATH变量每个目录显示在独立的一行

9、 将指定文件中0-9分别替代成a-j

10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立的一行,并无空行

 

练习答案

1.tr ‘[:lower:]’ ‘[:upper:]’ < /etc/issue > /tmp/issue.out

2.who | tr ‘[:lower:]’ ‘[:upper:]’ > /tmp/who.out

3.mail -s “help” root <<END

Hello,I am $USER,The system version is here , please help me to check it ,thanks !

OS version: lsb_release -a

END

4.ls /root | tr ‘\n’ ‘ ‘

5.echo {1..100} | tr ‘ ‘ ‘+’ |bc

6.tr -d ‘\r’ < win.txt > win4.txt

7.echo ‘xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4’ | tr -dc ‘[:digit:][:space:]’

8.echo $PATH | tr ‘:’ ‘\n’

9.tr ‘0-9’ ‘a-j’ < /data/1

10.tr -dc ‘[:alpha:][:space:]’ < /etc/centos-release | tr -s ‘ ‘ ‘\n’

 

 

4、新增用户、用户组管理,以及用户权限管理

 

安全机制3A

Authentication 认证

Authorization 授权

Accouting|Audition 审计

令牌token,identity

登陆成功才会发token

如果想访问file则系统根据你的token判断你是否有权限访问file

系统用户就是服务进程之类的不是普通用户都是软件

linux创立一个用户名同时会创立一个同名用户组

用户能不能访问此文件不是由进程决定的,而是由此用户的安全上下文决定的

安全上下文context(运行此程序的用户身份,用户组身份)

wang g1 read g2 write g3 read 累加权限 read write

主要组primary group

一个账号必须属于一个组且只有一个主组组名同用户名,且仅包含一个用户,私有组当然也可以是现有组

附加组supplementary group

一个用户可以属于0个或多个附加组

Linux安全上下文

运行中的程序:进程 (process)

以进程发起者的身份运行:

root: /bin/cat

mage: /bin/cat

进程所能够访问资源的权限取决于进程的运行者的身份

 

id命令查名和主组

 

主要配置文件

/etc/passwd:名称UID 主组ID

/etc/group:组及其属性信息

/etc/shadow:用户密码及其相关属性

/etc/gshadow:组密码及其相关属

 

用命令打开后再用cat /etc/passwd就可以看到加密密码一般不推荐

pwunconv 显示加密密码

pwconv 不显示加密密码

注意

如果系统没有管理员则会变成无法启动!!

 

/etc/passwd 格式为

login name:passwd:UID:GID:GECOS:home directory:shell

添加GECOS描述信息

chfn wan

Name []:wanchangqiang

Office []: IT

Office Phone []:10086

Home Phone []:10000

 

finger wang

finger

查用户信息

6需要安装

 

系统创建账号一般是从/etc/skel下拷贝标准配置

cp -r /etc/skel/.[^.]*  /data/max

 

改max的shell为/bin/csh

chsh -s /bin/csh wang

 

想让max账号没法登陆

chsh -s /sbin/nologin max 则max没法登陆

 

/etc/shadow

让用户密码立即过期,登陆时必须改密码

passwd -e max

等价于

chage -d 0 max

 

查max账户的密码修改相关信息

chage -l max

修改max账号的密码相关信息

chage max

如果希望所有新建的账户密码有效期统一为42天则可以直接修改配置文件

cat /etc/login.defs

 

例如创建账号Max

useradd Max

passwd Max

不然Max账户无法登陆

 

查看创建账号时的各种配置文件生成的地方

cat /etc/default/useradd

 

UID范围只是系统默认的范围,可以人为超越这个范围

 

系统创建用户默认都是从/etc/skel/文件夹下复制初始配置文件到新用户的文件夹下的

所以如果想新用户带有别的文件可以直接往/etc/skel目录加文件

 

如果有新员工A进入公司想让他直接用已离职的B员工的用户权限,可以直接修改B员工用户名为A,再要求

A修改密码即可

就是进入/etc/passwd和/etc/shadow还有修改家目录/home/B的文件夹直接修改用户名A即可

新建用户的相关文件

/etc/default/useradd

/etc/skel/*

/etc/login.defs

 

更改加密算法

authconfig –passalo=sha256 –update 默认sha512 改成sha256

实际上是修改了一个文件/etc/login.defs

 

单向加密:哈希算法

md5

sha1

sha224

sha256

sha384

sha512

 

 

修改默认创建用户时会用的配置可以用命令

cat /etc/default/useradd 可以查各种用户信息

useradd -D

useradd –D -s SHELL

useradd –D –b BASE_DIR

useradd –D –g GROUP

 

单个用户增加

useradd name

 

group

/etc/group文件里最后的是用户的附加组往里面加人可以把这些人也加到这些附加组里面

 

关于组group的信息

/etc/group /

/etc/gshadow/

注意必须保持两个文件里面的组成员信息相同,否则会出现命令异常的状况!!

 

给Max组加密码

gpasswd Max

 

newgrp 临时切换主组  例如

newgrp Maxi

就是Max的主组切换为Maxi

如果用户本不属于此组则需要知道口令

 

vipw = vi /etc/passwd     vi相对于nano有语法检查功能

改完之后运行

pwck可以检查报警

同理

vigr = vi /etc/group

grpck

 

如果id超了范围则下一个建立账户就跟回原来的下一个id号

如果id没有超上限则会按照上一个创建的id下一个

生产中一般管理多台机子,都会指定id号这样方便管理

 

如果原来id号已经存在,还要强行建立相同id号的账号则用

useradd -ou 2000 name

一般不推荐这么做

 

useradd -G bin,root -s /bin/csh -c “Gentoo Distribution”

 

如果要指定账户uid,则uid范围可以人为超过指定范围

useradd -u 66666 xixi

 

getent passwd xixi

只看/etc/passwd下与xixi相关的那行

 

新建账号boy让他的主组属于已存在组Maxi则

useradd -g Maxi boy

 

创建一个账户Max ,并添加附加信息hi

useradd -c hi Max

 

创建一个新账号Max,让他的默认家目录在/data/Max则

useradd -d /data/Max Max

 

创建一个新账号nginx 让它成为一个系统账号同时设置shell类型为/sbin/nologin

useradd -s /sbin/nologin -r nginx

 

创建一个新账号openstack 让它成为一个系统账号同时设置shell类型为/sbin/nologin同时为他设置家目录

useradd -s /sbin/nologin -r -m openstack

 

创建一个用户Max,同时不创建他的家目录则

useradd -M Max

 

创建一个用户Max,同时让他加入附加组app1,app3则

useradd -G “app1,app3” Max

 

创建Maxi用户,并使用户所属组为users则

useradd -N Maxi

 

删除Max用户同时删除其家目录

userdel -r Max

 

创建时邮箱信息放在/var/spool/mail下用userdel -r 会一起删除其存放的用户信息

 

练习

 

1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为

“Gentoo Distribution”?

2、创建下面的用户、组和组成员关系

名字为webs 的组

用户nginx 使用webs 作为附属组

用户varnish,也使用webs 作为附属组

用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish,mysql密码都是magedu

 

答案

1、useradd -G bin,root -s /bin/csh -c “Gentoo Distribution” gettoo

2、

1)groupadd webs

2)useradd -G webs nginx

3)useradd -G webs varnish

4)useradd -r -s /sbin/nologin mysql

5)echo magedu > passwd –stdin nginx

echo magedu > passwd –stdin varnish

echo magedu > passwd –stdin mysql

 

给mage组加密码则

gpasswd mage

Max账号加入到mage组做为其主组则

newgrp mage

如果需要批量创建用户或者批量迁移用户例如把文件从centos7迁移到centos6

可以先创建/datd/userlist.txt然后把/etc/passwd里面需要迁移的用户内容拷贝进文件里面注意重复的用户

必须删除,然后执行。

 

先执行远程拷贝命令scp

scp userlist.txt 192.168.30.100:/data(此为centos6 ip)

如果没有写目录默认就是在/root下

然后按yes,之后输入对方密码就能传文件

newusers /data/userlist.txt 按照/data/userlist.txt批量创建用户

chpasswd 批量修改用户口令

批量修改口令可以直接创建一个文本pass.txt内容为

app1:redhat

app2:oopp

app3:abc

app4:abc

app5:redhat

然后执行

cat pass.txt | chpasswd

 

usermod

对于已有用户需要修改用户信息则可以用usermod命令

 

用户Max加入到附加组root并不覆盖原有附加组bin则用

usermod -aG root Max

 

如果想要Max不属于任何附加组则

usermod -G “” Max

 

如果想修改用户名Max为Maxi则

usermod -l Maxi Max

但是家目录还是没改的需要手动更改

默认用户邮箱目录 /var/spool/mail/

 

 

 

删除用户userdel

userdel -r 删除用户名和用户目录

不过一般工作中不用-r以防万一需要用旧用户里面的数据

 

删除组用groupdel

但是当一个组是某个用户的主组的时候此组不能删除例如,存在用户Max则

groupdel Max

无法执行,因为他是用户Max的主组,如果附加组则可以直接删除

如果想删除组Max那么需要先指定用户Max的主组为其他组,让他不成为任何一个用户的主组,然后执行

删除

 

useradd  usermod userdel

-u

-r                  -r

-s

-d

-c

-g

-G

 

id命令

-u

-g

-G

-Gn

 

一般创建用户之前都用id命令先判断是否存在此用户才执行创建

 

id Max

 

su切换用户

 

su Max

为不完整切换身份切换环境信息不切换

 

su – Max

为完全切换身份切换环境信息也切换

 

在生产环境中,推荐先用普通账户登陆等需要执行一些高级操作才切换到root比较安全

 

从当前账号Max切换到root以执行cat /etc/shadow完成后再退回Max账号

su – root -c ‘cat /etc/shadow’

注意:每次执行完切换系统会有切换记录,尽量少切换,每次切换完用exit不然会有很多奇怪错误

在生产环境中,需要创建特定的gid和uid相同的账号的时候可以通过以下方法创建,例如创建id为1234的

nginx账号:

groupadd -p 1234 nginx

useradd -g nginx -u 1234 nginx

 

更改组的口令用gpasswd

gpasswd -a user group1 将用户添加到指定组

gpasswd -d user group1从指定组中移除用户user

gpasswd -A user1,user2… 设置有管理权限的用户列表例如

gpasswd -A Max g1

 

查询某个组里的成员有谁用groupmems

groupmems -l -g groupname

在某个组里加人

groupmems -a username -g groupname

在某个组里删人

groupmems -d username -g groupname

查看账号属于哪个组

groups username

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95930

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班