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

1.用户权限设置以及更改
2、特殊权限suid、sgid、sticky
3、ACL权限设置
4、cat命令、head命令、tail命令、cut命令、paste命令
5、sort命令、uniq命令、diff命令

 

1.用户权限设置以及更改

 

linux 判断你的权限的是UID而不是GID

就算加入root的组也没有root的权限,只有UID为0的才为管理员

useradd -s /sbin/nologin -r -d /data/mysql -m mysql -u 1234

运维的终极目标就是自动化管理,自动化管理的前提就是环境的统一化。

chown 设置文件的所有者把f1文件所有者变为Max

chown Max f1

chgrp 设置文件的所属组把f1文件所属组设为Maxi

chgrp Maxi f1

 

token里包含有你的(uid,gid,groups)

read r     读

write w    写

excute x   执行

二进制程序读权限没有什么实际意义,一般读权限是给文本文件的

写权限也是,除非你是黑客能看到二进制内容,随便改有可能导致程序崩溃

注意:

1.普通用户不能改文件所有者

2.普通用户要改文件所属组,首先文件必须是本人的,同时必须在想改变的组内

 

修改权限的方法

方法一:

chmod 改变权限

方法1:mode 法

chmod who opt per file

who:u g o a(a=all)

opt:+ – =

per:r w x X

例子:

chmod u+x file

chmod u+x,g-w,o=  file

对于普通用户而言,文件所有者可以修改文件的权限

对于file,赋予拥有者x权限,组用户去除w权限,other空权限

对于只有w权限而没有r权限的可以往里面追加信息却不能读

例如:

echo mage2 >> f1

> f1 清空内容!!

但是

rm -f f1 没法执行!!

因为删除文件必须拥有目录写权限

删除文件等于删除目录内容inode等

所以必须对文件夹有权限

删除文件必须删除目录

读权限对二进制程序不是必须例如

chmod -r /bin/cat

后照样能够执行

但是如果没有执行权限就不能执行了

chmod -x /bin/cat

没有读权限有执行权限

file /bin/cat 失败

因为file原理是打开文件后分析信息实现

读权限对于目录

对于目录而言只有x权限,没有r不能看文件列表但是可以打开里面文件,前提你知道文件名

有r而没有x权限,不能cd进去,不能查看详细属性,也不能查看文件内容

rx权限对于目录来说是基础权限,一般全给要不就全不给。

如果对目录只有wx权限就可以删除目录下的文件!前提你知道里面有什么文件!因为你没有r权限!

另外,如果对于文件设置

chmod u=r,g=rw,o=rwx f1

结果用户只有r权限

vfat系统是window系统文件系统不支持权限修改!

用参考文件f1的权限设置f2和f3

chmod –reference=f1 f2 f3

引用f1权限设置f2 f3

总结:

1.读写权限对root无效

2.执行权限例外,没有执行权限包括root也不能运行,但是root可以修改权限

3.普通用户无法修改文件的所有者

4.普通用户要改文件所属组必须自己在这个组以内

5.删除文件不是对文件有写权限而是对文件夹有写权限

6.系统权限判断的顺序是所有者 所属组 other,一旦匹配就不再判断!不管后者的权限是不是比前者大!

7.权限修改是由文件系统决定的而不是操作系统决定的。

 

方法二:

数字法

u   g   o

rwx rw- r–

111 110 100

7   6   4

chmod 764 f1

r:4

w:2

x:1

— 000 0

–x 001 1

-w- 010 2

-wx 011 3

r– 100 4

r-x 101 5

rw- 110 6

rwx 111 7

 

常见

file:6rw,4r,0,1x

dir:7rwx,5r-x,0

为dir1目录下的文件和文件夹都加执行权限

chmod -R a+x dir1

 

为dir2目录下所有文件夹加执行权限

chmod -R +X dir2

当然有一种例外,如果拥有者已经有其中一个文件的执行权限那么用+X文件也会给其他文件加执行权

限!!

chown -R wang /*

chmod -R 777 /*

都是危险操作!!!!!!!!!!!

 

一次性更改文件或者目录所有者和所属组(.或者:都可以做为分隔符)

chown wang.g1 dir1

chown root:admins testfile

同时修改所有者和所属组

chown root. dir1

所有者不变,只修改所属组

chown :bin dir1

以上2种方法一般少用,因为结果不明晰,容易出错

 

默认权限

默认目录权限755 文件644

默认创建文件和目录的权限

umask

0022

umask022+default644|755=file666/dir777 初步后面必须修正!!奇数加1偶数不变对于文件而言!!文件

夹不用!!!

 

umask mask : 掩码

功能:取消对应的权限

666

125

541

奇数加1偶数不动

110110110

001010101

11010010

642

总结:

对于目录

unmask+default=777

对于文件

666-umask:对结果观察,如果有奇数+1,偶数不变

如果想永久修改umask,可以把修改数据写入.bashrc中格式为

umask xxx

在显示umask值前面增加umask这个词以方便写入文件

umask -p

umask 0022

umask -p >> .bashrc

umask -S

则显示u=rwx,g=rx,o=x

 

直接设置法:

umask u=rwx,g=r,o=

umask 026

 

练习

5、复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所

属组为apps组有读写权限,其他人无权限

6、误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性

答案

5

useradd tomcat

groupadd apps

groupmems -a tomcat -g apps

cp /etc/fstab /var/tmp/

chown tomcat:apps fstab

chmod 660 fstab

6

1.mkdir /home/git

2.cp -a /etc/skel/.[^.]*  /home/git

或者

cp -r /etc/skel /home/git

3.chown -R git.git /home/git/

4.chmod 700 /home/git

 

2、特殊权限suid、sgid、sticky

 

linux 文件系统上的特殊权限

suid作用在于当一个用户去运行一个程序的时候,会继承二进制程序所有者的权限

用户运行具有suid权限的程序时,会临时继承程序所有者的权限

s权限相当于S+x权限

 

数字法

chmod 4755 /usr/bin/passwd

chmod 755 /usr/bin/passwd 就是去s权限

chmod g+s FILE…

chmod g-s FILE…

 

suid只适合在二进制的可执行程序

sgid就是用户运行具有suid权限的程序时,会临时继承程序所属组的权限

1)继承二进制程序所有者的权限

2)作用于目录,此目录新建的文件继承目录的所属组

chmod 2755 /bin/nano

chmod g+s /bin/nano

chmod g+s DIR…

chmod g-s DIR…

 

sticky是针对文件夹设置的,设置在文件上没有价值

作用于目录,此目录的文件只能被所有者或root删除,又叫做粘滞位

chmod o+t dir1

chmod o-t dir1

chmod 1777 /data/dir1

普通用户就算对dir1有写权限,可是无法实现删除其他客户的文件!

 

总结:

1.suid:继承二进制程序所有者的权限

2.sgid:

1>继承二进制程序所有组的权限

2>作用于目录,此目录新建的文件继承目录的所属组

3.sticky:作用于目录,此目录的文件只能被所有者删除

当有wang和mage都参与一个项目需要在同一目录dir1中创建文件,为了方便相互访问文件,可以把目录

dir1添加sgid权限,然后设置一个附属组例如opts,让wang和mage都加入该组,这样由于dir1有s权限,那

么在该目录下无论谁创建的文件,默认组都是opts,那么就组成员就可以访问彼此的文件了,还可以为

other添加t权限,防止非文件所有者删除文件。

 

chmod 3777 dir1    (3 s+t )

 

chattr对文件加锁,管理员也可以避免误操作

chattr +i s   锁定文件s不能删除也不能改只能读,包括root

chattr -i 解锁

chattr +a 只允许追加内容

chattr +A 锁定atime

 

lsattr ss  显示ss的特殊属性

—–a———-

 

3、ACL权限设置

 

ACL

setfacl -m u:wang:0 f1     set file acl

setfacl -m u:mage:rw f1

getfacl f1 查看f1设定的特殊权限列表

一旦启用acl ,传统组权限group会变成mask权限

setfacl -m g:g2:x f1  加

setfacl -x g:g2 f1    删

getfacl f1

mask定义了除user和other的最高权限

setfacl -m mask ::r f1

就是设置了除user和other之外最高只能有读权限

如果之后对某一个文件执行

chmod g=rw f1

则mask 直接变为rw-

setfacl -b f1

清空权限列表

启用ACL后的判断顺序依然是匹配顺序,一旦匹配直接生效

所有者–》所属组—》其他人

centos6 装好系统后才手动添加的分区是不支持acl必须自己添加

centos7 全部支持acl

setfacl -M acl.txt f1

批量修改权限

练习

1、在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权

限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件

夹。

2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原

ACL权限

 

答案

1.

mkdir -p /testdir/dir

groupadd webs

groupadd apps

groupadd dbs

useradd -G apps tomcat

useradd -G dbs mysql

setfacl -m g:apps:rwx /data/testdir/dir

setfacl -m g:dbs:r-x /data/testdir/dir

chmod o=”” /data/testdir/dir

 

2.

getfacl -R /test/dir > /root/acl.txt

setfacl -R -b /test/dir

setfacl -R –set-file=acl.txt /root

setfacl –restore acl.txt

getfacl -R /tmp/dir1

 

4、cat命令、head命令、tail命令、cut命令、paste命令

 

文本编辑工具

cat

显示行结束符$

cat -E

对每一行进行编号

cat -n

显示所有控制符

cat -A

显示非空编号

cat -b

压缩连续的空行成一行

cat -S

反向显示

tac 竖着反

rev 横着反

 

这样设置方便以后的网络教学:

centos 6

service iptables stop

chkconfig iptables off

centos 7

systemctl stop firewalld

systemctl disable firewalld

 

文件截取

head

指定获取前#字节

head -c#

指定获取前#行

head -n#

指定获取第#行

head -#

 

tail

指定获取后#字节

tail -c#

指定获取到后#行

tail -n#

指定获取后第#行

tail -#

跟踪显示文件fd新追加的内容,常用日志监控相当于–follow=descriptor

tail -f

跟踪文件名,相当于–follow=name –retry例如当原文件被执行删除时会有提示,原理是跟踪文件名

tail -F

当文件不增长时并不访问文件,类似tail -f

 

cut

指明分隔符,默认tab

cut -d

cut -f#

#:第#个字段

#,#:离散的多个字段,例如1,3,6

#-#:连续的多个字段,例如1-6

混合使用:1-3,7

例如取/etc/passwd文件里的第一和第三列,还有第五列到第七列用:做为列分隔符

cut -d: -f 1,3,5-7  /etc/passwd

按字符切割

cut -c

例如取who命令里面的前9个字符

who | cut -c1-9

例如用cut利用率取分区利用率

df | tr -s ” ” | cut -d” ” -f5 | tr -d “%” |

df | tr -s ” ” % |cut -d% -f5

又例如取出ifconfig ens33中的ip地址

ifconfig ens33 |head -n2 | tail -n1 |tr -s ” “|cut -d” ” -f3

取出ifconfig eth0 ip

ifconfig eth0|head -n2|tail -n1|tr -s ” ” :|cut -d: -f4

指定输出分隔符

cut -d: -f1,3 –output-delimiter=”===” /etc/passwd

 

paste

合并两个文件同行号的列到一行

paste -d  指定分隔符

paste -s  所有行合成一行显示

 

wc (word count)

例如

wc f1

10 10 21 f1

行数 单词数 字节数

统计行数

wc -l

统计单词数

wc -w

统计字符数

wc -m

 

5、sort命令、uniq命令、diff命令

 

sort

从列中抽出数据按照指定的规则排序

sort -t  指定分隔符

sort -k  指定列数

sort -n  按照数字大小排序

例如按照数字大小排序/etc/passwd下的uid

正向

sort -t:-k3 -n /etc/passwd

反向

sort -t:-k3 -nr /etc/passwd

取出df中占有率最大的数值

df | tr -s ” ” % |cut -d% -f5 |sort -nr |head -n1

 

把重复的内容取消

sort -u

例如把/etc/passwd下的用户按uid进行排序

cut -d: -f1,3 /etc/passwd |sort -t: -k2 -nr

 

uniq

从标准输入中删除前后相接的重复的行

显示重复的行出现的次数

uniq -c

仅显示重复过的行

uniq -d

仅显示不曾重复的行

uniq -u

 

统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

last | tr -s ” ” |cut -d” ” -f1,3|sort -t” ” -k2 -nr|uniq -c|sort -nr|head -n3|tr -s ” “|cut -d” ” -f4

 

比较文件

diff

diff f1 f2

显示额外的信息

diff -u f1 f2

通过diff.log文件和f2恢复已经删除的文件f1

diff -u f1 f2 > diff.log

patch -b f2 diff.log

由于通过命令找回的文件会命名为f2所以会覆盖原f2内容,为了避免于此,就加-b选项对f2做备份

生成f2.orig,运行此命令后会生成f2就是原来的f1,f2.orig就是原来的f2

 

练习

1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址

2、查出分区空间使用率的最大百分比值

3、查出用户UID最大值的用户名、 UID及shell类型

4、查出/tmp的权限,以数字方式显示

5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

 

答案

1.

centos7

ifconfig ens33 | head -n2 | tr -s ” ” : | cut -d: -f3

centos6

ifconfig ens33 | head -n2 | tr -s ” ” : | cut -d: -f3

2.

df | tr -s ” ” % | cut -d% -f5 | sort -n | tail -n1

3.

cat /etc/passwd |sort -t: -k3 -nr | head -n1 | cut -d: -f1,3,7

4.

5.

last | tr -s ” ” |cut -d” ” -f1,3|sort -t” ” -k2 -nr|uniq -c|sort -nr|head -n3|tr -s ” “|cut -d” ” -f4

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

发表评论

登录后才能评论

联系我们

400-080-6560

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

邮件:1823388528@qq.com

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