Linux 复习知识点(更新中)

107 阅读2分钟

第 1 章 Linux 文件与目录结构

Linux 系统中一切皆文件。

  1. /bin:存放最经常使用的命令
  2. /sbin:存放系统管理员使用的系统管理程序
  3. /home:存放普通用户的用户主目录
  4. /root:系统管理员的用户主目录
  5. /lib:库文件目录,包含了所有对系统有用的库文件
  6. /etc:所有系统管理所需的配置文件和子目录
  7. /usr:用户的应用程序和文件都放在这个目录下
  8. /opt:额外安装软件所在的目录(mysql、redis、zookeeper 等都放在这)
  9. /tmp:存放临时文件
  10. /var:将经常被修改的日志文件放在这个目录
  11. /boot:启动 Linux 时使用的核心文件

第 2 章 Vim 编辑器

语法功能
:wq保存退出
:q / :q!不保存退出 / 不保存强制退出
:set nu显示行号
/要查找的词n 向下查找,N 向上查找
:%s///g将所有的旧内容 old 替换为新内容 new
u撤销上一步
G跳转到页尾
shift+6(^)/ shift+4 ($)移动到行头/行尾

第 3 章 系统配置

3.1 修改网络 IP 地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33 

修改为静态 IP:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="87b05f6b-2410-4424-95cb-7ca87158e993"
DEVICE="ens33"
ONBOOT="yes"

IPADDR=192.168.239.100
GATEWAY=192.168.239.2  
DNS1=192.168.239.2

编辑结束保存退出,重启网络服务:

systemctl restart network
# 查看 IP
ip a 

3.2 三种网络连接模式

  1. 桥接模式:虚拟机直接连接外部网络,主机起到网桥的作用。该模式下,虚拟机可以直接访问外网,并且对外网可见
  2. NAT 模式:虚拟机和主机共享一个专用网络,并通过虚拟网络转换(NAT)设备对 IP 进行转换。虚拟机通过共享主机 IP 可以访问外网,但外网无法访问虚拟机
  3. 主机模式:虚拟机和主机共享一个专用网络,但无法访问外网

3.3 主机名

# 查看主机名
hostname
# 修改主机名
hostnamectl set-hostname <hostname>

修改 hosts 映射文件:

vim /etc/hosts

3.4 服务

查看所有服务:

cd /usr/lib/systemd/system
ls

查看服务开机启动状态:

systemctl list-unit-files

3.5 关机重启

将数据由内存同步到硬盘中:

sync

重启:

reboot

第 4 章 文件目录类

4.1 切换目录

cd <directory-name>   # 切换目录
cd                    # 切换到根目录
cd -                  # 切换到所处的上一个目录
cd ..                 # 切换到当前目录的上一级目录

./                    # 当前目录 
../                   # 上一级目录
~/                    # 主目录

4.2 创建目录

mkdir <directory-name>                   # 创建目录
mkdir -p <directory>/<directory>/...     # 创建多级目录 

4.3 查找文件

ls | grep .cfg                            # 查找当前目录下后缀是 .cfg 的文件
find /<directory> -name <file-name>       # 根据名称查找目录下的文件
find /<directory> -name "*.txt"           # 查找目录下以 txt 结尾的文件

4.4 查看文件

cat -n <file-name>       # 查看文件内容  
tail -n 2 <file-name>    # 查看一个文件的最后两行
tail -f <file-name>      # 显示文件最新追加的内容,监视文件变化
wc <file-name>           # 显示文件的行数、单词数、字节数

4.5 删除目录中所有内容

rm -rf <directory-name>/

4.6 修改文件权限

我们可以使用 ll 命令来显示一个文件的属性以及文件所属的用户和组:

第一个字符代表这个文件是目录还是文件:- 代表文件,d 代表目录:

chmod 644 <file-name>  # 修改文件权限为属主可读写,其他人只可读
chmod 777 <file-name>  # 修改文件权限为所有人可读可写可执行
chmod +x <file-name>   # 修改文件权限为可执行文件
r可读权限,八进制为 4
w可写权限,八进制为 2
x可执行权限,八进制为 1
-没有对应权限,八进制为 0

4.7 > 输出重定向和 >> 追加

# 将 context 内容写到文件中(覆盖原有内容)
echo <context> > <file-name>
# 将 context 内容追加到文件中(不覆盖原有内容)
echo <context> >> <file-name>

4.8 tar 打包解压

# 解压到当前目录
tar -zxvf XXX.tar.gz
# 解压到指定目录 /opt 下
tar -zxvf XXX.tar.gz -C /opt

4.9 管道操作符 |

将前一个命令的输出作为后一个命令的输入:

第 5 章 进程管理类

5.1 网络端口号

netstat –nltp | grep <port>      # 查看某端口号是否被占用

5.2 查看进程

ps -ef                         # 显示所有进程信息
ps -ef | grep <pid>            # 显示进程号为 pid 的进程信息
ps -ef | grep <process-name>   # 显示某进程的信息

5.3 删除进程

kill -9 <pid>

5.4 实时监控系统进程状态

top               # 查看所有进程信息 
top -p <pid>      # 仅查看指定 pid 的进程信息 

命令显示的内容:

  • 第一行:任务队列消息,包括系统当前时间,已运行时间,当前登录用户数量以及平均负载
  • 第二行:进程数量信息:包括运行进程、睡眠进程、停止进程和僵尸进程数量
  • 第三行: CPU 信息:us 是用户空间占用 CPU 的百分比;sy 是内核空间占用 CPU 的百分比;id 是空闲 CPU 百分比;wa 是 IO 等待占用 CPU 的百分比
  • 第四行:物理内存信息
  • 第五行:交换分区信息
  • 第七行以下:各进程(任务)的状态监控

PR — 进程优先级

NI — nice 值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存大小,单位 kb

RES — 进程使用的物理内存大小,单位 kb

SHR — 共享内存大小,单位 kb

S —进程状态,R 是运行状态,S 是睡眠状态

%CPU — CPU 时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的 CPU 时间总计,单位 1/100 秒

COMMAND — 进程名称

第 6 章 Shell 编程

Centos 默认的解析器是 bash:

6.1 脚本的常用执行方式

第一种:输入脚本路径,脚本必须具有 +x 权限(最常用):

chmod +x <XXX.sh>
./<XXX.sh> <参数列表>

该执行方式是在当前 shell 中打开一个子 shell 来执行脚本内容,脚本结束后子 shell 关闭,回到父 shell 中。

第二种:在脚本的路径前加上 source:

source <XXX.sh> <参数列表>

该执行方式使脚本内容在当前 shell 里执行,而无需打开子 shell。这也是为什么我们每次要修改完 /etc/profile 文件以后,需要 source 一下的原因。

6.2 变量

6.2.1 全局环境变量

常用环境变量有 HOMEHOME、PWD、SHELLSHELL、USER 等,查看变量值命令为:

echo $HOME
6.2.2 变量定义
  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
  2. 等号两侧不能有空格
  3. 变量默认类型都是字符串类型,无法直接进行数值运算
A=5
6.2.3 变量使用

使用一个定义过的变量,尽量将变量名用 {} 括起来,再在前面加 $ 。以下是一些特殊变量:

  1. nn为数字,n:n 为数字,0 代表该脚本名称,11-9 代表第一到第九个参数
  2. $#:获取脚本输入参数总个数
  3. $*:获取脚本所有输入参数,把所有的参数看成一个整体
  4. $@:获取脚本所有输入参数,把每个参数区分开
  5. $?:表示最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值非 0,则证明上一个命令执行不正确
6.2.4 字符串变量

字符串变量建议使用双引号括起来,双引号的优点:

  1. 双引号里可以有变量
  2. 双引号里可以出现转义字符

获取字符串长度:

string="abcd"
echo ${#string} 

提取子字符串:

string="alibaba"
# 输出索引 1-5 的字符串(Java 输出索引 1-4)
echo ${string:1:5}  
6.2.5 数组变量

只支持一维数组,没有限定数组大小。定义数组:

array_name=(val1 val2 ...)

读取数组:

${数组名[下标]}
# 获取所有元素
${数组名[@]}
# 获取数组长度
${#数组名[@]}

6.3 运算符

使用 expr 和 来进行运算,注意表达式和运算符之间必须要有空格:

val=`expr 1 + 1`
echo $val

条件表达式要放在方括号内,并且两边都要有空格:

#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

条件判断运算符:

-eq /-ne等于 /不等于
-lt / -gt小于 / 大于
-le / -ge小于等于 / 大于等于
! / -o / -a非 / 或 /与运算
-z str/nstr / -n str / $str字符串变量 $str 长度为 0 / 不为 0 / 不为空返回 true

6.4 流程控制(⭐)

6.4.1 if

单分支:

if [ 条件判断式 ] 
then 
    程序 
fi

多分支:

if [ 条件判断式 ] 
then 
    程序 
elif [ 条件判断式 ] 
then 
    程序 
else 
    程序 
fi

注意事项: [ 条件判断式 ] 的中括号和条件判断式之间必须有空格;if 后要有空格

6.4.2 case 语句
case $变量名 in 
"值 1") 
    如果变量的值等于值 1,则执行程序 1 
;; 
"值 2") 
    如果变量的值等于值 2,则执行程序 2 
;; 
    省略其他分支 ...
*) 
    如果变量的值都不是以上的值,则执行此程序 
;; 
esac

;; 表示命令序列结束,相当于 java 中的 break。*)表示默认模式,相当于 java 中的 default。

6.4.3 for 循环
for (( 初始值;循环控制条件;变量变化 )) 
do 
    程序 
done
for 变量 in 值1 值2 值3… 
do 
    程序 
done
6.4.4 while 循环
while [ 条件判断式 ] 
do 
    程序 
done

第 7 章 常见 Linux 发行版