Linux 学习笔记

文件管理

目录功能

bin 存放二进制的可执行文件,也就是命令,每个命令基本都是一个可执行代码文件

sbin 全称 super bin,超级用户使用的命令

dev 硬件设备控制文件

root root 家目录

home 所有普通用户的家目录

tmp 全称 temporary,存放临时文件的目录

var 变化文件(数据库、日志、邮件等)

media 移动设备默认挂载点

mnt 手工挂在设备挂载点

etc 存放系统的各种配置文件,相当于windows的注册表

proc 虚拟文件系统,反映出内核、进程、硬件等信息

opt 部分软件安装存储目录

usr 全称是UNIX software resource,软件程序以及其库,也保存一些程序需要的资源文件

/usr/local 软件安装目录

boot 系统启动相关文件

lib、lib64 32 位、64 位库文件

lost+found fsck修复时存储没有链接的文件或目录

文件管理

文件管理命令

  1. 创建文件 touch 1.txt
  2. 创建目录 mkdir folder
  3. 复制
    1. cp 源文件 目标文件
    2. cp -r 源目录 目标目录
  4. 移动 mv sources destination
  5. 删除 rm -rf file
  6. 查看文件内容
    1. 查看全部内容 cat file(显示内容的同时显示行号 cat -n file
    2. 倒着查看全部内容 tac file
    3. 翻页 more file
    4. 头部 head file(查看文件前五行 head -n 5 file / head -5 file
    5. 尾部 tail file(查看文件后五行 tail -n 5 file / tail -5 file
    6. 过滤关键字 grep ‘xxx’ file
  7. 查看文件状态 stat file
  8. 查看文件信息 file filename
  9. 文件处理
    1. 计数 wc(word count)
      1. 统计文件内容字节数 wc -c
      2. 统计文件有多少行 wc -l
      3. 处理管道输出,如统计命令数 ls /bin | wc -l
    2. 生成数字序列 seq(sequence)
      1. 生成一个简单的数字序列,默认从 1 开始,生成到 5,每次增加 1 seq 5
      2. 指定起始值和终止值 seq 3 7
      3. 指定步长,中间为步长 seq 1 2 9
      4. 在输出中自动对齐宽度,补零填充 seq -w 1 3 10
      5. 指定分隔符(默认是换行符) seq -s ", " 1 5
      6. 指定格式化输出(类似 printf,%03g 表示 3 位宽度) seq -f "Num%03g" 1 5
    3. 过滤字符串 grep
      1. 普通过滤 grep '333' file
      2. 过滤结果显示行号 grep -n '333' file
      3. 结合管道过滤 ip a | grep net
    4. 模式匹配与筛选等 awk(Alfred Aho 、Peter Weinberger、Brian Kernighan 首字母)
      1. 取第一列(默认空格分列) awk ‘{print $1}’ file
      2. 取第二列(默认空格分列) awk ‘{print $2}’ file
      3. 取最后一列(默认空格分列) awk ‘{print $NF}’ file
      4. 取第一列(自定义逗号分列) awk -F ‘,’ ‘{print $1}’ file
      5. 取最后一列(自定义逗号分列) awk -F ‘,’ ‘{print $NF}’ file
    5. 排序 sort
      1. 按字典序排序(默认) sort filename
      2. 按数值大小排序 sort -n filename
      3. 按指定列排序 sort -k 2 filename
      4. 逆序排序 sort -r filename
      5. 同时按数值大小和逆序排序 sort -nr filename
      6. 删除重复行 sort -u filename
      7. 指定分隔符 sort -t ":" -k 3 filename
      8. -t “:” 指定分隔符为冒号(默认分隔符是空白符)。
        此例按第三列排序,适合以特定字符分隔的文件(如 /etc/passwd)
    6. 统计去重 uniq
      1. 删除连续重复的行(基本用法) uniq filename
      2. 显示重复行 uniq -d filename
      3. 显示唯一行 uniq -u filename
      4. 计数 uniq -c filename
      5. 忽略大小写 uniq -i filename
      6. 跳过行的前 n 个字符 uniq -s 3 filename
      7. 比较行的前 n 个字符 uniq -w 5 filename
  10. 修改文件内容 vim file
    1. 光标定位
      1. 行首 0
      2. 行尾 $
      3. 页首 gg
      4. 页尾 G
      5. 指定行 3gg/G
      6. 查找 /string
      7. 左,下,上,右,如果键盘上没有上下左右键,可以 h,j,k,l
    2. 快捷键
      1. ctrl+f 下翻一页
      2. ctrl+b 上翻一页
      3. ctrl+u 上翻半页
      4. ctrl+d 下翻半页
    3. 文本编辑
      1. 复制一行 yy
      2. 复制五行 5yy
      3. 粘贴到当前行的下一行 p
      4. 粘贴到当前行的上一行 P
      5. 删除一个字符 x
      6. 删除十个字符 10x
      7. 删除一行 dd
      8. 删除十行 10dd
      9. 删除一个单词 dw
      10. 撤销 u
    4. 进入其他模式
      1. 插入模式 a、i、o、A
      2. 末行模式 :
      3. 命令模式 ESC
    5. 扩展命令模式
      1. 另存为 :w file2
      2. 保存当前文件 :w
      3. 保存并退出 :w 等效于 :x
      4. 退出 :q
      5. 强制退出 :q!
      6. 强制保存退出 :wq!
      7. 行号 :set nu
      8. 显示控制字符 :set list
    6. 查找替换
      1. 查找
      2. /pattern 向后搜索字符串pattern #辅助小n向下和大N向上,一般用 / 搜索
      3. ?pattern 向前搜索字符串pattern #辅助小n向上和大N向下,?搜索用的少
      4. 替换
      5. :起始行,结束行 s/原内容/新内容/全局(g)
      6. :1369,1379s/shell/jaden/g 将1369至1379这10行中的shell替换为jaden
      7. :行号 s/原内容/新内容/全局(g)
      8. :1369s/shell/jaden/g 将第1369行的shell替换为jaden
      9. 还可以用#或者@符号来代替 :1369s#shell#jaden#g
      10. :1369,$s/shell/jaden/g 将1369至文末中的shell替换为jaden
      11. :%s/old/new/g 搜索整个文件,将所有的old替换为new
      12. :%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换(y/n/a/..),y 表示确认替换一个、n 表示不替换、a 表示全部替换

文件类型

常见类型

普通文件 -

目录文件 d

非常见类型

设备文件(块设备) b

设备文件(字符设备) c

链接文件 l

套接字文件 s

管道文件 p

文件传输

从网站下载文件

  1. curl curl -o 本地存放路径 文件网址
  2. wget wget 文件网址

SCP 传输

scp typora-setup-x64.exe root@10.0.0.128:/tmp

用户管理

用户/组概念

  1. 查看当前登录的用户信息 id
  2. 查看文件的owner ll
  3. 查看运行进程的username ps aux

用户组信息存储的文件

用户基本信息文件 /etc/passwd

username : x(pwd) : uid : gid : desc : HOME : shell

uid: 0(特权用户)、1~999(系统用户)、1000+(普通用户)

gid: 每创建一个用户,系统会自动创建同名的组

用户密码信息文件 /etc/shadow

root : $1$MYG2N : 15636 : 0 : 99999 : 7 : :

  1. 登录名
  2. 口令
    1. 口令为空对应用户没有口令,登录时不需要口令
    2. 星号代表帐号被锁定
    3. 双叹号表示这个密码已经过期了
    4. 加密算法:$id$salt$encrypted($1 MD5 、$5 SHA-256、$6 SHA-512)
  3. 最后修改时间 1970.1.1 起天数
  4. 最小时间间隔 两次修改口令之间所需的最小天数
  5. 最大时间间隔 口令保持有效的最大天数
  6. 警告时间 从系统开始警告用户到用户密码正式失效之间的天数
  7. 不活动时间 用户没有登录活动但账号仍能保持有效的最大天数
  8. 失效时间 绝对的天数,使用了这个字段那么就给出相应账号的生存期。期满后,该账号就 不再是一个合法的账号,也就不能再用来登录了
  9. 保留

组信息文件 /etc/group

root:x:0:

组名:组密码:组ID:组成员
组成员默认为空

用户/组管理

用户

  1. 创建用户
    1. useradd xxx
    2. 指定uid useradd xxx -u 1503
    3. 指定家目录 useradd xxx -d /user03
  2. 删除用户 userdel -r user02
  3. 修改密码 passwd user01
  4. 修改登录shell usermod -s /sbin/nologin user00

组成员管理

  1. 查看用户原先信息 id user02
  2. 将用户追加到hr组 usermod -aG 组名 用户名
  3. 将用户移除组(扩展) gpasswd -d user02 hr

用户组操作

  1. 创建一个hr组 groupadd hr
  2. 创建组net01,并指定gid 1007 groupadd net01 -g 1007
  3. 删除组 groupdel net01

用户组分类

基本组 随用户创建,自动创建的同名组

附加组 用户加入的其他组

提取

永久提权 Switch Users (su)

携带环境变量 su - root

不携带环境变量 su root

临时提权 (sudo) /etc/sudoers

sudo配置文件语法

1
2
## user MACHINE=COMMANDS
## 用户 登录的主机=(可以变换的身份) 可以执行的命令

以 root ALL=(ALL) ALL 这一行为例:

root 表示用户名,如果是用户组,加百分号,%组名
ALL 表示允许登录的主机,ALL就表示允许任意主机
(ALL)表示以谁的身份执行,ALL表示root身份
ALL 表示当前用户可以执行的命令,多个命令需要使用英文逗号分隔

1
2
zhangsan ALL=(ALL) NOPASSWD:/usr/sbin/reboot,/usr/sbin/useradd,/usr/sbin/userdel
# 这里加了NOPASSWD: 表示提权执行命令时不需要要输入密码,默认不加是需要输密码的

权限管理

用户权限解析

权限对象

属主: u
属组: g
其他人: o
所有人:a(u+g+o)

权限类型

读:r=4 写:w=2 执行: x=1

设置权限

使用符号

chmod 对象(u/g/o/a)赋值符(+/-/=)权限类型(r/w/x) 文件/目录

使用数字

chmod 644 file1

更改属主、属组

chown命令

chown 用户名.组名 文件 (-R 针对目录中所有的文件)

chgrp命令

chgrp 组名 文件

基本权限 ACL

设置不同用户,不同的基本权限(r、w、x),对象数量不同

设置权限

setfacl -m u:alice:rw /home/test.txt

命令 设置 用户或组:用户名:权限 文件对象

查看权限

getfacl /home/test.txt

删除权限

删除部分:setfacl -x g:hr /home/test.txt

删除全部:setfacl -b /home/test.txt

特殊权限

特殊位 suid

suid 针对文件/程序时,具备临时获得属主的权限

sgid 针对目录授权,可以使目录下新建文件,继承目录的属组权限

增加suid位

chmod u+s /usr/bin/cat

增加sgid位

chmod g+s /tmp/dir-sgid/

文件属性chattr

常用于锁定某个文件,拒绝修改

加上不能删除的属性

chattr +i file100 (不能更改,重命名,删除)

查看属性

lsattr file100

将属性还原

chattr -i file100

系统进程管理

进程状态

进程管理

静态查看进程 ps

  1. 相关参数:

    USER: 运行进程的用户
    PID: 进程ID
    %CPU: CPU占用率
    %MEM: 内存占用率
    VSZ: 占用虚拟内存
    RSS: 占用实际内存
    TTY: 进程运行的终端
    STAT: 进程状态

    R 运行
    S 睡眠 Sleep
    T 停止的进程
    Z 僵尸进程
    X 死掉的进程

    START: 进程的启动时间
    TIME: 进程占用CPU的总时间
    COMMAND: 进程文件,进程名

  2. 进程排序 ps aux --sort %cpups aux --sort -%cpu(降序)

  3. 进程的父子关系 ps -ef

  4. 自定义显示字段 ps axo user,pid,ppid,%mem,command |head -3

动态查看进程 top

参数解读:

top - 11:45:08 up 18:54, 4 users, load average: 0.05, 0.05, 0.05

程序名-系统时间 运行时间 登录用户数 CPU负载 1 5 15 分钟

Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie

总进程数 运行数1 睡眠数 175 停止数 僵死数0

%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

CPU使用占比 us 用户 SY.系统 ni 优先级 id 空闲 wa 等待 hi 硬件 si软件 st 虚拟机

KiB Mem : 3865520 total, 1100000 free, 580268 used, 2185252buff/cache

物理內存K total 总共 4G free 空闲 1G used 使用 500M cache 缓存硬盘内容 2G

KiB Swap: 4063228 total 4063228 free, 0 used. 2917828 availMem

交换分区total 总共 4G free 空闲 4Gused 使用0 avail 下次可用的空间3G

VIRT:virtual memory usage 虚拟内存,需要这些内存,但并没有占满
RES:resident memory usage 常驻内存,用了多少内存
SHR:shared memory 共享内存

除了自身进程的共享内存,也包括其他进程的共享内存
共享内存大小公式:RES – SHR

top常用内部指令:

  1. h|?帮助
  2. M 按内存的使用排序
  3. P 按CPU使用排序
  4. N 以PID的大小排序
  5. < 向前
  6. > 向后
  7. z 彩色,Z设置彩色,使用数字调整

使用示例:

top -d 1 //每1秒刷新。
top -d 1 -p 10126 //查看指定进程的动态信息
top -d 1 -p 10126,1 //查看10126和1号进程

信号控制进程kill

信号种类:

列出所有支持的信号 kill -l

  1. SIGHUP 重新加载配置
  2. SIGINT 键盘中断Ctrl+C
  3. SIGQUIT 键盘退出Ctrl+\,类似SIGINT
  4. SIGKILL 强制终止,无条件
  5. SIGTERM 终止(正常结束),缺省信号
  6. SIGCONT 继续
  7. SIGSTOP 暂停
  8. SIGTSTP 键盘暂停Ctrl+Z

信号9,15:

kill -15 4362 // 正常终止

kill -9 4363 // 非法杀死。

进程优先级 nice

系统中的两种优先级

  1. PR值 NI: 实际nice值
  2. nice值 PR(+20): 将nice级别显示为映射到更大优先级队列,-20映射 到0,+19映射到39

优先级特性

nice 值越大: 表示优先级越低,例如+19

nice 值越小: 表示优先级越高,例如-20

查看进程的nice级别

ps axo pid,command,nice --sort=-nice

启动具有不同nice级别的进程

启动进程时,通常会继承父进程的 nice 级别,默认为0

手动启动不同 nice:nice -n -5 sleep 6000 &

更改现有进程的 nice 级别:renice -20 2669

作业控制 jobs

foreground (fg)

前台进程:是在终端中运行的命令,占领终端。

background(bg)

后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行

jobs查看后台进程

jobs

调动后台程序至前台

fg 1 // 将作业1调回到前台

消灭后台进程

kill %1

注意,“kill 1” 和 “kill %1” 不同, 前者终止PID为1的进程, 后者杀死作业序号为1的后台程序

虚拟文件系统 proc

CPU

cat /proc/cpuinfo

扩展:也可使用 lscpu

内存

less /proc/meminfo

扩展:也可使用 free -h

内核

cat /proc/cmdline

服务管理

  1. 查看所有服务列表 systemctl list-unit-files
  2. 启动服务 systemctl start httpd
  3. 停止服务 systemctl stop httpd
  4. 重启服务 systemctl restart httpd
  5. 查看服务状态 systemctl status httpd
  6. 把服务设置为开机启动 systemctl enable httpd
  7. 取消服务的开机自启 systemctl disable httpd

重定向与管道

标准输入 0

0< 与 <

二者等价

标准输出 1

1> 与 >

覆盖,二者等价

1>> 与 >>

追加,二者等价

标准错误输出 2

2> 覆盖

2>> 追加

当某条命令产生错误时,才会有错误输出

ls /aaaaaaaaa 2> list.txt

全部重定向输出 &>

ls /home/ /aaaaaaaaa &>list.txt

yum install httpd &>/dev/null

管道 |

command1 | command2 | command3 |…
指令1的标准输出,作为指令2的标准输入

cat /etc/passwd | tail -3
ps aux | grep 'sshd’

tee管道

三通管道,既交给另一个程序处理,又保存一份副本

cat /etc/passwd |tee 88.txt | tail -1

参数传递 Xargs

通过 |xargs 成功连接rm命令

cat files.txt |xargs rm -rvf

文件链接

符号链接/软链接

创建一个软链接

ln -s /file1 /home/file11(-s 软连接)

特点

软连接像快捷方式,可以对文件和目录做软连接
软连接记录的只是源文件的路径
软连接失去源文件不可用

硬链接

创建一个硬链接

ln /file2 /file2-h1

特点

硬链接删除源文件,依然可以用

硬链接只能针对文件做,不能对目录做

硬链接只能在同分区做

系统管理

电源相关

  1. 关机 shutdown
    1. 立即关机 shutdown now
    2. 五分钟后关机 shutdown +5
    3. 指定时间关机 shutdown 23:30
    4. 取消关机 shutdown -c
    5. 五分钟后重启 shutdown -r 5
    6. 切换到单用户模式 shutdown -h now
      1. -h 选项表示系统关闭但不完全断电。适用于系统维护模式,进入单用户模式
      2. 单用户模式(Single-User Mode)是 Linux 和 Unix 操作系统中的一种运行模式,它允许只有一个用户(通常是系统管理员 root)以最低的系统服务运行操作系统,主要用于系统维护和故障修复
  2. 重启 reboot

时间管理

  1. 查看时间 date
  2. 指定格式查看时间
    1. 日期 date +%F
    2. 时间 date +%T
    3. 日期和时间 date +%F\ %T
  3. 修改时间和日期 date -s '20200723 14:40:00’
  4. 修改时间 date -s '14:40:00’

Shell 相关

快捷键

1
2
3
4
5
6
7
8
9
10
Ctrl + a #光标跳转至正在输入的命令行的首部
Ctrl + e #光标跳转至正在输入的命令行的尾部
Ctrl + c #终止前台运行的程序,比如ping指令
Ctrl + d #在shell中,ctrl-d表示推出当前shell。
Ctrl + z #将任务暂停,挂至后台, 执行fg命令继续运行
Ctrl + l #清屏,和clear命令等效。
Ctrl + k #删除从光标到行末的所有字符
Ctrl + u #删除从光标到行首的所有字符
Ctrl + r #搜索历史命令, 利用关键字搜索
ctrl + w #光标往前删除一个参数,以空格为分割。

历史命令

  1. 列出当前用户的命令历史,通常按执行顺序排列,每条命令前会有一个编号 history
    1. 查看指定数量的历史命令 history 10
    2. 清空历史记录 history -c
    3. 保存历史记录到文件 history -w
    4. 读取历史文件中的命令 history -r
      1. 读取并加载默认历史文件(~/.bash_history)中的命令
  2. 使用历史命令编号执行命令!n
    1. n 是命令历史中的编号,执行对应编号的命令
    2. 执行编号为 100 的命令 !100
    3. 执行上一个命令 !!
  3. 执行上一个以特定字符串开头的命令 !<string>
    1. 执行最后一次以 ls 开头的命令 !ls

命令别名 alias

  1. 查看别名 alias
  2. 添加别名 alias rm='rm -i'alias rm='echo 禁止使用删除操作’
  3. 取消别名 unalias ls
  4. alias 别名的优先级高于系统命令

存储管理

kernel 对不同接口硬盘命名方式

IDE (并口)

/dev/hda
/dev/hdb

SATA (串口)

/dev/sda
s 代表 sata 就是串口
d 代表磁盘
a 第一块
sda 是一个文件

磁盘分区类型

MBR

主引导记录 (MBR,Master Boot Record)是位于磁盘最前边的 一段引导

MBR 支持最大的磁盘容量是 <2TB。设计时分配 4 个分区

如果希望超过 4 个分区,需放弃主分区,改为扩展分区和逻辑分区

GPT

全局唯一标识分区表 (GUIDPartition Table,GPT) 是一个实体硬盘的分区表的结构布局的标准
GPT 支持大于 2T 的硬盘,支持 128 个分区

管理磁盘

管理磁盘流程三部曲:分区 (MBR或者GPT) —->格式化/文件系统 Filesystem —-> 挂载 mount

查看磁盘信息

ll /dev/sd*lsblk

创建分区

fdisk /dev/sdb

1
2
3
4
5
6
7
8
9
10
命令(输入 m 获取帮助):n Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended Select (default p):
分区号 (1-4,默认 1):
起始 扇区 (2048-10485759,默认为 2048):
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759): +2G
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。

刷新分区表

partprobe /dev/sdb

查看分区结果

fdisk -l /dev/sdb

创建文件系统

mkfs.ext4 /dev/sdb1

挂载mount

mkdir /mnt/disk1

mount -t ext4 /dev/sdb1 /mnt/disk1

查看挂载信息

df -hT

重启自动挂载

  1. 永久挂载fstab
    1. vim /etc/fstab
    2. /dev/sdb1 /mnt/disk1 ext4 defaults 0 0
    3. 磁盘 挂载点 文件系统类型 默认选项 优先级 优先级
    4. 立刻挂载命令:mount -a
  2. 写入自启动文件
    1. vim /root/.bashrc
    2. mount -t ext4 /dev/sdb1 /mnt/disk1

逻辑卷LVM

管理磁盘的一种方式,性质与基本磁盘无异,可随意扩张大小

LVM 是 Logical Volume Manager(逻辑卷管理)

PV: 物理卷(Physical volume):一块硬盘,或多块硬盘

VG: 卷组(Volume Group):一堆磁盘的统称

LV: 逻辑卷(Logical Volume):一个逻辑分区,一个分区

将物理磁盘,转换成物理卷-PV

pvcreate /dev/sdc

查看PV信息:pvscanpvspvdisplay

创建卷组-VG

vgcreate vg1 /dev/sdc

查看卷组信息:vgsvgscanvgdisplay

创建逻辑卷 - LV

lvcreate -L 200M -n lv1 vg1 (-L 大小 -n 卷名 组名)

查看LV信息:lvscan

创建文件系统并挂载

mkfs.ext4 /dev/vg1/lv1

mkdir /mnt/lv1

mount /dev/vg1/lv1 /mnt/lv1

扩容管理

扩大VG

  1. 创建 PV:pvcreate /dev/sdd
  2. 将 PV 增加到 VG 中:vgextend vg1 /dev/sdd

扩大LV

  1. 查看 VG 空间,确保剩余空间足够给 LV 扩容:vgs
  2. 扩容 LV:lvextend -L +200M /dev/vg1/lv1
  3. FS 扩容:resize2fs /dev/vg1/lv1

LVM 命令汇总

交换分区管理 Swap

Swap 大小

推荐:设置交换分区大小为内存的2倍
大于 4GB 而小于 16GB 内存的系统,最小需要 4GB 交换空间;
大于 16GB 而小于 64GB 内存的系统,最小需要 8GB 交换空间;
大于 64GB 而小于 256GB 内存的系统,最小需要 16GB 交换空间

查看当前的交换分区

free -m

增加交换分区

  1. 准备分区
    1. fdisk /dev/sde
    2. partprobe /dev/sde
  2. 格式化 mkswap /dev/sde1
  3. 挂载 swapon /dev/sde1

RAID / 文件系统

文件系统

EXT4

Ext4 是第四代扩展文件系统的缩写,它是 2008 年推出的。它 是一个真正可靠的文件系统,它几乎在过去几年的大部分发行版中一直是默认选项,它是由比较老的代码生成的。它是 一个日志文件系统,意味着它会对文件在磁盘中的位置以及 任何其它对磁盘的更改做记录。如果系统崩溃,得益于 journal 技术,文件系统很少会损坏。

XFS

XFS 是一种非常优秀的日志文件系统,它是 SGI 公司设计的。 XFS具有各种改进,使其能够在文件系统群体列表中脱颖而 出,例如用于元数据操作的日志记录,可扩展/并行 I / O,挂起/恢复 I / O,在线碎片整理,延迟性能分配,等等

二者区别

单个文件的大小,EXT4 可以是 16GB 到 16TB,而 XFS 可以是 16TB 到 16EB
最大文件系统大小,EXT4 可以是 1EB,而 XFS 是 8EB,通常会限制 在 100TB 左右
EXT4 受限制于磁盘结构和兼容问题,可扩展性不如 XFS

名词解释

  1. inode:索引节点
    1. 记录文件的属性(文件的元数据metadata)
    2. 一个文件占用一个 inode,同时记录此文件数据所在的 block numbber
    3. inode 大小 为 128 bytes
  2. block:块
    1. 存储文件的实际数据
    2. 实际存储文件的内容,若文件较大,会占用多个 block
    3. block 大小 为默认为4K
  3. superblock:超级块
    1. block 与 inode 的总量
    2. block 与 inode 的总量
  4. block group:块组

磁盘空间的限制根据 inode 和 block 两方面

RAID 实战

RAID:廉价磁盘冗余阵列(Redundant Array of Independent Disks)
作 用:容错、提升读写速率

RAID0

RAID0 条带集 2块磁盘以上, 读写速率快 100%*N,但不容错

RAID1

RAID1 镜像集 2块磁盘, 容量50% ,读写速率一般,容错

RAID5

带奇偶校验条带集 3块磁盘以上,利用率 (n-1)/n 读写速率快,容错

软 RAID 实例

  1. 创建RAID
    1. yum -y install mdadm // 确保mdadm 命令可用
    2. mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{d,e,f,g}
    3. -C 创建RAID
    4. /dev/md0 第一个RAID设备
    5. -l5 RAID5(level-5)
    6. -n RAID成员的数量
    7. x 热备磁盘的数量
  2. 格式化,挂载
    1. mkfs.ext4 /dev/md0
    2. mkdir /mnt/raid5
    3. mount /dev/md0 /mnt/raid5
    4. cp -rf /etc /mnt/raid5/etc1
  3. 查看RAID信息
    1. mdadm -D /dev/md0 // -D查看详细信息
  4. 模拟一块硬盘损坏,并移除
    1. watch -n 0.5 'mdadm -D /dev/md0 | tail' // watch持续查看
    2. mdadm /dev/md0 -f /dev/sde -r /dev/sde //模拟坏了并移除
      1. -f –fail
      2. r –remove

文件查找与打包

命令文件查找

which ls

whereis vim

任意文件查找

locate

  1. 查找 hosts 文件:locate hosts
  2. 更新 locate 数据库:updatedb

find

find [path...] [options] [expression] [action]

命令 路径 选项 表达式 动作

  1. 按文件名
    1. find /etc -name "hosts”
    2. find /etc -iname "HOSTS”(-i 忽略大小写)
    3. find /etc -iname "hos*”
  2. 按文件大小
    1. find /etc -size +5M(文件>5M)
    2. find /etc -size 5M(文件=5M)
    3. find /etc -size -5M(文件<5M)
  3. 指定查找的目录深度:find / -maxdepth 4 -a -name "readme- ifcfg*”
  4. 按文件属主、属组找
    1. find /home -user jack
    2. find /home -group hr
  5. 按文件类型
    1. find /tmp -type f
    2. find /dev -type b
    3. f 普通文件
    4. b 块设备文件
    5. d 目录
    6. p 管道
    7. l 链接
  6. 按文件权限
    1. find . -perm 644 -ls
    2. ls 是 find 的动作之一,精确权限
  7. 找到后处理的动作 ACTIONS
    1. 找到后默认是显示文件:find . -perm 715 -print
    2. 显示文件属性:find . -perm 715 -ls
    3. 找到后删除:find /etc -name "775*" -delete
    4. 找到后复制:find /etc -name "hosts*" -ok cp -rvf {} /tmp \;
  8. 查找目录下的所有文件中是否含有某个字符串
    1. grep -rn "xxx" *
    2. -r 是递归查找
    3. -n 是显示行号
      • : 表示当前目录所有文件,也可以是某个文件名

文件打包及压缩

tar 选项 压缩包名称 源文件

打包

tar -cf etc.tar /etc

压缩

  1. gzip:tar -czvf etc-gzip.tar.gz /etc/
  2. bzip:tar -cjf etc-bzip.tar.bz /etc/
  3. xzip:tar -cJf etc-xzip.tar.xz /etc/

解压

  1. 查看,并没有解压:tar -tf etc.tar // t查看f文件名
  2. 直接解压:tar -xf etc.tar
  3. 指定解压位置:tar -xvf etc2.tar.bz2 -C /tmp

zip 压缩

  1. zip [选项] 压缩文件名 文件/目录
    1. 将 file1.txt 和 file2.txt 压缩为 archive.zip 文件 zip archive.zip file1.txt file2.txt
    2. 递归压缩目录 zip -r archive.zip mydir
    3. 添加文件到已有的压缩文件 zip archive.zip file3.txt
    4. 排除某些文件或目录 zip -r archive.zip mydir -x "*.bak”
    5. 使用密码保护压缩文件 zip -e archive.zip file1.txt
    6. 压缩并显示进度 zip -r -v archive.zip mydir
    7. 压缩时使用最大压缩级别 zip -r -9 archive.zip mydir
  2. 查看压缩文件内容 unzip -l archive.zip
  3. 解压 .zip 文件 unzip archive.zip

软件管理

常见包类型

RPM包

Red Hat Package Manager,红帽包管理器

mysql-community-common-5.7.12- 1.el7.x86_64.rpm

软件包名 版本号(Version) 发布版本(Release5/6/7) 系统平台(32/64) 文件后缀

源码包

source code 需要经过GCC,C++编译环境编译才能运行
可以设定个人设置,开关功能

nginx-1.8.1.tar.gz

包名 版本号 压缩格式

包管理器

YUM

Yum(全称为 Yellow dog Updater, Modified)

是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器

基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装

  1. 安装:yum -y install httpd vsftpd
  2. 重新安装:yum -y reinstall httpd
  3. 升级安装:yum -y update httpd
  4. 查询
    1. 查询YUM源:yum repolist
    2. 查询HTTP程序:yum list httpd
  5. 卸载:yum -y remove httpd
  6. 查询工具和软件包的关系:yum provides ifconfig
  7. 配置YUM仓库/YUM源
    1. 备份源配置:
      mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup
    2. 创建新仓库文件:vim /etc/yum.repos.d/centos.repo
  8. 更新缓存:yum makecache && yum update

RPM (redhat package manager)

和YUM功能相同,优点不需要配置,直接使用。无法解决依赖关系,无法自行下载软件包

  1. 安装:rpm -ivh wget-1.21.1- 7.el9.x86_64.rpm
    1. i 安装
    2. v 可视
    3. h 百分比
  2. 查询:rpm -q wget
  3. 卸载:rpm -evh wget-1.21.1-7.el9.x86_64
  4. 升级:rpm -Uvh wget.rpm
  5. 查看已安装的软件:rpm -qa

计划任务

一次性调度执行 at

语法格式

at <TIMESPEC>

示例

  1. 5分钟后:now +5min
  2. 下午茶时间:teatime tomorrow (teatime is 16:00)
  3. 第四天中午:noon +4 days
  4. 2024年8月3日下午5点:5pm august 3 2024
  5. 某年某月某日某时:4:00 2024-11-27

查询任务

atq

启动at程序

systemctl start atd

循环调度执行 cron

查看进程状态

systemctl status crond.service

ps aux |grep crond

创建计划

crontab -e

查询计划

crontab -l

删除计划

crontab -r

计划任务存储位置

/var/spool/cron/

语法格式

1
2
3
4
5
6
7
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command

示例:

每小时的0分执行 0 * * * * /mysql_back.sh
每 5 执行 */5 * * * * /mysql_back.sh
每月的1,4,6日的2点整执行 0 2 1,4,6 * * /mysql_back.sh
每月5日到9日的两点整执行 0 2 5-9 * * /mysql_back.sh
每分钟执行 * * * * * /mysql_back.sh
每天两点整执行 0 2 * * * /mysql_back.sh
每月14号的2点整执行 0 2 14 * * /mysql_back.sh
2月14日2点整执行 0 2 14 2 * /mysql_back.sh
每月的周五,两点执行(不写月日,仅周生效) 0 2 * * 5 /mysql_back.sh
6月2日的两点整执行&&6月的周五两点整执行 0 2 * * 5 /mysql_back.sh
(书写月和日,月或日,月日周均生效) 0 2 2 6 5 /mysql_back.sh

日志管理

处理日志的进程

系统专职日志程序 rsyslogd

处理绝大部分日志记录:系统操作有关的信息,如登录信息,程序启动关闭信息,错误信息

各类应用程序

以自己的方式记录日志

常见的日志文件

系统主日志文件

tail -10 /var/log/messages

认证、安全

tailf /var/log/secure

YUM

tail /var/log/yum.log

跟邮件postfix相关

tail /var/log/maillog

crond、at进程产生的日志

tail /var/log/cron

系统审计日志

tail /var/log/audit/audit.log

MySQL

tail /var/log/mysqld.log

当前登录的用户(命令:w)

tail /var/log/wtmp

最近登录的用户(命令last)

tail /var/log/btmp

所有用户的登录情况(命令lastlog)

tail /var/log/lastlog

rsyslogd配置

启动程序

systemctl start rsyslog.service

主配置文件

/etc/rsyslog.conf

RULES 即规则,是一套生成日志,以及存储日志的策略,有三部分组成(由设备+级别+存放位置)

1
2
3
4
5
6
7
# FACILITY.LEVEL FILE
authpriv.* /var/log/secure(SSH信息)
mail .* -/var/log/maillog(发邮件)
cron .* /var/log/cron(创建任务)

# 系统日志排除了邮件,认证,计划日志
*.info;mail.none;authpriv.none;cron.none /var/log/messages

这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大

  1. facility设备类型:
    1. LOG_SYSLOG:syslogd自身产生的日志
    2. LOG_AUTHPRIV:安全认证
    3. LOG_CRON:调度程序(cron and at)
    4. LOG_MAIL:邮件系统mail subsystem
    5. LOG_USER (default):LOG_USER (default)
    6. LOG_DAEMON:LOG_DAEMON
    7. LOG_FTP:文件服务器ftp daemon
    8. LOG_KERN:内核设备kernel messages
    9. LOG_LPR:打印机设备
    10. LOG_LOCAL0 through LOG_LOCAL7:用户自定义设备
  2. level级别:
    1. LOG_EMERG:紧急,致命,服务无法继续运行,如配置文件丢失
    2. LOG_EMERG:报警,需要立即处理,如磁盘空使用95%
    3. LOG_CRIT:致命行为
    4. LOG_ERR:错误行为
    5. LOG_WARNING:警告信息
    6. LOG_NOTICE:普通,重要的标准信息
    7. LOG_INFO:标准信息
    8. LOG_DEBUG:调试信息,排错所需,一般不建议使用

相关文件,定义级别

/etc/sysconfig/rsyslog

日志轮转(切割)相关

/etc/logrotate.conf

/etc/logrotate.d/syslog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
=========全局设置==========
weekly
rotate 4
create
dateext
#compress
include /etc/logrotate.d //包含该目录下的子配置文件

/var/log/wtmp {
monthly
minsize 1M
达到两个条件)
create 0664 root utmp //轮转后创建新文件,并设置权限 rotate 1 //保留一份
}

/var/log/btmp {
missingok //丢失不提示
monthly //每月轮转一次
create 0600 root utmp //轮转后创建新文件,并设置权限 rotate 1 //保留一份
}

# copytruncate的意思是先把原始文件拷贝一份重命名,然后把原始文件清空,避免程序锁定老文件

网络配置

Linux网络接口名称规则

en:eethernet 以太网-双绞线

wl:wirelessLAN:无线网卡

ww:WAN广域网:串行线缆

o:on-board板载网卡

s:hotplug热插拔

p:PCI接口

N:序号或者ID

示例:enp2s0

NetworkManager服务

查看网络管理程序的状态

systemctl status NetworkManager

查看网络子管理程序的状态

systemctl status network

配置网络的工具

  1. 命令行查看IP:ip a
  2. 命令行查网关/默认路由:ip r
  3. 命令行查dns:cat /etc/resolv.conf

配置文件

  1. 备份配置:cp /etc/sysconfig/network-scripts/ifcfg-ens33 .
  2. 编辑配置:vim /etc/sysconfig/network-scripts/ifcfg- ens32
1
2
3
4
5
6
7
8
9
ONBOOT=yes //是否启用该设备
BOOTPROTO=none //手动(none/static)还是自动获取IP(dhcp)
IPADDR=192.168.142.131 //根据自动获取的地址进行配置用来定位主机
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.142.2 //网关
DNS1=192.168.142.2 //域名解析
NAME=ens33
UUID=d1769473-dc3c-4cf3-9158-8798994d24bb //UUID不是网卡配置文件中必须的信息
// 查看自身网卡UUID的命令:nmcli con show

CentOS9配置IP

vim /etc/NetworkManager/system-connections/ens33.nmconnection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[connection]
id=ens18
uuid=8d1ece55-d999-3c97-866b-d2e23832a324
type=ethernet
autoconnect-priority=-999
interface-name=ens18
permissions=
timestamp=1639473429
[ethernet]
mac-address-blacklist=
[ipv4]
address1=192.168.1.92/24,192.168.1.1
dns=8.8.8.8;
dns-search=
method=manual
[ipv6]
addr-gen-mode=eui64
dns-search=
method=auto
[proxy]

命令行 nmcli

1
2
3
4
5
6
nmcli con mod ens18 ipv4.addresses 192.168.1.91/24;
nmcli con mod ens18 ipv4.gateway 192.168.1.1;
nmcli con mod ens18 ipv4.method manual;
nmcli con mod ens18 ipv4.dns "8.8.8.8";
nmcli c reload
nmcli c up ens33

简易图形 nmtui

重启网络服务

systemctl restart network

主机名

查看主机名

hostname

配置主机名

hostnamectl set-hostname example.com

或:vim /etc/hostname

重启生效

文件服务

FTP Server

软件包:vsftpd

控制端口 command 21/tcp
数据端口 data 20/tcp

配置文件

vim /etc/vsftpd/vsftpd.conf

  1. 检查禁用匿名账户登录开启:anonymous_enable=YES
  2. 配置上传指令:
    1. 启动上传文件的能力:anon_upload_enable=YES
    2. 启动创建目录的能力:anon_mkdir_write_enable=YES
    3. 匿名用户执行除上载和创建目录之外的写 入操作:anon_other_write_enable=YES
    4. 默认权限掩码:anon_umask=022
    5. 匿名用户主目录:anon_root=/var/ftp
    6. 匿名用户访问速率:anon_max_rate=0
    7. 重启ftp程序:systemctl restart vsftpd
  3. 创建上传目录:
    1. mkdir /var/ftp/upload
    2. chmod 777 /var/ftp/upload
  4. 客户端测试:
    1. lftp 192.168.142.129
    2. 上传文件:put 2.txt
    3. 创建目录:mkdir 222
    4. 上传目录:mirror -R aaa

系统用户的配置

1
2
3
4
anonymous_enable=NO. #禁止匿名访问模式
local_enable=[YES|NO] #是否允许本地用户登录
FTPwrite_enable=[YES|NO] #是否开放本地用户的其他写入权限
local_umask=022 #本地用户上传文件的 umask 值

FTP Server

  1. 安装vsftp: yum -y install vsftpd
  2. 准备分发的文件:touch /var/ftp/abc.txt
  3. 启动服务:
    1. systemctl start vsftpd
    2. systemctl enable vsftpd
    3. netstat -anpt
  4. 关闭防火墙:
    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. setenforce 0
    4. vim /etc/selinux/config —> SELINUX=disabled

FTP Clinet

  1. 安装客户端工具:yum -y install lftp
  2. 访问服务器:lftp 服务器的IP地址
  3. 查看并下载

NFS Server

Network File System 网络文件系统,Linux/Unix系统之间共享文件 的一种协议
NFS 的客户端主要为Linux,支持多节点同时挂载,以及并发写入

服务端

  1. 安装NFS服务器:yum -y install nfs-utils
  2. 配置NFS服务器:
    1. vim /etc/exports
    2. /webdata 192.168.142.0/24(rw)
    3. /webdata指的是发布资源的目录
    4. 192.168.142.0/24允许访问NFS的客户机
    5. (rw)可读可写
  3. 启动NFS服务器:
    1. systemctl start nfs-server
    2. systemctl enable nfs-server
  4. 检查NFS输出是否正常:exportfs -v

客户端

  1. 安装NFS客户端: yum -y install nfs-utils
  2. 查看存储端共享:showmount -e 192.168.142.133
  3. 手动挂载:
    1. mount -t nfs 192.168.142.133:/webdata /var/www/html/
    2. 挂载命令 类型 nfs类型 nfs服务器地址:nfs输出目录 本地目录
  4. 查看挂载:df

SSH SERVER

yum install openssh-server

vim /etc/ssh/sshd_config

1
2
PermitRootLogin prohibit-password  # 禁止root用户远程登录
Port 22 # 登录端口22

启动服务:systemctl start sshd

开机启动:systemctl enable sshd

查看端口:netstat -antp | grep sshd

Linux 特殊符号

  1. # 注释、备注、批注,系统自动忽略,不执行
  2. ; 命令的分隔符,通过它可以连接多条指令一起执行
    例如:touch 111.txt; chmod 777 111.txt
  3. .. 上级目录
  4. . 当前目录
  5. “” 换行,解析变量,如:echo "$LANG”,输出:en_US.UTF-8
  6. ‘’ 换行,不解析变量,如:echo '$LANG’,输出:$LANG
  7. / 路径分割
  8. \ 转义
  9. ! 历史命令调用
  10. * 通配符
  11. $ 调用变量,如:echo $LANG
  12. > 输出重定向 >> 追加输出重定向 < 输入重新定向 << 追加输入重定向
  13. | 管道
  14. || 或 第一个命令失败,才执行第二个命令,第一个指令成功了,不会执行第二个指令
  15. && 和 两个一起执行,如果第一个失败了,两个都不执行,如果第一个成功了,第二个失败了,就只执行第一个,如果两个都成功了,就都执行
  16. & 后台运行
  17. ~ 家目录
  18. ` 嵌套命令,反引号中的命令先执行,如 touch `test_date +%T`.txt

三剑客和正则表达式

待补充……


Linux 学习笔记
https://ethan.ee/posts/11.Linux-Notes.html
作者
Ethan PANG
发布于
2024年2月18日
许可协议