Linux常用命令(vim编辑器及用户及用户组及权限基础知识)
快捷键操作
vim +10 /etc/vimrc 直接进入第10行
vim /etc/vimrc配置文件
set nu
set ts =4 tab键设置为4个空格
set mouse=a #可以使用鼠标操作
#将上面的设置在配置文件,可以使用以后文件默认
编辑命令:
#Ctrl + a :移到命令行首
#Ctrl + e :移到命令行尾
Ctrl + xx:在命令行首和光标之间移动
#Ctrl + u :从光标处删除至命令行首
#Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首(空格的字首)
#Ctrl + d :删除光标处的字符
#Ctrl + h :删除光标前的字符
重新执行命令:
Ctrl + r:逆向搜索命令历史
Ctrl + p:历史中的上一条命令
ESC + .:打印之前执行过的命令的最后一部分 以空格为分隔符
控制命令:
Ctrl + l:清屏
Ctrl + c:终止命令
Tab键: 自动补全
yum install -y bash-completion
Vim进入paste模式,命令如下:
:set paste
进入paste模式之后,再按i进入插入模式,进行复制、粘贴就很正常了
命令模式下,输入如下命令,解除paste模式
:set nopaste
编辑模式:
I #直接在光标行首进入编辑模式
A #直接在光标行尾进入编辑模式
i #在光标所在处进入编辑模式
a #在当前光标后面进入编辑模式
o #在光标的下一行进入编辑模式(另起一行插入)
大O #在光标的上一行进入编辑模式(另起一行在光标在行的上一行进行插入)
尾行模式:
命令行模式到尾行模式按两次esc
刚进入文件就是尾行模式
编辑模式按一次esc进入尾行模式
hjkl #左下上右
gg=) (shift+0)=[ #到页首头部。
G =(shift+g)=] #到页尾头部
( (shift+9) #到页尾尾部
$ #跳到行尾
0或home键 #跳到行首
enter键 #跳到下一行行首
dG #从光标开始删除到页尾
dgg #从光标开始删除到页首
dd #删除一行/剪切
d0 #删除到行首
d$ #删除到行尾
3dd #从光标开始删除3行
d3G #删除第三行
d^=d0 #删除当前光标之前的内容
D #从光标处删除到行尾
x #删除光标所在的字符
yy #复制
3yy #复制第3行,在光标下一行粘贴1行
yy3 #复制第三行,在光标下一行粘贴3行
ygg #从当前光标复制到页首
yG #从光标开始复制到页尾
p #粘贴到本行的下一行
大P #粘贴到本行的上一行
n(n为数字 ) #光标向下移动n行
3G=3gg #进入第三行
r #可以用来修改一个字符
u #undo撤销
[Ctrl]+r #重做上一个动作
n<space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
命令行模式:
shift+: #进入尾行模式(扩展命令模式)
:10 #进入第10行
:w #保存
:q #退出
:wq #保存并退出
:q! #不保存并退出
:wq! 强制保存退出
:ZZ 保存并退出
:x 保存并退出
:e! 复原,恢复到文件打开后,没有迚行修改时的状态。 修改了很多,丌想保存,想复原,按:e!
在正常模式下,按下大写的 ZZ,也可以保存并退出
设置环境:
:set nu
:set list #显示控制字符
:set nonu #取消设置行号
查找替换:
语法----> :范围 s/old/new/选项 /// 可换成别的分隔符例如:@/bash/bin@@,###,$$$可查多个单词
/代码 向光标之下寻找一个名称为 word 的字符串 (n N 可以循环的)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
/^d ----^意思表示以什么开头 ,查找以字母 d 开头的内容
/bash$ -----$意思表示以什么结尾,查找以字母 bash 结尾的内容
:s/world/nice/ #替换当前光标所在行的第一个world
:s/bin/soso/g #替换光标所在行中所有bin关键字
:%s/bin/soso/ #替换所有行的第一个
:3s/sbin/nice/ #替换指定3行
:1,5 s/nologin/soso/ #从1-5行的nologin 替换为soso
:%s/sbin/nice/g #替换行内所有关键字
:% s/do/xuegod/gi #将文本中所有的 do 替换成 xuegod, 并丏忽略 do 的大小写
注释:%表示替换所有行 g表示行内所有关键字
将文件另存(另存为):语法----> :w 存储到当前文件
:w /tmp/aaa.txt #另存为/tmp/aaa.txt
:1,3 w /tmp/2.txt #从1-3行的内容另存为/tmp/2.txt
#文件有了就在w后加!
:调用外部文件戒命令
语法:在命令行模式下输入: !+命令
例:在 vim 编辑文档写要写入 MAC 地址。
[root@xuegod63 ~]# cp /etc/passwd a.txt
[root@xuegod63 ~]# vim a.txt
:!ifconfig
#在 vim 中调用 ifconfig 命令
读取其他文件。(把其他文件中的内容追加到当前文档中)
:r /etc/hosts
进入其他模式
ctrl+v #进入可视块模式 选中后大I插入,再按要替换的字符,再按两次esc
shift+v #进入可视行模式
linux中的用户及角色划分
账户为分三类:
超级用户(管理员):享有最高权限,具备系统中的所有权限(一般为root),UID为0
系统用户 :别称“伪用户”,无法登录系统,其主要作用是支撑系统运行,方便系统管理。uid号码小于1000.
普通用户:有权限限制,只能对自己目录下的文件进行操作,可以登录系统。uid 大于1000,登陆shell是bin/bash。
任何一个账户在创建的同时都会在系统里面创建一个同名的组。
用户概览
用户/组基本概念~~
Users and groups:
系统上的每个进程(运行的程序)都是作为特定用户运行的
. Every file is owned by a particular user.
每个文件是由一个特定的用户拥有 .
. Access to files and directories are restricted by user.
访问文件和目录受到用户的限制
用户和组管理的配置文件
/etc/passwd文件详解
此文件里面除了密码字段能删除不能直接修改之外,其他字段全部都能直接修改
[root@xiaoqiang ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
分隔符::
第一列:用户名
第二列:密码
第三列:用户标识号--->(uid)是一个整数,系统内部用它来标识用户。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号
第四列:gid
第五列:描述信息。
第六列:家目录
第七列:是用户登陆到界面的第一个命令,开启一个shell。登陆shell【/bin/bash、/sbin/nologin、/sbin/shutdown】
/etc/shadow账户密码文件结构:
root 账户名称
$6$yMuqjFCP$p6z3v3bTa842XU/HRjmWALrXv723ZTepEgwT1G2M3kSI2M7hyGak6api1LhJu8smwz5K8r8MER1O..5hjWM7R1 密码(加密后)
18340 最近修改密码的日期
0 密码不可修改的日期
99999 密码需要重新修改的日期
7 密码需要修改前的警告天数
空 密码过期后的宽限时间
空 账号失效日期
空 保留
/etc/group和/etc/gshadow组账户密码文件结构
adm:x:4:syslog,kehan
用户组名称:用户组密码:GID:用户组支持的账号名称
判断用户是否存在:
id 用户名称 #查看用户uid,gid和所在组
uid=1001(user01) gid=1003(user01) groups=1003(user01)
主属组 附属组
uid 系统用来识别账户的user identify
gid 系统用来识别组的group identify
查看现在所使用的的账户:
# whoami 查看我现在所使用的账户
#who 查看我的机器谁在登录
#id 详细查看
#w 查看终端
#tty 当前终端
用户管理:
创建用户:(不带参数)
useradd 用户名称
/etc/passwd ---->查看账户是否存在的文件
/home/ ---->用户的家目录,每创建一个用户会在/home目录下面创建对应的家目录
/etc/shadow --->用户的密码文件
创建用户:(带参数)
useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的 shell” 用户
-c:设置账号的描述信息,一般为账号全称
-d:指定用户家目录,不写时默认为/home/user_name
-M:不要创建用户家目录,一般与s结合使。
-m:创建用户主文件夹(一般账号默认值)。
-g:指定用户主组,要求组己存在
-G:指定用户的附加组,多个组以逗号分隔
-r:创建一个系统的账号,这个账号的UID会有限制(参考/etc/login.defs)。
-e:后面接一个日期,格式为“YYYY-MM-DD”,此选项可写入shadow第八字段,即账号失效日的设置选项。
-D:修改useradd创建用户时的默认选项,就修改/etc/default/useradd文件
-s:指定用户登录的shell,默认留空。此时将选择/etc/default/useradd中的SHELL变量设置
-u:指定用户uid,默认uid必须唯一,除非使用了-。选项
-f:后面接shadow的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永不失效(密码只会过期而强制于登录时重新设置而已)。
useradd xiexie -u 503 //指定uid为503
useradd -g 1003 user8 #指定用户的主属组为1003组。
useradd xiexie -G it,fd(附加组) //创建用户xiexie,指定附加组
useradd xiexie -s /sbin/nologin -M # bin/bash //创建用户并指定shell,创建无法登陆系统且没有家目录的用户xieixe
useradd user10 -u 4000 -s /sbin/nologin
useradd -D -e f,2016-08-20" # 设置用户 2016-08-20 过期
useradd -c adinistartor -d /home/admin -e 2021-12-06 -g root -G xie,hui admin
删除用户:
userdel -r user02 //删除用户user2,同时删除用户家目录
-f:强制删除用户,即使这个用户正处于登录状态。同时也会强制删除家目录。
用户密码:
passwd alice #root用户可以给任何用户设置密码
passwd #root用户给自己设置密码
passwd -l tom #锁定用户
passwd -u tom #解锁用户
passwd -d tom #清空账户Tom的密码(没密码可登录系统)
#普通用户只能给自己修改密码,而且必须提供原密码
echo "123456" | passwd --stdin xiaoqiang
chpasswd [-e -c] "user:passwd"
-c:指定加密算法,可选的算法有DES,MD5,NONE,SHA256和SHA512
user:passwd为用户密码对,其中默认passwd是明文密码,可以指定多对,每行一个用户密码对。前提是用户是已存在的。
-e:passwd默认使用的是明文密码,如果要使用密文,则使用-e选项。参见man chpasswd
修改单个用户密码。
$ echo "user1:123456" | chpasswd -c SHA512
修改多个用户密码,则提供的每个用户对都要分行。
$ echo -e 'usertest:123456\nusertest2:123456' | chpasswd
用户操作:
修改用户名:
usermod -l 用户新名 用户旧名
修改用户gid(主属组):
1:查看用户 id 用户 #查看此用户是否有GID
usermod -g 新的gid 用户名
修改uid:
usermod -u 新的用户uid 用户名
修改用户的shell:
usermod -s /sbin/nologin user07 #修改用户的登录shell
追加用户到附加组:
usermod -aG 附属组 用户 #追加,用户到附属组与-a一块使用
-a追加 -G附属组
usermod -d /home/tocat tom #修改tom的家目录(/home/tocat目录必须先存在)
usermod -e 2021-12-6 tom #修改账户的失效日期
组管理:
创建组:
groupadd 组名称
-f:如果要创建的组己经存在,默认会错误退出,使用该选项则强制创建且以正确状态退出,只不过gid可能会不受控制。
-g:指定gid,默认gid必须唯一,除非使用了-0选项。
-K:修改/etc/login. defs中关于组相关的配置项。配置方式为KEY=VALUE,例如-K GID_MIN=100 -K GID_MAX=499
-o:允许创建一个非唯一 gid的组
-r:创建系统组
创建组并创建组gid
groupadd 组名称 -g 组id
#-r:新建系统用户组。
查看有效组、切换有效组
groups
groups命令显示的第一个用户组就是root的有效用户组,这时候root用户创建的文件或目录,所属的用户组就是root的有效用户组,也就是root。
newgrp命令切换有效用户组:
组操作:
修改组:
参数:-g:修改组的gid
-n:修改组名
groupmod -g 2000 grp1 #修改组id
groupmod -n 新组名 grp1 #修改组名
groupmod -g 2000 -n xyq xyqq
删除组:
groupdel net01 #删除组net01
注意:用户的主属组不能删除
组成管理:
gpasswd -a user10 grp2 #给组添加账户
gpasswd -M tom,alice it #改[指定此账户成员是哪几个]
gpasswd -d user07 hr #从组删除用户
使用用户管理器管理用户和组群
rpm -qa | grep system-config-users #查找是否安装用户管理器
yum install -y system-config-users #安装图形化用户管理器
system-config-users #打开管理器
UGO权限及高级权限
linux用户权限解析:
我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险。所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要
基本权限UGO(user group other)
这个文件归属哪个用户,这个文件属于哪个组,这个文件其他人有什么权限
权限有优先级,从左往右执行
文件权限设置: 可以赋于某个用户或组 能够以何种方式 访问某个文件
权限对象:
属主------->u
属组------->g
其他人------>o
基本权限类型:
读(read):r ---->4
写(write):w ---->2
执行: x(exec) ----->1
r、w、x权限对文件和目录的意义
对文件:
r----cat,less,more,vim
w ---vi、vim,echo
x ---- ./ dir/file
对目录:
r ---ls
w -----touch、rm ,mkdir
x ---- cd
设置权限:chown、chmod
chown:改变文件\目录的所属主以及所属组
chmod:为文件或目录设置访问权限
chgrp:更改文件和目录所属组,要求组已经存在。【注意,对于链接文件而言,修改组的作用对象是链接的源文件,而非链接文件本身】
chown:属主、属组
chown alice.hr file1.txt //修改属主、属组
chown tom file1.txt //修改属主
chown .it file1.txt //只改属组
chown -R alice.hr dir1 //递归修改---针对目录
chmod:读、写、执行
对谁操作:
u----> 用户 user,表示文件戒目彔的所有者
g---->用户组 group,表示文件戒目彔所属的用户组
o---->其它用户 others
a---->所有用户 all
操作符:
+ #添加权限;- #减少权限; = #直接给定一个权限
权限:r w x
例如下在的组合:
u-w user拥有者
g+x group 组
o=r other其他人
a+x all所有人
chmod u+x file1.txt //属主增加执行
chmod a=rwx file1.txt //所有人all等于读写执行
chmod a=- file1.txt //所有人都没有权限
chmod ug=rw,o=r file1.txt //属主属组等于读写,其他人只读
chgrp:
chgrp -v huihui passwd #改变文件的属组
chgrp --reference=passwd huihui#指定文件改变文件的属组[将huihui文件属组也改成passwd一样的]
chgrp -R huihui xiexie/ #指定xiexie文件/目录递归修改属组为huihui
chgrp -R 100 test6 /通过属组gid进行修改
使用数字:
文件权限默认644
目录权限默认755
权限掩码:umask
umask 用户掩码:用于控制用户创建文件和目录的默认权限
umask值用于设置用户在创建文件时的默认权限。对于root用户(实际上是UID小于200的user),系统默认的umask值是022;对于普通用户和系统用户,系统默认的umask值是002。
root用户默认权限
查看umask
#umask -S 查看对应权限
#umask
0022 root账户默认---->第一个对应是特殊权限用的,后面三个数字代表权限对于UGO:u=0,g=2,o=2 所以:755
文件:644 目录:731
0002 普通用户默认---->u:0,g=0,o=2,所以:775
文件:664 目录:775
022反过来755-->所以对应u=7,g=5,o=5
修改umask
#umask 0111
高级权限:
高级权限 suid,sgid,sticky
1.1.高级权限的类型
#suid ==== 4 提权 (只对二进制命令文件生效,其他不管用)
那么这个特殊权限的特殊性的作用是什么呢?
1、SUID权限仅对命令文件(二进制文件)有效;
2、执行者将具有该程序拥有者(owner)的权限。
#sgid ==== 2 组权限继承 (只能对目录设置)
把s放到文件的所属用户组的x位置上的话,就是SGID。那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。
SGID主要用在目录上-----如果用户在此目录下具有w权限的话,使用者在此目录下建立新文件,则创建的这个文件的群组与此目录的群组相同
#sticky == 1 (t权限) 权限控制
这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除
设置特殊权限
a、字符---语法:
chmod u+s file
suid 普通用户通过suid提权 <针对文件>二进制的命令
在进程文件(二进制,可执行的命令文件)上增加suid权限
# chmod u+s /usr/bin/cat
# chmod u+s /usr/bin/rm
[root@xiaoqiang ~]# su - alice
Last login: Wed Nov 6 17:40:40 CST 2019 on pts/0
[alice@xiaoqiang ~]$ cat /root/file1.txt
123
[alice@xiaoqiang ~]$ rm -rf /root/file1.txt
chmod u+s dir
chmod g+s dir
chmod o+t dir
b、数字
chmod 4777 file
chmod 2770 dir
chmod 1770 dir
取消提权:
chmod u-s /usr/bin/rm
chmod g-s die
chmod o-t die
目前两种给普通用户提权手段:
sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。
开放所有命令使用权
配置解释:
root表示用户名
第一个 ALL 指示允许从任何终端、机器访问 sudo
第二个 (ALL) 指示 sudo 命令被允许以任何用户身份执行
第三个 ALL 表示所有命令都可以作为 root 执行
[root@xiaoqiang ~]# visudo #打开配置文件vim /etc/sudoers
90 ##
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL #系统自带
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容NOPASSWD 不用执行密码使用sudo
94 ## Allows members of the 'sys' group to run networking, software,
测试
[root@xiaoqiang ~]# su - jack
Last login: Wed Nov 6 22:04:46 CST 2019 on pts/2
[root@xiaoqiang ~]$ sudo mkdir /test1
开放个别命令使用权ACL
[root@xiaoqiang ~]# visudo
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 huihui ALL=(ALL) NOPASSWD:ALL
94 xiexie ALL=(ALL) NOPASSWD:/usr/bin/mkdir, /usr/bin/rm, /usr/bin/touch
95
96 ## Allows members of the 'sys' group to run networking, software,
测试:
[root@xiaoqiang ~]# su - alice
Last login: Fri Jul 24 00:52:13 CST 2020 on pts/1
[huihui@xiaoqiang ~]$ touch /file
touch: cannot touch ‘/file’: Permission denied
[huihui@xiaoqiang ~]$ sudo touch /file
[huihui@xiaoqiang ~]# usermod -aG wheel xiaxia
gpasswd -a xiaoqiang wheel
#第二种配置权限的方法,给用户追加wheel,轮子组
设置和查看ACL
设置使用setfacl命令:
设置使用setfacl命令。
setfacl [options] u:[用户列表]:[rwx]目录/文件名 #对用户设置使用u
setfacl [options] g:[组列表]:[rwx] 目录/文件名 #对组设置使用g
选项说明:
-m:设定 ACL 权限(modify)
-x:删除指定的ACL权限,可以指定用户、组和文件来删除(remove)
-M:写了 ACL条目的文件,将从此文件中读取ACL条目,需要配合-m,所以-M指定的是modify file
-X:写了 ACL条目的文件,将从此文件中读取ACL条目,需要配合-X,所以-X指定的是remove file
-n:不重置mask
-b:删除所有的ACL权限
-d:设定默认ACL权限,只对目录有效,设置后子目录(文件)继承默认ACL,只对未来文件有效
-k:删除默认ACL权限
-R:递归设定ACL权限,只对目录有效,只对已有文件有效
• setfacl –m u:用户名:权限 <文件名> 设置某用户名的访问权限
setfacl -m u:user1:rwx xx
• setfacl –m g:组名:权限 <文件名> 设置某个组的访问权限
setfacl -m g:group1:rwx xx
• setfacl –x u:用户名 <文件名> //取消某用户的访问权限
• setfacl –x g:组名 <文件名> //取消某个组的访问权限
❉↑这时是将这个user或group的ACL整个删除,如果只是想删除某一个权限,还是需要setfacl -m来进行重新设置
setfacl -b xie.log 删除所有acl附加条目
查看使用:getfacl <文件名> #获取文件的访问控制信息
隐藏权限
[root@xiaoqiang~]# touch file1 file2 file3
1.查看文件属性
[root@xiaoqiang ~]# lsattr file1 file2 file3
---------------- file1
---------------- file2
---------------- file3
2.设置权限
[root@xiaoqiang ~]# chattr +a file1 #不允许修改,只允许追加
[root@xiaoqiang ~]# chattr +i file2 #不允许做任何操作
[root@xiaoqiang ~]# chattr +A file3
[root@xiaoqiang ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖或截断这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间
取消权限
[root@xiaoqiang ~]# chattr -a file1
[root@xiaoqiang ~]# chattr -i file2