第四天标准IO和管道
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四天标准IO和管道相关的知识,希望对你有一定的参考价值。
1、[[email protected] ~]#cmd &> all.log(把输出与错误信息都放到all这个文件里面)[[email protected] ~]#cmd >all.log 2>&1(把错误信息都放到输出里面,这样输出就有输出与错误)
[[email protected] ~]#cdm 2>all.log 1>&2(把输出信息放到错误的里面,这个错误的信息就有输出与错误)
[[email protected] ~]#cmd &>all.log;
cmd >all.og 2>&1;
cmd 2>all.log 1>&2;(上面这三个效果是一样的)
2、tr(命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。)(替换与转换)
-c 取字符集的补集
-d 删除所有属于第一字符集的字符
-s 把连续重复的字符以单位一个字符表示
-t 将第一个字符集对应字符转化为第二字符集对应的字符
tr 转换和删除字符
tr [OPTION]... SET1 [SET2]
选项:
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符
[:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母
[:xdigit:]:十六进制字符
[[email protected] ~]#tr ‘a-z‘ ‘A-Z‘(比如这个我要把第一行的所有字符转换为大写的字符)
buqbdwegqwduqwdhFYFIVYFYF345
BUQBDWEGQWDUQWDHFYFIVYFYF345
[[email protected] ~]#tr ‘a-z‘ ‘A-Z‘ <file.log(就是把file.log的文件里面的字母都转换成大写)
[[email protected] ~]#tr ‘abc‘ ‘1234‘(转换只是按照原abc转虽然有1234但是对应的4却没有目标所以忽略不转)
abcdef
123def
[[email protected] ~]#tr -d ‘abc‘(使用d命令把有abc的字符给删除了)
abdfabxxc
dfxx
[[email protected] ~]#tr -dc ‘abc‘(除了abc其他的都删除,取反的意思,输入后按ctrl+D结束)
abcssiedf123
abc[[email protected] ~]#
<我是刚刚做了实验的,有输出的功能,但是必须要有文件才能输出,如:
touch eee ; echo "asdf" < eee
输出就是asdf,但是文件eee中无内容
<的确挻奇怪的,不往文件里写东西,但是在使用的时候必须要有一个已存在的文件名才行
[[email protected] data]#tr -s ‘‘ < df.log(将多余的空格替换)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[[email protected] data]#tr -s ‘ ‘ < df.log(可以看一下替换的结果但没有写入)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[[email protected] data]#cat df.log
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 52403200 4648016 47755184 9% /
devtmpfs 583452 0 583452 0% /dev
tmpfs 599340 0 599340 0% /dev/shm
tmpfs 599340 9944 589396 2% /run
tmpfs 599340 0 599340 0% /sys/fs/cgroup
/dev/sda3 31441920 33048 31408872 1% /data
/dev/sda1 1038336 157924 880412 16% /boot
tmpfs 119872 40 119832 1% /run/user/0
[[email protected] data]#tr -s ‘ ‘ ‘:‘ < df.log(可以看一下替换的结果但没有写入)
Filesystem:1K-blocks:Used:Available:Use%:Mounted:on
/dev/sda2:52403200:4648016:47755184:9%:/
devtmpfs:583452:0:583452:0%:/dev
tmpfs:599340:0:599340:0%:/dev/shm
tmpfs:599340:9944:589396:2%:/run
tmpfs:599340:0:599340:0%:/sys/fs/cgroup
/dev/sda3:31441920:33048:31408872:1%:/data
/dev/sda1:1038336:157924:880412:16%:/boot
tmpfs:119872:40:119832:1%:/run/user/0
3、多行重定向
[[email protected] data]#ls
a a.bak df.log dir dir1 err.log fa fA fb fB fc fC fd fD fe ls.out nginx nginx-1.12 nginx-1.13
[[email protected] data]#cat > a <<E(多行重定向一定要是<<这个名字比如叫E那么结束的时候一定要也是E)
haha
hudqw
snxqw
snxhqwd
wiqdhowqd
wdiqwdo
wdqowd
wdioqwd
E
[[email protected] data]#cat a
haha
hudqw
snxqw
snxhqwd
wiqdhowqd
wdiqwdo
wdqowd
wdioqwd
[[email protected] data]#
[[email protected] data]#tr ‘[:lower:]‘ ‘[:upper:]‘ <<EOF
abdc
wdeded
edfwef
wdqwe
EOF
ABDC
WDEDED
EDFWEF
WDQWE
[[email protected] data]#
4、多重定向发邮件mail
[[email protected] data]#mail -s ‘hello‘ guoguo(主题是hello,使用.(点击.回车就结束写文件了)来结束,遇到删除显示格式不对,用ctrl+删除)
nishishui
who are you
.
EOT
我在guoguo电脑输入mail就能看到邮件了(ctrl+D结束看)
[[email protected] data]#mail -s ‘hello‘ guoguo <<EOF(使用多重定向的方式发邮件)
nihao
hello
hahah
EOF
[[email protected] data]#cat > mail.txt
nihhao
hahah
lalal
[[email protected] data]#cat mail.txt
nihhao
hahah
lalal
[r[email protected] data]#mail -s ‘hello‘ guoguo <mail.txt(通过这样的重定向方式我就能把之前写好的邮件直接发送了)
[[email protected] file]#rm -f /var/spool/mail/guogu(删除guoguo的所有邮件)
5、管道(标准输出|左边的标准输出作为标准输入)(工作用的非常多)
[[email protected] data]#hostname | tr ‘a-z‘ ‘A-Z‘(这个写法的技术就是把hostname的内容输出的结果通过tr命令在一次执行)
CENTOS7.MAGEDU.COM
[[email protected] data]#hostname | tr ‘a-z‘ ‘A-Z‘ | tr -d ‘.‘(这个写法的技术就是把hostname的内容通过tr命令在一次执行在一次执行)
CENTOS7MAGEDUCOM
[[email protected] ~]#cat mail.txt | mail -s ‘hello‘ guoguo(邮件的写法也可以用重定向)
[[email protected] data]#ls /boot/error |& tr ‘a-z‘ ‘A-Z‘(这种写法就是不管/boot/error这个报错不,都把错的信息与输出信息进行转换)-----------------------------------------------(新机器)
[[email protected] ~]#ls /boot /error 2>&1 | tr ‘a-z‘ ‘A-Z‘(这种写法就是不管/boot/error这个报错不,都把错的信息与输出信息进行转换)-----------------------------------------------(老机器)
LS: CANNOT ACCESS /ERROR: NO SUCH FILE OR DIRECTORY
/BOOT:
CONFIG-3.10.0-957.EL7.X86_64
EFI
GRUB
GRUB2
INITRAMFS-0-RESCUE-EDDE23332C5E49F4B9D77052AE63DC7A.IMG
INITRAMFS-3.10.0-957.EL7.X86_64.IMG
SYMVERS-3.10.0-957.EL7.X86_64.GZ
SYSTEM.MAP-3.10.0-957.EL7.X86_64
VMLINUZ-0-RESCUE-EDDE23332C5E49F4B9D77052AE63DC7A
VMLINUZ-3.10.0-957.EL7.X86_64
[[email protected] data]#echo {1..100}(计算1-100的总和)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[[email protected] data]#echo {1..100} | tr ‘ ‘ + |bc
5050
[[email protected] data]#seq -s + 1 100 |bc(或者是这个命令)
5050
[[email protected] data]#ls | tee ls.log(tee命令可以显示与放入重定向的文件内)----------------------------------
a
a.bak
df.log
dir
dir1
err.log
fa
fA
fb
fB
fc
fC
fd
fD
fe
ls.out
mail.txt
nginx
nginx-1.12
nginx-1.13
[[email protected] data]#ls | tee -a ls.log(加-a就是是在一次输入就可以追加了)
[[email protected] data]#ls
a a.bak df.log dir dir1 err.log fa fA fb fB fc fC fd fD fe ls.log ls.out mail.txt nginx nginx-1.12 nginx-1.13
[[email protected] data]#cat ls.log
a
a.bak
df.log
dir
dir1
err.log
fa
fA
fb
fB
fc
fC
fd
fD
fe
ls.out
mail.txt
nginx
nginx-1.12
nginx-1.13
[[email protected] data]#ls | tee -a ls.log(加上-a这个命令就是追加,不会被覆盖了之前操作过的的命令就不会被覆盖)
[[email protected] ~]#tr ‘[:lower:]‘ ‘[:upper:]‘ < /etc/issue > /tmp/issue.out (将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out)
[[email protected] ~]#who | tr ‘[:lower:]‘ ‘[:upper:]‘ > /tmp/who.out(将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件夹中)
系统的用户名可以用这个变量显示:[[email protected] ~]#echo $USER
root
[[email protected] ~]#lsb_release -a(先安装先安装lsb
命令是yum install lsb)
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core
练习题
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
tr ‘a-z‘ ‘A-z‘ < /etc/issue > /tmp/issue.out(老师)
[[email protected] ~]#cat /etc/issue | tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out(我)
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
[[email protected] ~]#who | tr ‘a-z‘ ‘A-Z‘ >/tmp/who.out
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it ,thanks!
操作系统版本信息
[[email protected] ~]#mail -s help root <<end
hello I am $USER ,The system version is here,please help me to check it ,thanks!
os:lsb_release -a
end
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
[[email protected] ~]#ls | tr ‘\n‘ ‘ ‘
5、计算1+2+3+..+99+100的总和
[[email protected] ~]#echo {1..100} | tr ‘ ‘ + |bc
6、标准输入的命令--------------------------------------
cat,tr,mail,bc
7、[[email protected] ~]#openssl rand -base64 12(随机生成12位的字符)
oRYrg0oSfP7qtKrM
8、[[email protected] ~]#touch openssl rand -base64 12 |tr -dc ‘[:alnum:]‘ |tr ‘[:upper:]‘ ‘[:lower:]‘
(创建一个随机的文件名)
9、3A
认证,授权,审计
用户user
令牌token,identity
linux用户:username/UID
管理员:root,0
普通用户:1-65535
系统用户:1-499(6),1-999(centos7)对守护进程获取资源进行权限分配
登录用户:500+(6),1000+(centos7)交互式登录
组group
windows查看用户名称cmd(net user),查看组(net localgroup)
linux组:Groupname/GID
管理员组:root,0
普通组:
系统组:1-499,1-999(centos7)
普通组:500+,1000+(centos7)
windows不允许组名与用户名同名,linux可以
进程所能够访问资源的权限取决于进程的运行者的身份
linux如果guoguo这个用户,分别都在三个组里面都有,那么guoguo的权限就是三个组加起来的权限
[[email protected] ~]#ll(下面的两个root表示的是左边第一root是root用户创建的a,第二个root表示的意思就是所属的是这个root组)
total 1944
-rw-r--r--. 1 root root 0 Dec 3 01:31 a
用户和组的配置文件
linux用户的组的主要配置文件
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
echo $SHELL(当前用户用的shell类型)
cat /etc/shells(shell类型所有种类)
chsh -s /bin/csh guoguo(更改用户bash类型为csh)
nologin的shell类型给服务类型用的就是不能登陆
su - guoguo切换用户为guoguo登陆
openssl rand -base64 9(9位字符的口令随机命令)
getent passwd guoguo=cat /etc/passwd(查看guoguo的passwd的信息,区别在于加了一个guoguo指定的)
/etc/default/useradd(创建用户的时候参数就是这个参数决定的)
[[email protected] file]#cat /etc/default/useradd
useradd defaults file
GROUP=100(如果特意不指定guoguo组,就指向这个组)
HOME=/home(家目录的路径)
INACTIVE=-1(账户过期后的有效期)
EXPIRE=(默认过期时间)
SHELL=/bin/bash(默认创建时用的就是bash)
SKEL=/etc/skel(创建用户的home就是从这个文件夹复制的)
CREATE_MAIL_SPOOL=yes(mail默认就是创建的)
useradd guoguo(创建账号guoguo,adduser其实是useradd的软链接)
tcpdump:!!:17877::::::(两个!!是锁定账号的,其实有一个!就是锁定的意思)
usermod -U guoguo(解锁,在运行一次就彻底解锁了)
usermod -L guoguo(加锁)(虽然guoguo不能登陆了,但是用su切换账号是可以的)
生产中如果us1离职他的权限要给一个叫sd1的人,就可以用nano进去1、/etc/passwd/与/etc/shadow去修改
最后2、[[email protected] ~]#ll /home(修改最后的guoguo叫sd1)
total 0
drwx------. 5 guoguo guoguo 128 Dec 13 20:18 guoguo
/etc/passwd/用户及其属性信息(名称、UID、主组ID等)(内容如下)
默认口令是加密的,可以用pwunconv这个命令显示加密文件(老版本)
name:password:UID:GID:GECOS:directory:shell
名称:密码:UID:GID:GECOS:目录:壳
该领域如下:
name这是用户的登录名。它不应该包含大写字母。
password这是加密的用户密码,星号(*),或字母“x”。(见pwconv (8)
,以解释“x”。)
UID特权根登录帐户(超级用户)的用户ID为0。
GID这是该用户的数字主组ID。(为用户定义了其他组
在系统组文件中;看到组(5))。
GECOS这个(描述字段)字段(有时称为“评论字段”)是可选的,仅用于提供信息
姿势。通常,它包含完整的用户名。一些程序(例如手指(1))显示
来自这个领域的信息。
GECOS是“通用电气综合操作系统”的缩写,在GCOS诞生时更名为GCOS
通用电气的大型系统部门被出售给霍尼韦尔。丹尼斯?里奇(Dennis Ritchie)曾说过:“有时我们会
将打印机输出或批处理作业发送到GCOS机器。密码文件中的gcos字段是a
放置$IDENTcard的信息。不优雅。”
chfn guoguo(加描述信息)
finger guoguo(查看描述信息)(rpm -ivh 路径Packages/finger-.....)(安装finger的光盘)
directory这是用户的主目录:“用户登录后放置的初始目录
在”。该字段中的值用于设置HOME环境变量。
系统创建用户的时候,默认会创建这个用户的家目录home,但是系统文件都是从/etc/skel的隐藏文件拷贝的
cp -r /etc/skel/.[^.]* /data/home
shell这是在登录时运行的程序(如果为空,请使用/bin/sh)。如果设置为不存在的可执行文件,
用户将无法通过登录(1)登录。该字段中的值用于设置
SHELL环境变量。
/etc/shadow:用户密码及其相关属性
passwd -e guoguo(立即让用户口令失效,登录改口令,要输一次旧口令,在输入两次新口令)
chage -l guoguo(查看用户口令情况)
Last password change : never最后一次密码更改:永远不会
Password expires : never密码过期:从未过期
Password inactive : never非活动密码:从不
Account expires : never帐户过期:从未过期
Minimum number of days between password change : 0密码更改之间的最短天数:0
Maximum number of days between password change : 99999密码更改之间的最大天数:99999
Number of days of warning before password expires : 7密码过期前的警告天数:7
chage guoguo(如果被失效了,可以用交互式的提示加入)
/etc/login.defs(修改默认创建用户密码配置文件,默认时间是42比如)
[[email protected] ~]#cat /etc/shadow(用户密码及其相关属性)(内容如下)
guoguo:$6$iydIhmiHWFpOih2p$E4DflEwrAi9OO6VmUGXjlIIiTeyziOKrvbF5XIJ6PNOMgZz8qLs4U.14KaFgZHOZZUJsXXMNj83tDLHjOQVc3/::0:99999:7:::
$1=md5(128位bit)
$6=sha512(512位bit)
更改加密算法:authconfig --passalgo=sha256 --update
iydIhmiHWFpOih2p$如果口令一样,是因为加salt(盐)所以加密方法不一样。
:这里应该是更新了,这原来是放时间的:0
echo date +%s
/3600/24 |bc(能算出来时间)
3/::0:这里的0就是随时改口令,命名3就是3天内不能改口令
(普通用户输入passwd直接改)
99999:是多少天之后口令就过期了
nano就可以更改/etc/shadow
chage guoguo 这个需要填写几个
7:就是提前7天通知你口令过期
99999:7:@: @就是表示口令过期后还可以用多长时间
99999:7:@:&: &就是表示账户的有效期(比如创建一个临时账号)
/etc/group:组及其属性信息(内容如下)
linux必须有一个主组,(windows可以不属于组,默认是user)
比如:guoguo:x:1000:guoguo
guoguo:组名
x:组口令
1000:组ID
guoguo:最后的guoguo就是组的成员附加组,如果有多个用,分隔,他们把guoguo当作附加组
[[email protected] file]#groups guoguo(这个命令是看guoguo是怎么看组)
guoguo : guoguo(第一个guoguo是主组,第二个guoguo是附加组,如果还有就还是附加组,我发现每一个账号都有一个同名的主组与附加组)
/etc/gshadow:组密码及其相关属性(内容如下)(默认不建议加口令,默认就是关闭)br/>guoguo:!!::guoguo(默认组密码是关闭的)
guoguo:第一个guoguo是组名
!!:禁止使用口令登陆
!!:@:guoguo:@谁是组长,多个组长用逗号隔开
后面的guoguo与/etc/group后面的guoguo是同步的(谁是属于这个组,作为附加组)
gpasswd guoguo(给guoguo这个组加口令)
newgroup guoguo(就是加入guoguo这个组,并且让guoguo作为主组,需要输入组密码)
文件操作:
vipw=vi /etc/passwd(pwck检查这个格式)
vigr=vi /etc/group(grpck检查)
用户和组管理命令
用户管理命令:
-----useradd(增加)-------
useradd --help
useradd guoguo
useradd -u 2000 guoguo(指定UID)
getent passwd guoguo=cat /etc/passwd(查看guoguo的passwd的信息,区别在于加了一个guoguo指定的)
批量账号创建:
首先创建一个txt文件,用nano打开passwd把复制的都复制到txt文件下
通过scp userlist.txt 192.168.30.128:/data(userlist就是命名,yes传过去后)
查看data目录就会有这个文件,通过newuser /data/userlist.txt(newuser批量创建用户上传文件)
再批量改口令
nano pass.txt(里面写app1:123)
app2:456
最后在用cat pass.txt | chpasswd(就可以批量改口令)
默认值设定:/etc/default/useradd---------------------------------------
显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
使用方法:useradd [options]登录
useradd - d
useradd - d[选项]
选项:
的主目录的基目录
新帐户
useradd [options] LOGIN
PPT
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
官方
-c,——注释信息useradd -c "Gentoo Distribution"(注释信息)
-d,——home-dir新帐号的home目录打印或更改默认useradd配置(useradd mysql -d /data/mysql)
-e,——新账户到期日
-f,——新账户的密码处于非活动状态
-g,——gid组名或新组的主组的ID账户
-G,——群群新补充群群列表账户帮助显示此帮助消息并退出useradd -G app1,app3 guoguo(创建到附加组,多个时需要加"")追加用useradd -aG app1,app3 guoguo,useradd -G " " guoguo(就是把附加组关闭了)
-k,——skel SKEL_DIR使用这个可选的骨架目录默认值覆盖/etc/login.defs不要将用户添加到最后的日志和faillog数据库创建用户的主目录
不要创建用户的主目录
-N,——非用户组不要创建与之同名的组用户(不同名的主组,那么主组就是user)
-o,——非唯一允许创建用户与副本(非唯一)UID
-p,——密码密码加密后的新账号密码系统创建一个系统帐户
-R,——根目录CHROOT_DIR到chroot目录
-s,——shell shell登录新帐号的shell(useradd -s /sbin/nologin -r -m guoguo)
-u,——uid新账号的用户ID用户组创建与用户同名的组
-Z,——SELinux -user SEUSER为SELinux用户映射使用特定的SEUSER
-M(不在home创建家目录,用于非系统用户)
-m(创建加目录用于系统用户)
练习题
useradd -c "Gentoo Distribution"-G bin,root -s /bin/csh guoguo
groupadd webs
useradd varnish -G webs
useradd nginx -G webs
useradd mysql -s /sbin/nologin/(不可交互的登陆系统就是服务器系统)
echo magedu |passwd --stdin nginx(passwd guoguo默认是用这个)
echo magedu |passwd --stdin varnish
echo magedu |passwd --stdin mysql
------usermod(用户属性修改)------
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c ‘COMMENT‘:新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
比如:usermod -G bin wang(wang加入bin组)
usermod -G bin root(如果在用root加入bin组之前的wang就会被挤掉)
usermod -aG bin root(使用这个就可以追加)
usermod -G "" wang(直接把附加组变成空,就都去掉了)
usemod -l oldwang wang(登陆原来叫王,现在叫老王,只是改用户名其他地方不改)
-------userde(删除用户)-----
默认家目录与邮箱是不删除的
ls /home -l
ll /var/spool/mail/(邮箱)
userde -r guoguo(就可以把邮箱与家目录一起删除了,最好不要用r,万一要用到用户的数据呢)
userdel(删除)
组账号维护命令
groupadd(增加)
groupmod(修改)
groupdel(删除)
总结:groupadd、groupmod、groupdel
-u uid
-r 创建系统用户
-s shell类型
-d 指定家目录路径
-c 加描述
-g 指定主组
-G 附加组
id命令
id [OPTION]... [USER]
-u: 显示UID(用户id)
-g: 显示GID (组id)
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
id apache &> /dev/null(创建之前要判断一下,这个命令就清空了,反正就是不想显示出来)
切换用户或以其他用户身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
?root su至其他用户无须密码;非root用户切换时需要密码
?换个身份执行命令:
su [-] UserName -c ‘COMMAND‘
?选项:-l --login
su -l UserName 相当于 su - UserName
su guoguo(不完全切换,保留环境)
su - guoguo(完全切换,就像重新登陆)
su -(root默认不需要用户与密码,普通用户登陆需要用户与密码)
exit(退回原来身份)或者logout
su - root -c ‘cat /etc/shadow‘(这个命令就是在wang下使用root的权限看你要执行的命令,这是单引号)
不要一直切来切去,最后用logout
sudo -i切换root(乌班图)
设置密码
passwd [OPTIONS] UserName: 修改指定用户的密码
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码(用的比较多)
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
示例:echo "PASSWORD" | passwd --stdin USERNAME
修改用户密码策略
chage [OPTION]... LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE
-I --inactive INACTIVE
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 显示密码策略
示例:
chage -d 0 tom 下一次登录强制重设密码
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
用户相关的其它命令
chfn 指定个人信息
chsh 指定shell
finger
创建组
groupadd [OPTION]... group_name
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
groupadd -g 1234 nginx(创建组)
useradd -g nginx -u 1234 nginx(这样的写的话主组与这个用户的ID号就能一致)
修改和删除组
组属性修改:groupmod
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
组删除:groupdel
groupdel GROUP
附加组可以删,主组不可以
更改组密码
组密码:gpasswd
gpasswd [OPTION] GROUP
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
groupadd g1(创建一个g1组)
gpasswd -a wang g1(将wang加入g1组)
gpasswd -d wang g1(将wang从g1组删除)
[[email protected] ~]#groups guoguo (查看guoguo属于哪个组)
guoguo : guoguo
gpasswd -A guoguo g1(将guoguo设置为主的管理员)
更改和查看组成员
groupmems [options] [action]
options:
-g, --group groupname 更改为指定组 (只有root)
Actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表
groups [OPTION].[USERNAME]... 查看用户所属组列表
usermod -aG root wang
pgasswd -a wang root
groupmems -s wang -g root
getent passwd | shadow | group | gshadow(查看口令文件)
linux的root组并不是管理员,不要理解为管理员组,在linux看管理员就看uid
useradd -s /sbin/nologin -r -d /data/mysql -m -u 1234 mysql(经常创建用户,s是bash类型,r不是系统用户服务器用户,指定用户家目录,默认r是不创建家目录的,使用-m就是强制创建,-u是指定Uid)
token(uid,gid,groups)
当界面出现乱码的时候使用reset命令可以重置字符
文件的权限:
read(读) r(确保文件是可读的,根据文件,二进制程序不能随便去改!)(针对文本)
write(写)w(针对文本)
excute(执行)x(文本给执行没有什么意义)
文件属性操作
chown 设置文件的所有者
chgrp 设置文件的属组信息
[[email protected] data]#chown guoguo f1(我把刚创建的f1的所有者变成guoguo)
[[email protected] data]#ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo root 0 Dec 17 19:15 f1
drwxr-xr-x. 2 root root 6 Dec 16 20:16 home
-rw-r--r--. 1 root root 0 Dec 16 20:52 mail.txt
[[email protected] data]#
[[email protected] data]#chgrp rpc f1(我接着把f1的主组变成rpc,rpc也是一个组)
[[email protected] data]#groupadd g1(我创建了两个组g1与g2)
[[email protected] data]#groupadd g2
[[email protected] data]#groupmems -a guoguo -g g1(通过这个方式把g1加入guoguo成为附加组)
[[email protected] data]#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[[email protected] data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1)
[[email protected] data]#usermod -aG g2 guoguo(通过这个方式把g2加入guoguo成为附加组,如果不加a就会把之前加的g1组给覆盖)
[[email protected] data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1),1002(g2)
[[email protected] data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo rpc 0 Dec 17 19:15 f1(首先f1是属于guoguo创建的)
[[email protected] data]#su guoguo
[[email protected] data]$chown mage f1(我把这个文件的创建权限给mage系统是不允许的)
chown: changing ownership of ‘f1’: Operation not permitted
[[email protected] data]$chgrp g1 f1(但是我可以给他改变主组,改组的前提也是改他属于的组[[email protected] data]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo),1001(g1),1002(g2))
[[email protected] data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo g1 0 Dec 17 19:15 f1
总结:
第一普通用户是不能改文件的所有者-----------------------------------------------------
第二作为普通用户要是改文件的所属组,1这个文件是他的,第二在一个组(主+附加组)---------------------------
对于普通用户来说
文件所有者(权限最大)
属于这个组(权限小一点)
什么都不是 (最严)
[[email protected] data]$ll
total 4
-rw-r--r--. 1 root root 125 Dec 17 09:21 a.txt
-rw-r--r--. 1 guoguo g1 0 Dec 17 19:15 f1(拿f1举例子)
f1这个文件对于guoguo来说只有读写没有执行
f1这个文件对于g1组来说只有读的权限
当然对于other来说只有读的权限
前三个rw- 针对的是所有者
中间三个r-- 针对所属组
r--other 其他
给这三个授权chmod(更改用户的权限)
模式法(mode):
who opt给用户做什么事
chmod (你对谁操作) (你要做什么操作)(你要针对他给什么权限)(这个是对应的文件)
who:所有者用(u) 所属组(g) other(o)
opt:+ - =
权限:r w x X(X事特殊权限)
删除文件的权限是由目录决定的,如果要删除文件,就必须要对这个目录具有写的权限!--------------------------------
[[email protected] data]$ll -d /data(比如我要删除我之前创建的f1,他在data文件夹下面,但是你看data这个文件夹other的权限!)
drwxr-xr-x. 3 root root 57 Dec 17 19:15 /data(为啥guoguo这个用户能运行ls看data的f1呢,因为他有other的执行权限)
对于目录如果没有执行权限不能cd进去,也不能查看文件的属性与内容,就算有读也没用(一般给X,r要不都不给,这是目录的基础权限)
对于目录来说,如果只有执行权限,看不了文件,但是如果dir下面的f1与f2文件我知道的话我就能进去(这一句话可以理解一下,主要跟上一句一样,总体是衬托上面的第一句!)
目录的w写权限决定我能不能删除这个目录的文件,就算我看不了这个目录的文件,我只要有这个目录写的权限我就能删除(!前提rw删不了,xw能删,xrw必须能删除)
下面的这三个执行效果是一样的(这样的话所有人都看不了ls了,轻易不要做)
chmod -x /bin/ls / 反过来就是加上+x
chmod ugo-x /bin/ls
chmod a-x /bin/ls(a就是all所有的意思)
比如:chmod u+x,g-w,o= file(=就是空权限)
chmod o+r f1
[[email protected] data]$ll /etc/shadow
----------. 1 root root 1272 Dec 17 19:29 /etc/shadow
(权限都是----为啥root能看,因为root是老板特殊,你能管吗,读写root不受控制,执行权限root还是受影响的)
(二进制的读权限不是必须的,可以没有)
文件的权限:
read(读) r(确保文件是可读的,根据文件,二进制程序不能随便去改!)(针对文本)
write(写)w(针对文本)
excute(执行)x(文本给执行没有什么意义)
文件属性操作
chown 设置文件的所有者
chgrp 设置文件的属组信息
.*(包括..这不就是跑路啊,跑根目录了)--------------------------不能用rm
系统看权限的顺序1、看是所有者吗?不看后面了,
2、看是组里的人吗?后面不看了
3、看other
使用whatis可以查询多个系统不同的属性
[[email protected] ~]#whatis passwd
passwd (1) - update user‘s authentication tokens
sslpasswd (1ssl) - compute password hashes
passwd (5) - password file
[[email protected] ~]#man 5 passwd
guoguo:x:1000:1000:guoguo:/home/guoguo:/bin/bash
用户名:密码:UID:主组:
把passwd里面比如用户guoguo后面加上nologin那么这个guoguo的用户就不能登陆了
也就是说以后给进程给服务用的账号都是nologin类型的
[[email protected] ~]#cat /etc/shadow(放用户口令的)
有两个!!是锁定不让系统登陆
polkitd:!!:17856::::::
[[email protected] ~]#cat /var/spool/mail/guoguo(可以看到我之前发的邮件)
[[email protected] ~]#cat /etc/default/useradd
useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[[email protected] ~]#cat /etc/group(查看组)
[[email protected] ~]#id guoguo
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo)
id号 主组
[[email protected] ~]#groups guoguo(这个命令是看属于什么组)
guoguo : guoguo
主组 附加组
10、从linux上传到windows文件
[[email protected] ~]#cd /data
[[email protected] data]#touch linux.txt
[[email protected] data]#cat > linux.txt(这种写法可以往这个txt文件写内容)
123
^C
[[email protected] data]#cat linux.txt
123
[[email protected] data]#sz
sz: need at least one file to send
Try `sz --help‘ for more information.
[[email protected] data]#sz linux.txt(用这个sz加要传的文件可以上传到windows的管理员的下载的目录)
rz(从windows下载文件到linux)
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring linux.txt...
100% 4 bytes 4 bytes/sec 00:00:01 0 Errors
11、[[email protected] data]#hexxdump -c 文件(查看二进制)
12、[[email protected] ~]#id(通过ID命令可以查询组的ID)
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[[email protected] ~]#id guoguo(uid是guoguo自己,gid是组的id)
uid=1000(guoguo) gid=1000(guoguo) groups=1000(guoguo)
13、[[email protected] ~]# 用户名:密码:uid:主组:描述信息(可以使用chfn guoguo来添加描述):家目录:
14、[[email protected] ~]#cat /etc/shells(cat查看shell类型)
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
15、
[[email protected] ~]#echo $SHELL
/bin/bash(查看自己的shell类型)
16、[[email protected] ~]#chsh -s /bin/nologin(类型) guoguo(把guoguo的bash类型修改为nologin类型是系统的账号不能登陆的)
17、[[email protected] ~]#su -wang(切换账号登陆用us)
18、[[email protected] ~]#cat /etc/shadow(是存用户密码的)
guoguo:$6$iydIhmiHWFpOih2p$E4DflEwrAi9OO6VmUGXjlIIiTeyziOKrvbF5XIJ6PNOMgZz8qLs4U.14KaFgZHOZZUJsXXMNj83tDLHjOQVc3/::0:99999:7:::
$1加密算法是MD5,$6用的算法为sha512
MD5与sha1已经被破解
19、[[email protected] ~]#authconfig --passalgo=sha256 --update(修改加密算法)
20、[[email protected] ~]#openssl rand -base64 9(随机命令)
21、[[email protected] ~]#usermod -L guoguo(给guoguo这个文件加锁)
[[email protected] ~]#cat /etc/shadow(用这个命令查询,是存用户密码的,guoguo前面有!的就是登陆被禁用了,但是用[[email protected] ~]#su guoguo切换是没有问题的)
22、[[email protected] ~]#passwd guoguo(这个命令是修改guoguo的口令)
23、[[email protected] ~]#passwd -e guoguo(强制让用户口令过期,这样就可以重新登陆了)
24、[[email protected] ~]#chage -l guoguo(查看口令参数)
25、[[email protected] ~]#chage guoguo(修改guoguo口令有效期的参数)
26、[[email protected] ~]#nano /etc/login.defs(修改配置文件是账号配置文件固定设置的)
27、[[email protected] ~]#useradd guoguoguo(创建一个新的叫guoguoguo的账号)
28、ll /var/spool/mail(这里存放的是各个账号的邮件,当然用rm可以清空邮件)
29、ll etc/group(查看组)
30、cat /etc/default/useradd(创建组时的特性)
31、/etc/passwd /etc/shadow /etc/login.defs /etc/default/useradd /etc/skel/
32、修改一个人的用户与权限要修改:/etc/passwd与/etc/shadow/还有家里目录的ll /home/
以上是关于第四天标准IO和管道的主要内容,如果未能解决你的问题,请参考以下文章