Linux系统基础-vim编辑器-获取帮助的方式
介绍:类Unix操作系统,基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,Linux继承了Unix以网络为核心的设计思想,性能稳定的网络操作系统。Linux词本身只表示Linux内核。
[root@localhost~]#
- 整体:Linux 的 bash解析器终端显示主机名和用户标识
- root:root 用户登录,表示当前用户叫 root(系统管理员账户,类似Windows的administrator用户)
- localhost:当前使用的主机名叫 localhost
- ~:当前位置,~表示家
以下述内容为例:
[root@localhost ~]# ll anaconda-ks.cfg
-rw-------. 1 root root 1645 7月 17 19:07 anaconda-ks.cfg
-:普通文件
d:目录文件
l:符号链接,跨越不同的文件系统,(软连接)
s:套接字文件,用于进程间通信
p:管道文件,连接两个进程
c:字符设备文件
b:块设备文件,存储数据的文件
r:4-读权限
w: 2-写权限
x: 1-执行权限
一个文件能不能被删除,取决于上层目录的权限
下面是selinux相关内容:
[root@localhost ~]# vim /etc/selinux/config # selinux配置文件
[root@localhost ~]# setenforce #只能临时修改selinux
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@localhost ~]# getenforce #获取selinux开启的状态
Permissive
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: disabled
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
SELinux有三种模式:Enforcing, Permissive 和 Disable,
Enforcing模式就是应用SELinux所设定的Policy,所有违反Policy的规则(Rules)都会被SELinux拒绝;
Permissive还是会遵循SELinux的Policy,但是对于违反规则的操作只会予以记录而并不会拒绝操作;Disable 顾名思义就是完全禁用SELinux;
硬链接数仅指示文件被链接的次数,而不是文件被打开或使用的次数,1表示被链接1次
[root@localhost tmp]# ln aa.txt tt.txt
[root@localhost tmp]# ln -s /tmp/aa.txt /tmp/cc.txt
硬链接是指多个文件名,通过同一个iNode节点指向同一个文件数据块,
符号链接则是指一个特殊的文件,其中包含了指向另一个文件的路径。
符号链接和硬链接都是通过链接文件看到源文件内容;
符号链接源文件不可以删除,移动;硬链接可以删除,移动;
链接文件权限和源文件不同、iNode号不同;
硬链接权限和源文件、iNode号相同;
符号链接可以对目录、跨文件系统操作;硬链接不可以;
- 5.文件拥有者
- 6.文件所属组
- 7.文件的大小
- 8.文件的最后一次修改时间
- 9.文件名
三种基本模式:
命令模式:y复制 d删除 p粘贴 gg首行 G尾行 ^行首 $行尾
-u 撤回,一直撤销到打开文件的时间点 ,撤销多了 ctrl+r 重做
:75G 定位到75行
:d gg 删除当前行到行首
:d G 删除当前行到行尾
输入模式:
I/i当前字符/行前输入;
O/o当前行的上/下行输入;
A/a当前字符/行后;
S/s删除当前字符/行后输入;
末行模式:
:q 退出 :q!强制退出
w 保存 :w!强制保存
wq 保存并退出
wq!强制保存并退出
:w /tmp/xx.txt 另存
:2,5w /tmp/xx.txt 另存2-5行,另存意义在于存文件某一部分
:r /tmp/xx.txt 追加打开一个文件,追加后两个文件内容在一个文件下显示
查找:
/ab n 下一个 N 上一个(?也能查找)
替换: % 所有行 s交换 g 全局 c交互式
:%s/ab/XX/gc 将文章中所有ab替换成XX
:%s/^ *// 删除文件中所有开头的空格
:%s/ //g 替换文件中所有的空格,删除所有空格
:%s /^/#/ 注释掉所有行
:%s/[0-9]/@/g 将文件所有的数字替换成@
:%s/^/#/g 在每一行开头加一个#表示注释这些行
:%s/$/-/ 在每行结尾添加-
:%s/\n// 将文件所有行变成1行
删除:
: 5d 删除第5行
:30,50d 删除30到50行
:g/abc/d 删除含有abc的行 g就是全局,加/分开,使结构更易于区分
: g/^$/d 删除所有的空行
: g/^\s*$/d 删除所有的空白行 ^\s*$ :^表示行首 \s表示space *表示制表符 $表示行尾
功能配置文件:vim /etc/vimrc
:set nu 显示行号 :set nonu 不显示行号
:set autoindent 自动缩进
:set list 显示制表符
:set tabstop=4 控制制表符长度
:set ignorecase 忽略大小写
特殊模式-多文件操作
同屏打开多个文件-Ctrl+w+w 切换文件
[localhost ~]# vimdiff 123.txt abcd.txt
[localhost ~]# vim -O 123.txt abcd.txt 横向同屏打开多个文件
vimtutor查看vim手册
账号的三种类别
账号都会对应一个组,就好比人降生会有一个家庭,每个账号必有uid对应一个gid
管理员账号: uid=0 root
系统账号: uid=1-999 --针对服务的账号
普通账号: uid=1000-65534 --用户创建
管理组: gid=0
系统组: gid=1-999
普通组: gid=1000-65534
查看用户配置文件:vim /etc/passwd
[root@localhost ~]# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:用户名
x:密码占位符;删除密码占位符就不会验证密码
0:uid--利用uid区分账号种类
0:gid
root:-c 描述
/root: -d 家目录
/bin/bash: -s交互式shell (shell/sbin/nologin非交互式shell,不允许用户登录系统指定的shell
查看组配置文件: vim /etc/group
[localhost ~]# groupadd east
[root@localhost ~]# groupadd -g 3000 wast
[root@localhost ~]# vim /etc/group
70 stapdev:x:158:
71 azirapha:x:1000:
72 east:x:1001:
73 wast:x:3000:
密码配置文件: vim /etc/shadow
root:$6$P2WGSLB8FejltVOQ$9NNNH1Utjs79HaxqrAMqw7oBtS0c6v9e3T83EG5XCu2.kA7zW.GxYbz5C9fo61S/Hphiu0xjAL5IdBkd0eeu0/::0:99999:7:::
root:用户名
$../:密码
:最后一次修改密码时间
0:密码的修改间隔
99999:密码有效期,99999天 相当于永不过期了
7:密码过期前警告
:账号有效期
:保留,未做任何设定
/etc/login.defs
/etc/login.defs是Linux系统中一个重要的配置文件,存储了与用户登录和密码策略相关的设置。
在这个文件中,可以定义各种参数来影响用户登录和系统身份验证的行为;
(该文件用于定义系统登录过程中的默认值和参数,影响所有用户的登录行为)
/etc/default/useradd 新建用户默认配置文件
用于指定新用户时的默认行为和属性
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
验证身份
[root@localhost ~]# whoami #当前用户是谁
root
[root@localhost ~]# who i am #原始登录用户是谁
root pts/0 2023-08-13 10:53 (:0)
[root@localhost ~]# who #显示所有终端登录的账号
root :0 2023-08-12 18:36 (:0)
root pts/0 2023-08-13 10:53 (:0)
[root@localhost ~]# w
#当前系统时间 开机时间 登录用户总量 平均负载
13:02:53 up 3:29, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 六18 ?xdm? 4:38 0.47s /usr/libexec/gn
root pts/0 :0 10:53 5.00s 0.66s 0.05s w
[root@localhost ~]# last # 登录用户的总信息
root pts/0 :0 Sun Aug 13 10:53 still logged in
root pts/0 :0 Sat Aug 12 18:53 - 19:34 (00:40)
root :0 :0 Sat Aug 12 18:36 still logged in
reboot system boot 3.10.0-1062.el7. Sat Aug 12 18:35 - 13:06 (18:30)
root pts/0 :0 Sat Aug 12 11:14 - 18:35 (07:21)
root pts/0 :0 Thu Aug 10 21:49 - 11:13 (1+13:24)
root :0 :0 Thu Aug 10 21:48 - 18:35 (1+20:46)
[root@localhost ~]# lastlog #所有账号最后一次登陆时间登记
用户名 端口 来自 最后登陆时间
root pts/0 日 8月 13 11:18:20 +0800 2023
bin **从未登录过**
id查看用户信息
[root@localhost ~]# id root id查看用户信息
uid=0(root) gid=0(root) 组=0(root)
[root@localhost ~]# id azirapha
uid=1000(azirapha) gid=1000(azirapha) 组=1000(azirapha),10(wheel)
su 切换登录身份
使用一个普通账户telnet远程登录Linux系统中,如何改变身份以root权限管理系统
:su - telnet
添加用户:useradd
#添加用户 tom uid=5000 属于easthome组 描述 test user 家目录/mnt下 shell为tcsh
[root@localhost ~]# useradd -u 5000 -g easthome -c 'test user' -d /mnt/tom -s /bin/tcsh tom
描述是需要加单引号,注意格式
# -M 不创建家目录 /sbin/nologin 非交互式shell
[root@localhost ~]# useradd -M -s /sbin/nologin test
修改用户信息usermod
[root@localhost ~]# usermod -u 2500 abc1
[root@localhost ~]# usermod -g 3000 abc1
[root@localhost ~]# usermod -c "east east" abc1
[root@localhost ~]# usermod -s /bin/tcsh abc1
[root@localhost ~]# usermod -m -d /mnt/abc1 abc1 --修改家目录 -d:指定abc1 移动到/mnt/abc1路径
[root@localhost ~]# usermod -l user2 user1 #将自己原来的登录名由 user1改为user2
删除用户 userdel
删除一个用户并同时删除用户的主目录:usermod -r
删除用户user并同时删除用户的主目录下所有的文件:usermod -r user
添加组 groupadd
[root@localhost ~]# groupadd redhat
[root@localhost ~]# groupadd -g 3000 east -g 指定gid
修改组 groupmod
[root@localhost ~]# groupmod -g 6000 east 修改gid
[root@localhost ~]# groupmod -n neweast east 修改组名
删除组 groupdel
删除组: 如果组里有其它账号,该组不能删除
[root@localhost ~]# groupadd abc1
[root@localhost ~]# useradd aa -g abc1
[root@localhost ~]# groupdel abc1
groupdel:不能移除用户“aa”的主组
[root@localhost ~]# id aa
uid=1001(aa) gid=3001(abc1) 组=3001(abc1)
[root@localhost ~]# userdel aa
[root@localhost ~]# groupdel abc1
密码设置
[root@localhost ~]# passwd user #方式1
[root@localhost ~]# passwd tom
更改用户 tom 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo 123 | passwd --stdin user #方式2
[root@localhost ~]# echo 1234 |passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
锁账号密码
[root@localhost ~]# usermod -L tom #锁定用户账号
[root@localhost ~]# usermod -U tom #解锁锁定账号
[root@localhost ~]# passwd -l tom #锁定用户密码
锁定用户 tom 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u tom #解锁用户密码
解锁用户 tom 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S tom #查看密码状态
tom PS 2023-08-13 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# usermod -L tom 配置文件中一个!锁定账号
[root@localhost ~]# passwd -l jerry 两个!!锁定密码
[root@localhost ~]# vim /etc/shadow
tom:!$6$R08QkoD/$/3nQr1Nm/56yYlMUfcIPQYF9pY1jlqHaj..k60B80FKr6oEP6v6NpBv.0Hs54rK3tD0dVKKUoXuYpO3kfk6YL/:19582:0:99999:7:::
jerry:!!$6$ylzQ0pTy$AwGSIB88/q7F.R9ADOLxjdK424zRK4CQkuHu7yzLYs/Lf.73Fvw902dvo1IQwbcxdUqwVBTIM/Pl/jHIn3bHU/:19582:0:99999:7:::
手动管理账号:
[root@localhost ~]# groupadd -g 10000 xxcc 创建一个指定的组
[root@localhost ~]# vim /etc/group
xxcc:x:10000:
"/etc/group" 75L, 1025C
[root@localhost ~]# useradd -u 10000 -g xxcc jerry 组下添加一个用户
[root@localhost ~]# vim /etc/passwd
jerry:x:10000:10000::/home/jerry:/bin/bash
[root@localhost ~]# id jerry
uid=10000(jerry) gid=10000(xxcc) 组=10000(xxcc)
[root@localhost ~]# su -jerry
su:警告:无法个更改到,没有那个文件或目录,这种情况下:
[root@localhost mnt]# mkdir /home/jerry #创建家目录
[root@localhost mnt]# cp /etc/skel/.bash* /home/jerry/ #对家进行装修
[root@localhost mnt]# echo 123 |passwd --stdin jerry #没有密码就好比房子是租的,没权限
练习:
1.添加用户时,默认家目录/opt, 默认shell改成/bin/tcsh
2.添加组 red yellow blue orange
3.添加用户 dalong 主组 color 附加组red yellow blue orange
[root@localhost ~]# useradd dalong -d /opt/dalong -s /bin/tcsh
[root@localhost ~]# groupadd red
[root@localhost ~]# groupadd yellow
[root@localhost ~]# groupadd blue
[root@localhost ~]# groupadd orange
[root@localhost ~]# usermod -a -G red,yellow,blue,orange dalong
[root@localhost ~]# id dalong
uid=10001(dalong) gid=10001(dalong) 组=10001(dalong),10002(red),10003(yellow),10004(blue),10005(orange)
4.修改附加组 要求只有color
修改权限chmod
+/- 在现有权限基础上添加一个或者减少一个对应权限
chmod u+r file/dir ------
chmod u+r,g+w file/dir ---- chmod ug+rw file/dir
chmod u+r,g-w,o-x file/dir
chmod ugo+rwx file/dir ====== chmod a+rwx file/dir
= 不考虑现有权限 而是直接覆盖现有权限 递归-R
chmod u=r file/dir ====
chmod u=r,g=w file/dir ==== chmod ug=rw file/dir ===
chmod u=r,g=w,o=x file/dir ===chmod ugo=rwx file/dir === chmod a=rwx file/dir
删除所有文件 rm test/*
修改拥有者chown与所属组chgrp : 递归修改 -R
[root@client ~]# useradd hh
[root@client ~]# id hh
uid=1001(hh) gid=1001(hh) 组=1001(hh)
[root@client ~]# chown hh aa.txt # chown 修改文件拥有者
[root@client ~]# ll aa.txt
-rw-r--r--. 1 hh root 0 8月 15 17:34 aa.txt
[root@client ~]# useradd xixi
[root@client ~]# id xixi
uid=1002(xixi) gid=1002(xixi) 组=1002(xixi)
[root@client ~]# chgrp xixi aa.txt # chgrp 修改文件所属组
[root@client ~]# ll aa.txt
-rw-r--r--. 1 hh xixi 0 8月 15 17:34 aa.txt
[root@client ~]# ll bb.txt
-rw-r--r--. 1 root root 0 8月 15 17:38 bb.txt
[root@client ~]# chown hh.xixi bb.txt # 同时修改拥有者和所属组
[root@client ~]# ll bb.txt
-rw-r--r--. 1 hh xixi 0 8月 15 17:38 bb.txt
附加组setfacl
setfacl 是一个用于设置文件和目录的访问控制列表(ACL)的命令行工具。
ACL是Linux系统中一种更灵活的权限控制机制,允许对文件和目录设置更细粒度的访问权限。
使用 setfacl 命令,你可以为用户和用户组分配不同的权限,包括读取、写入和执行。
[root@client ~]# setfacl -m u:xixi:rw aa.txt # 设置文件权限
[root@client ~]# ll aa.txt
-rw-rw-r--+ 1 hh xixi 0 8月 15 17:34 aa.txt # 有+号,表示有在使用setfacl
[root@client ~]# mkdir /tmp/test # 创建新的文件
[root@client ~]# setfacl -m u:xixi:rw /tmp/test # 设置目录权限
[root@client ~]# getfacl /tmp/test/ # 获取 facl 设置
# file: tmp/test/
# owner: root
# group: root
user::rwx
user:xixi:rw-
group::r-x
mask::rwx
other::r-x
[root@client ~]# setfacl -m m:rw /tmp/test # -m modify 表示修改; -m mask
[root@client ~]# getfacl /tmp/test/
# file: tmp/test/
# owner: root
# group: root
user::rw-
user:xixi:rw-
group::r-x #effective:r--
mask::rw-
other::r-x
[root@client ~]# setfacl -m g:xixi:rw /tmp/test # -g 设置额外组的权限
[root@client ~]# getfacl /tmp/test/
# file: tmp/test/
# owner: root
# group: root
user::rw-
user:xixi:rw-
group::r-x
group:xixi:rw- # 额外组
mask::rwx
other::r-x
[root@client ~]# setfacl -x g:xixi /tmp/test # -x删除额外权限
[root@client ~]# getfacl /tmp/test
getfacl: Removing leading '/' from absolute path names
# file: tmp/test
# owner: root
# group: root
user::rw-
user:xixi:rw-
group::r-x
mask::rwx
other::r-x
[root@client ~]# ll aa.txt
-rw-rw-r--+ 1 hh xixi 0 8月 15 17:34 aa.txt
[root@client ~]# setfacl -b aa.txt # -b去掉所有额外用户和组并且去掉+标记
[root@client ~]# ll aa.txt
-rw-r--r--. 1 hh xixi 0 8月 15 17:34 aa.txt
[root@client ~]# getfacl aa.txt
# file: aa.txt
# owner: hh
# group: xixi
user::rw-
group::r--
other::r--
附加组:
主组一定是附加组,主组是用来定义创建文件时文件的所属组,附加组用来比对权限
[root@localhost ~]# usermod -a -G east jerry 在现有附加组基础上添加新的附加组
[root@localhost ~]# usermod -G new jerry 覆盖现有所有的附加组(除了主组对应附加组)
gpasswd 修改组密码
[root@localhost ~]# groupadd boss
[root@localhost ~]# gpasswd boss
正在修改 boss 组的密码
新密码:
请重新输入新密码:
高级权限
suid:set user id
功能: 任何用户再执行拥有suid权限的二进制可执行文件(命令)时,都以root管理员的身份去执行)
0表示去除suid权限,4表示添加suid权限
操作对象只能是拥有者chmod u+s file,只能对文件(二进制可执行文件)
[root@localhost ~]# chmod u+s /bin/cat 所有用户都可以看/etc/shadow文件内容
sgid: set group id
功能: 任何用户在拥有sgid权限的目录下创建的文件都要继承该目录的组
0表示去除sgid权限,2表示添加sgid权限
[root@localhost ~]# chmod g+s /tmp/test
文件系统属性
[root@localhost tmp]# chattr +i /tmp/aa.txt
[root@localhost tmp]# lsattr /tmp/aa.txt
[root@localhost tmp]# chattr -i /tmp/aa.txt
i属性文件: 不能删除 不能修改 不能添加新内容 不能剪切 不能修改权限,拥有者所属组..
只能复制
i属性目录: 不能删除 不能重命名 不能够剪切目录下的文件 不能创建新文件
[root@localhost tmp]# chattr +a /tmp/aa.txt
[root@localhost tmp]# lsattr /tmp/aa.txt
[root@localhost tmp]# chattr -a /tmp/aa.txt
a属性文件: 不能删除 不能修改 不能剪切 不能修改权限,拥有者所属组..
只能复制,能添加新内容
a属性目录: 不能删除 不能重命名 不能够剪切目录下的文件
可以创建新文件
/根下的目录功能和作用
/bin 普通用户可执行目录--一般存放可执行程序--有很多命令如:mv cat..
/sbin 系统可执行目录--仅root用户可访问
lib库文件目录存放着 Linux 所必须的库文件, 存放着内核模块和系统最基本的动态链接共享库,命令和用户编写的应用程序要使用这些库文件。几乎所有的应用程序都须要用到这些共享库
/lib 32位库文件目录--公共代码库
/lib64 64位库文件目录
/proc 伪文件系统目录--实际上不存在的目录,由核心内存产生,一般用来存储系统运行信息文件。系统资源以文本信息形式存在
/sys 类proc文件系统的特殊文件系统目录--通过一定的组织结构向用户提供详细的内核数据结构信息
/usr 应用程序目录--*Unix Software Resource*的缩写,也就是 Unix 操作系统软件资源目录,软件资源目录
/etc 配置文件目录
/var 服务器数据及日志的文件目录--存放可以改变的数据
/boot 系统启动时环境文件目录--核心文件
/root 管理员的家目录
/home 普通用户家目录
/dev 块设备和字符设备存储目录
/run 进程号与锁文件目录--存放pid以及锁文件信息
/tmp 系统/用户创建的临时文件目录--重启系统时都将被删除
/mnt 临时挂载目录--一般是空目录,通用挂载点
/opt 第三方软件目录--由用户选择将那些文件或软件放在此目录,此处也要对应相应的静态文件
/media 可移动媒体设备
/srv 服务器数据目录
/ 555
/root 550
/etc/shadow 000
/etc/passwd 644
/etc/group 644
/home/robin 700
/usr 755
/var 755
/etc 755
/tmp 1777
root管理员创建文件 644
root管理员创建目录 755
普通用户创建文件 664
普通用户创建目录 775
用户创建的满权限 666
文件满权限 777