第四天
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