修改密码


普通用户使用passwd,后面不能带参数,且修改后的密码受密码策略的影响(例如不能少于8位等)
root 用户可以使用passwd 用户名的方式修改任意用户的密码(包括它自己),且不受密码策略的影响

命令与帮助


命令:用来实现某个功能
选项:用来修饰命令的功能
参数:你所要操作的对象(文件/目录/用户 …)

多个命令用;分割

选项的格式:
-l 选项的短格式
–lock 选项的长格式

短格式与长格式:

联系:短格式是为了方便记忆

区别:短项的格式可以缩写到一起,如ls -als -s可以合并写成ls -as,但长格式不能缩写到一起。

搞清楚命令的含义

whatis 命令:显示命令的简短描述

whatis lswhatis cal

查询命令的选项

--help:查询命令本身的帮助信息
man:查询系统帮助手册
info:查询 info 文档

例如

1
2
3
4
[student@example ~]$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
  1. 带中括号的是可选项
  2. 大写表示一个必选项
  3. <>表示一个变量
  4. … 表示一个列表,表示可以接多个选项或参数
  5. [a|b|c]多选一
1
2
3
4
[student@example ~]$ date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.

[+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说明:

  1. 如果目标是一个目录,该拷贝把文件放到该目录下
  2. 如果目标是一个文件,该拷贝覆盖目标文件
  3. 如果目标不存在,该拷贝被重命名
    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\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
2
3
chmod = 赋权,精确指定
+ 在原来的基础上赋权
- 在原来的基础上减权

a是 all 的意思

1
2
3
chmod u+r,g+r,o+r
chmod ugo+r
chmod a+r

三者等价

chattr 为文件添加特殊权限,即使 root 用户,rm -rf也无法删除

1
chattr +i test.txt

i 属性即不能对此文件进行增加,修改,删除

详情见 Linux chattr与lsattr命令详解

移除该特殊权限

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 file

    more 可以用在任意屏幕显示不下的情况进行分页,用管道
    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
2
history -c
echo > ~/.bash_history

进程管理


进程 ID(PID)唯一标识进程
UID,GID 和 SElinux 上下文决定文件系统的存取权限

  • 通常继承执行用户的权限
  • 子进程继承父进程的属性信息

用户访问一个文件,权限是怎么匹配的?

例如,admin用户执行vim /etc/passwd

1
2
3
4
      UID    GID
用户 admin root
进程 admin root
文件 root root

最终是通过匹配 vim 进程和文件的 UID 和 GID 来进行文件的访问。

但是存在如下的情况

1
2
3
4
      UID    GID
用户 root root
进程 named named
文件 root root

那么此时,匹配的是其它人的权限

ps 查看进程信息

  • a 查看所有终端的进程
  • u 打印进程所有者信息
  • x 查看不属于任何终端的信息
  • -e 查看系统所有进程
  • -f 查看额外的信息
  • -o 指定格式输出

常用组合:ps aux或者ps -ef

执行ps aux

1
2
USER      PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root 1 0.0 0.3 244628 13880 ? Ss 12:50 0:02 /usr/lib/syste

第一列,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 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
2
3
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1824/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 910/sshd

Proto: 使用的协议
Local Address: 本地监听的地址和端口号
Foreign Address: 访问者的地址和端口号

ss 命令用法与 netstat 命令相同。

双网卡绑定

定位:用在服务器端,一张网卡损坏后另一张可以使用。通过某种方式,让两张网卡一起工作。

相关命令,bond 和 team

bond

将两张物理网卡绑定成一个虚拟的网卡

  1. 创建虚拟网卡
  2. 给虚拟网卡配 IP, DNS, 网关
  3. 给虚拟网卡关联两张或多张物理网卡
  4. 激活虚拟网卡配置文件

举例:

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
2
nmcli con add ifname ens224 type ethernet slave-type bond con-name bond-port1 master bond0
nmcli con add ifname ens256 type ethernet slave-type bond con-name bond-port2 master bond0
1
nmcli con up bond0

文件 /proc/net/bonding/bond0 可以查看主备

桥接网卡配置

KVM 的虚拟化默认需要我们自己去创建桥接网卡。VMWare自动将物理机的网卡做成了一个桥接网卡,如果我们在虚拟机中建立虚拟机的话,需要手动设置一个桥接网卡以便虚拟机中的虚拟机能访问外网。

  1. 创建桥接网卡(虚拟机中的网卡)
  2. 给桥接网卡配置 IP
  3. 给桥接网卡绑定物理网卡
  4. 激活桥接网卡配置文件
1
2
3
4
nmcli con add ifname br0 type bridge con-name br0
nmcli con mod br0 ipv4.address 192.168.153.139/24 ipv4.method manual
nmcli con add ifname ens224 type ethernet slave-type bridge con-name br0-port1 master br0
nmcli con up br0