修改密码
普通用户使用passwd
,后面不能带参数,且修改后的密码受密码策略的影响(例如不能少于8位等)
root 用户可以使用passwd 用户名
的方式修改任意用户的密码(包括它自己),且不受密码策略的影响
命令与帮助
命令:用来实现某个功能
选项:用来修饰命令的功能
参数:你所要操作的对象(文件/目录/用户 …)
多个命令用;
分割
选项的格式:
-l 选项的短格式
–lock 选项的长格式
短格式与长格式:
联系:短格式是为了方便记忆
区别:短项的格式可以缩写到一起,如ls -a
和ls -s
可以合并写成ls -as
,但长格式不能缩写到一起。
搞清楚命令的含义
whatis 命令:显示命令的简短描述
whatis ls
,whatis cal
查询命令的选项
--help
:查询命令本身的帮助信息
man
:查询系统帮助手册
info
:查询 info 文档
例如
1 | [student@example ~]$ ls --help |
- 带中括号的是可选项
- 大写表示一个必选项
- <>表示一个变量
- … 表示一个列表,表示可以接多个选项或参数
- [a|b|c]多选一
1 | [student@example ~]$ date --help |
[+FORMAT]
表示要用特定的格式
date `+%Y-%m-%d %H:%M:%S`
文件系统
重要目录:
/root:root 的家目录
/home/username:普通用户的家目录
/usr:
/usr/bin:用户命令
/usr/sbin:系统管理员命令
/usr/local:本地自定义软件安装目录
/etc/:系统的配置文件
/var:系统服务的数据,如日志文件
/tmp:系统临时文件目录
/boot:系统启动所需要的文件
/dev:包含一些特殊的设备文件,供系统用于访问硬件
/proc和sys:反应当前系统的运行状态
路径
据对路径:从根开始
相对路径:从当前目录开始
cd改变目录
pwd 显示当前工作目录
改变到上层目录
cd …
改变到上层工作目录
cd -
改变到某个用户的主目录
cd ~username
一键回家目录
cd
拷贝文件
cp file destination:
destination说明:
- 如果目标是一个目录,该拷贝把文件放到该目录下
- 如果目标是一个文件,该拷贝覆盖目标文件
- 如果目标不存在,该拷贝被重命名
cp -r:拷贝目录
创建文件
touch:创建一个空文件或者更新一个文件的时间戳
时间戳:
Access Time:文件最后一次被访问的时间 atime
Modify Time:文件的内容最后一次被修改的时间 mtime
Change Time:文件的属性最后一次改变的时间 ctime,其中文件的属性包括文件的大小、权限、时间戳
stat查看文件信息
删除文件
rm -r directory(递归)
rm -f file(强制)
创建目录
mkdir 创建目录
PS:Access、Modify、Change的区别
Access 意思是“访问”。
在终端上用 cat、more 、less、grep、sed、 cp 、file 一个文件时,此文件的 Access 的时间记录都会被更新(空文件例外),纯粹的 access 是不会影响 modify 和 change,但会受到 modify 行为的影响。
用ls -lu看到的文件时间是最近一次 access 的时间。对于目录而言,只是进入目录的话不会改变它的 access 时间,但只要用ls查看了此目录的内容(无论在何处),这个目录的 access 时间就会被更新。
Modify 意思是“更改(内容),“或者“写入”。
当更改了一个文件的内容的时候,此文件的modify的时间记录会被更新。用 ls -l 看到的文件时间是最近一次 modify 的时间。modify 的行为是三个行为中最有影响力的行为,它发生以后,会使文件的 access 记录与 change 记录也同时得到更新。对于目录也是如此。
Change 改变(状态或属性)。
对一个文件或者目录作 mv、chown、chgrp 操作后,它的 Change 时间记录被更新,change 时间会受到 modify 行为的影响。用 ls -lc 看到的文件时间是最近一次 change 的时间。
用户组和权限管理
UID 0 才是系统的超级用户
root 用户的 UID 0
普通用户的 UID 通常从 1000 开始
系统的用户名和UID信息通常存储在 /etc/passwd 文件中
1 | root:x:0:0:root:/root:/bin/bash |
用户名:密码占位符:UID:GID:用户描述信息:用户家目录:运行的第一个应用程序
用户描述信息,UID 在1000以后的才会显示
运行的第一个应用程序,登录 shell
/bin/bash 登录
/sbin/nologin 禁止登录
组
每一个组被分配一个 gid,保存在 /etc/group
用户组:
私有组,属组 在创建用户时一并指定的组
附加组,公共组 将指定的用户加入到组
每一个用户都有自己的私有组,可以将用户添加到别的组,该组称为用户的附加组;同一组中的所有用户能共享属于这个组的文件。
1 | root:x:0: |
组名:组的密码占位符:GID:组内的用户(附加组),多个用户用逗号隔开
用户
创建一个 UID 为2000的用户
1 | useradd -u 2000 user2 |
创建一个 UID 为2000,GID 为2000,附加组为1000,用户描述信息为 demo user, 家目录为 /home/user5,并且禁止登陆,用户名为 user5 的用户
1 | useradd -u 2000 -G 1000 -c "demo user" -d /home/user5 -s /sbin/nologin user5 |
usermod 修改用户信息,用法与 useradd 类似;usermod -aG
追加一个附加组
userdel 删除用户(只是删除了 /etc/passwd 中的条目,用户的相关文件(家目录,邮箱)都没有删除,如果想删除,需要用 userdel -r
)
groupadd 添加用户组
groupmod 修改组的信息
groupdel 删除组
groupmems 管理组内成员
用户密码文件 /etc/shadow
两个’!!'表示没设置密码
生成 SHA512 加密的密码
openssl passwd -6 huawei
修改用户密码的信息 chage user1
gpasswd 去设置组的密码
小节:
创建一个新用户,系统会修改6个文件
/etc/passwd 密码文件
/etc/shadow 用户密码文件
/etc/gshadow 组密码文件
/etc/group 组文件
/home/ 家目录下,用户的家目录
/var/spool/mail 给用户发送邮件的文件
权限
1 | drwxr-xr-x. 2 student student 6 Jul 10 15:20 Desktop |
第1位:d
表示目录,-
表示文件
第2-4位:文件拥有人的权限,'r’可读,'w’可写,'x’可执行
第5-7位:拥有组的权限
8-10位:其他人的权限
11位:SELINUX 安全标记
12位:硬链接
13位:拥有人
14位:拥有组
15位:大小
16为:文件最后一次被修改的时间
17位:文件名
r,w,x
-
r (read contents in directory):表示具有读取目录结构清单的权限,所以如果你具有读取一个目录的权限时,就代表你可以查询目录下的文件,所以你就可以使用 ls 将目录的内容显示出来。
-
w(modify contents of directory):写入权限表示你具有对文件目录和目录中的文件进行修改的操作,主要包括
-
x(access directory):这执行权限有啥用?总不能目录也能够被执行吧?其实并不是这样,执行权限表示着你有没有权限进入到指定目录下,也就是 cd(change directory) 。
1 | chmod = 赋权,精确指定 |
a是 all 的意思
1 | chmod u+r,g+r,o+r |
三者等价
chattr 为文件添加特殊权限,即使 root 用户,rm -rf也无法删除
1 | chattr +i test.txt |
i 属性即不能对此文件进行增加,修改,删除
移除该特殊权限
chattr -i file10
更改文件拥有人/拥有组
chown [OPTION]… [OWNER][:[GROUP]] FILE…
递归修改子目录/文件的拥有权
chown -R
只能修改拥有组的命令:
chgrp
删除一个文件的时候,并不是看用户对该文件的权限,而是用户对该文件所在文件夹的权限。
IO和管道
输出重定向
file 重定向 stdout 以覆盖文件
file 重定向 stdout 以追加到文件
2> file 重定向 stderr 以覆盖文件
&> file 全部输出重定向
&>> 全部输出重定向并追加到同一个文件
管道符(|)能连接命令:
command1 | command2 | command3
将 command1 的标准输出作为 command2 的标准输入而不是输出到屏幕
例:
1 | ls /etc/ | more |
错误的输出不能通过管道
| tee 三通管道
输入重定向
使用 << END 从键盘重定向多行到 STDIN,接收所有的标准输入知道输入 END
字符
cat >> demo.txt << END
文本处理
vim 高级文本编辑器
显示行号:
set nu
取消显示
set nonu
跳转到文件尾
G
跳转到文件首
gg
跳转到所在行行首
Home
跳转到所在行行尾
End
跳转到第10行
10 G
复制当前行
yy
将缓冲区中的内容粘贴10份
10 p
从上往下查找关键字 java
/java
从下往上查找关键字 java
?java
撤销:
u 取消最近的一次操作
U 撤销光标所在行的更改
Ctrl + r 取消最后一次“撤销”
设置高亮查找后的内容
set hls
取消查找后的颜色标记
set nohls
多行注释:
Ctrl + v 选中列
按上下键选择行,进行标记
按大写I
输入#
按ESC
Ctrl+w,s
,横向分割屏幕
Ctrl+w,v
,纵向分割屏幕
工具
-
cat
cat 打印一个或多个文件到标准输出
cat file显示行号
cat -n file将多个文件合并
cat file1 file2 > file3 -
more
分页浏览文件内容(按空格翻页)
more filemore 可以用在任意屏幕显示不下的情况进行分页,用管道
last | more -
less
与 more 类似,但支持搜索ps: man 命令是采用 less 来分页的
-
head
查看一个文件的前10行并添加行号
cat -n /etc/passwd | head -
tail
查看一个文件的前10行并添加行号
cat -n /etc/passwd | tail使用 -f 选项将文件末尾追加的内容显示在当前终端,对于监控日志文件非常有用。
取文件的15-20行
cat -n /etc/passwd | head -n 20 | tail -n 6 -
grep 通过关键字来提取文本
grep root /etc/passwd
正则表达式
egrep 支持扩展表达式,相当于 grep -E
监控多个关键字
tail -f /var/log/message | grep -E “error | warning”
cut 提取列或字段
cut -d “:” -f1 /etc/passwd
使用 -d 选项来指定分隔符
cut -d “:” -f1,6 /etc/passwd
bash shell
Ctrl + c 中断命令的执行
Ctrl + l 清屏
Ctrl + a 跳转到命令首
Ctrl + e 跳转到命令尾
Ctrl + u 删除或剪切光标之前的内容
Ctrl + k 删除或剪切光标之后的内容
Ctrl + y 粘贴 Ctrl + u 或 Ctrl + k 剪切的内容
本地变量:
定义:变量名=变量值
引用:$变量名 或 ${变量名}
查看:echo $变量名
查看所有变量:set
取消变量:unset 变量名
查看所有别名:alias
用户登录shell类型
-
登录shell
- 用户登录,包括图形登录
- su - 切换用户
-
非登录shell
- su 切换用户
- 打开图形终端
- 执行脚本
变量文件
-
登录shell
- /etc/profile
- ~/.bash_profile
- /etc/bashrc
- ~/.bashrc
-
非登录shell
- /etc/bashrc
- ~/.bashrc
登出 shell
~/.bash_logout
实现退出时清理痕迹
在 .bash_logout 里添加
1 | history -c |
进程管理
进程 ID(PID)唯一标识进程
UID,GID 和 SElinux 上下文决定文件系统的存取权限
- 通常继承执行用户的权限
- 子进程继承父进程的属性信息
用户访问一个文件,权限是怎么匹配的?
例如,admin用户执行vim /etc/passwd
1 | UID GID |
最终是通过匹配 vim 进程和文件的 UID 和 GID 来进行文件的访问。
但是存在如下的情况
1 | UID GID |
那么此时,匹配的是其它人的权限
ps 查看进程信息
- a 查看所有终端的进程
- u 打印进程所有者信息
- x 查看不属于任何终端的信息
- -e 查看系统所有进程
- -f 查看额外的信息
- -o 指定格式输出
常用组合:ps aux
或者ps -ef
执行ps aux
后
1 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
第一列,USER:进程拥有人,一般谁来执行某个进程,该进程的拥有人就是谁。
第二列,PID:进程 PID,是进程的唯一标识,但是该 PID 可能会变,比如每次重启一个服务,会被重新分配一个 PID (可以使用 systemctl reload service_name 的方式,使进程不会中断,从而 PID 与上次相同)。pidof service_name
可以查看进程 PID。
第三列,%CPU,CPU 占用率。
第四列,%MEM,内存使用百分比。
第五列,VSZ,虚拟使用内存,应用程序申请的内存。
第六列,RSS,应用程序实际使用内存。实际内存不能超过虚拟内存。
第七列,TTY,指的是进程运行在哪个终端。
tty1, tty2:指的是图形和字符界面的控制台
pts:伪终端,图形界面打开的终端,和远程连接打开的终端叫伪终端
?:在终端出现之前就已经出现的进程,不属于任何终端
第八列,STAT,状态。
man ps
,/state
查看进程状态代码。
常见:R,运行;S,休眠;Z,僵尸进程;<,高优先级;N,低优先级;+,前台运行;
第九列,START,进程开始时间。
第十列,TIME,上一次进程持续运行的时间。
第十一列,COMMAND,进程的名字或者运行进程的命令。
ps -eo pid,%cpu,cmd
选择查看指定的列。
top命令
swap 交换分区,虚拟内存:将硬盘的某部分作为内存使用
本质:将内存中暂时访问不到的数据临时存放在swap空间。
pgrep
pgrep
-U 查找某个用户的进程 id
-G 查找某个组的进程 id
-P 根据父进程 id,查找出所有子进程 id
-I 不仅打印 pid,也打印进程名
信号
signal:
15 退出
9 强制退出
1 重读配置文件
19 将后台的进程暂停
通过 pid:kill [signal] pid
通过命令:kill [signal] comm
通过模式:pkill [-signal] pattern
默认是 -15
例如
kill -9 3775
pkill 与 pgrep 语法规则一样
调度优先级
调度优先级决定对 cpu 的访问
进程的 nice 值影响优先级,值范围是-20 ~ 19,缺省为0,低 nice 值意味着高 cpu 优先级。
进程启动的时候,用 nice -n 5 command
修改优先级,例如 nice -n 5 vim file.txt
进程启动后,用 renice 5 PID
更改优先级,例如 renice 5 2789
前台进程放在后台运行
将前台进程放在后台运行,加个&
例如
firefox &
查看所有前台进程在后台运行的进程
jobs
将其恢复前台运行:fg %jobnumber
其中 jobnumber 是通过 jobs 查看得到的
Ctrl + z,将前台运行的进程暂停进入后台
让其在后台继续运行:bg %jobnumber
网络配置
网关的作用:
当需要和其它网段通信时,需要设置网关。网关通常指向本地路由器接口的 IP。
接口类型:
以太网有线接口:en
无线局域网接口:wl
无线广域网接口:ww
ifconfig 或 ip 命令配置网卡,临时生效
network 服务,vim 编辑网卡配置文件,永久生效(systemctl restart network
)
NetworkManager 服务管理网卡,永久生效。该服务提供两种方式去管理,nmtui 是图形化管理,nmcli 命令行管理。
ifconfig 命令
ifconfig
查看激活网卡的信息
ifconfig -a
查看所有网卡(包括被禁用的)信息
ifconfig ens33 up/down
设置网卡激活和禁用
ifconfig ens33 ip/netmask
设置 IP 地址和子网掩码
ip 命令
ip link 管理设备
ip link
查看设备信息
ip link shet ens160 up/down
设置网卡激活和禁用
ip addr 管理地址
ip addr
查看网络地址(addr 可缩写为 a)
ip addr add ip/netmask dev ens160
添加地址
ip addr del ip/netmask dev ens160
删除地址
例如:ip a add 172.25.0.10/24 dev ens160
ip route 管理路由表
ip route
查看路由表信息
ip route add 目标地址ip[/netmask] via 网关地址
添加路由
ip route del 目标地址ip[/netmask]
删除路由
DNS
DNS:将域名解析成 IP 地址;Windows 最多可以配置2个DNS地址,Linux 最多可以配置3个。
DNS 信息存储在 /etc/resolv.conf 里面
nmcli 命令
网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-<name>
,之所以 ifconfig 和 ip 命令不是永久生效,是因为没有写到对应的文件里。
nmcli dev 管理设备
nmcli dev
查看设备状态
nmcli dev connect/disconnect ens160
连接和断开设备
nmcli con 管理配置文件
nmcli con
查看配置文件状态
nmcli con add ifname ens224 con-name ens224-test
添加配置文件(con-name 是配置文件的名字,随便起)
nmcli con mod ens224-test ipv4.addresses 172.25.0.10/24 ipv4.gateway 172.25.0.254 ipv4.dns 172.25.0.254 ipv4.method manual
修改配置文件
之所以设置 ipv4.method 为 manual,是因为默认使用 DHCP 去获取 IP,这样的话手动添加的 IP 地址是不生效的(优先使用 DHCP 获取的)。
nmcli con up ens224-test
激活配置文件使其生效
nmcli con mod ens224-test +ipv4.addresses 172.25.0.11/24
使用 + 增加一个 IP(一个网卡可以配置多个 IP)
nmcli con mod ens224-test +ipv4.dns 8.8.8.8
增加一个 DNS
用 vim 编辑配置文件时,保存之后需要先 nmcli con reload
然后再 nmcli con up ens224-test
配置两台虚拟机之间网络互通
可以把物理机中的虚拟网卡 VMnet1 和 VMnet8 当作虚拟机的交换机(虚拟交换机)。
VMnet1 对应虚拟机设置里的“仅主机模式”,VMnet8 对应虚拟机设置里的“NAT模式”
NAT模式和仅主机模式的区别在于,NAT模式可以将虚拟机的网络请求通过物理机转发出去,从而实现虚拟机上外网。仅主机模式下虚拟机无法上外网。
另外,VMware 还将物理机的网卡做成了虚拟网卡,如果选择“桥接模式”,当虚拟机的网络和物理机的网络在同一网段,那么虚拟机即可直接连接外网。
修改主机名
hostname
查看主机名
hostnamectl set-hostname rhce
修改主机名
会被修改到 /etc/hosname 中
端口
标准服务端口配置文件 /etc/services
netstat
查看某个服务监听在哪个端口,例如 netstat -tuanp | grep httpd
-t:tcp
-u:udp
-l:监听
-a:所有的
-p: 查看 pid 和进程名
-n:显示端口号和 IP 地址,不加显示协议和域名
1 | Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name |
Proto: 使用的协议
Local Address: 本地监听的地址和端口号
Foreign Address: 访问者的地址和端口号
ss 命令用法与 netstat 命令相同。
双网卡绑定
定位:用在服务器端,一张网卡损坏后另一张可以使用。通过某种方式,让两张网卡一起工作。
相关命令,bond 和 team
bond
将两张物理网卡绑定成一个虚拟的网卡
- 创建虚拟网卡
- 给虚拟网卡配 IP, DNS, 网关
- 给虚拟网卡关联两张或多张物理网卡
- 激活虚拟网卡配置文件
举例:
1 | nmcli con add ifname bond0 type bond con-name bond0 mode active-backup miimon 100 |
miion 设置一个时间(单位毫秒),两张网卡互相确认对方是否还正常工作
1 | nmcli con modify bond0 ipv4.addresses 192.168.153.120/24 ipv4.method manual |
1 | nmcli con add ifname ens224 type ethernet slave-type bond con-name bond-port1 master bond0 |
1 | nmcli con up bond0 |
文件 /proc/net/bonding/bond0
可以查看主备
桥接网卡配置
KVM 的虚拟化默认需要我们自己去创建桥接网卡。VMWare自动将物理机的网卡做成了一个桥接网卡,如果我们在虚拟机中建立虚拟机的话,需要手动设置一个桥接网卡以便虚拟机中的虚拟机能访问外网。
- 创建桥接网卡(虚拟机中的网卡)
- 给桥接网卡配置 IP
- 给桥接网卡绑定物理网卡
- 激活桥接网卡配置文件
1 | nmcli con add ifname br0 type bridge con-name br0 |