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修复时存储没有链接的文件或目录
文件管理
文件管理命令
- 创建文件
touch 1.txt
- 创建目录
mkdir folder
- 复制
cp 源文件 目标文件
cp -r 源目录 目标目录
- 移动
mv sources destination
- 删除
rm -rf file
- 查看文件内容
- 查看全部内容
cat file
(显示内容的同时显示行号cat -n file
) - 倒着查看全部内容
tac file
- 翻页
more file
- 头部
head file
(查看文件前五行head -n 5 file
/head -5 file
) - 尾部
tail file
(查看文件后五行tail -n 5 file
/tail -5 file
) - 过滤关键字
grep ‘xxx’ file
- 查看全部内容
- 查看文件状态
stat file
- 查看文件信息
file filename
- 文件处理
- 计数 wc(word count)
- 统计文件内容字节数
wc -c
- 统计文件有多少行
wc -l
- 处理管道输出,如统计命令数
ls /bin | wc -l
- 统计文件内容字节数
- 生成数字序列 seq(sequence)
- 生成一个简单的数字序列,默认从 1 开始,生成到 5,每次增加 1
seq 5
- 指定起始值和终止值
seq 3 7
- 指定步长,中间为步长
seq 1 2 9
- 在输出中自动对齐宽度,补零填充
seq -w 1 3 10
- 指定分隔符(默认是换行符)
seq -s ", " 1 5
- 指定格式化输出(类似 printf,%03g 表示 3 位宽度)
seq -f "Num%03g" 1 5
- 生成一个简单的数字序列,默认从 1 开始,生成到 5,每次增加 1
- 过滤字符串 grep
- 普通过滤
grep '333' file
- 过滤结果显示行号
grep -n '333' file
- 结合管道过滤
ip a | grep net
- 普通过滤
- 模式匹配与筛选等 awk(Alfred Aho 、Peter Weinberger、Brian Kernighan 首字母)
- 取第一列(默认空格分列)
awk ‘{print $1}’ file
- 取第二列(默认空格分列)
awk ‘{print $2}’ file
- 取最后一列(默认空格分列)
awk ‘{print $NF}’ file
- 取第一列(自定义逗号分列)
awk -F ‘,’ ‘{print $1}’ file
- 取最后一列(自定义逗号分列)
awk -F ‘,’ ‘{print $NF}’ file
- 取第一列(默认空格分列)
- 排序 sort
- 按字典序排序(默认)
sort filename
- 按数值大小排序
sort -n filename
- 按指定列排序
sort -k 2 filename
- 逆序排序
sort -r filename
- 同时按数值大小和逆序排序
sort -nr filename
- 删除重复行
sort -u filename
- 指定分隔符
sort -t ":" -k 3 filename
- -t “:” 指定分隔符为冒号(默认分隔符是空白符)。
此例按第三列排序,适合以特定字符分隔的文件(如 /etc/passwd)
- 按字典序排序(默认)
- 统计去重 uniq
- 删除连续重复的行(基本用法)
uniq filename
- 显示重复行
uniq -d filename
- 显示唯一行
uniq -u filename
- 计数
uniq -c filename
- 忽略大小写
uniq -i filename
- 跳过行的前 n 个字符
uniq -s 3 filename
- 比较行的前 n 个字符
uniq -w 5 filename
- 删除连续重复的行(基本用法)
- 计数 wc(word count)
- 修改文件内容 vim file
- 光标定位
- 行首 0
- 行尾 $
- 页首 gg
- 页尾 G
- 指定行 3gg/G
- 查找 /string
- 左,下,上,右,如果键盘上没有上下左右键,可以 h,j,k,l
- 快捷键
- ctrl+f 下翻一页
- ctrl+b 上翻一页
- ctrl+u 上翻半页
- ctrl+d 下翻半页
- 文本编辑
- 复制一行 yy
- 复制五行 5yy
- 粘贴到当前行的下一行 p
- 粘贴到当前行的上一行 P
- 删除一个字符 x
- 删除十个字符 10x
- 删除一行 dd
- 删除十行 10dd
- 删除一个单词 dw
- 撤销 u
- 进入其他模式
- 插入模式 a、i、o、A
- 末行模式 :
- 命令模式 ESC
- 扩展命令模式
- 另存为 :w file2
- 保存当前文件 :w
- 保存并退出 :w 等效于 :x
- 退出 :q
- 强制退出 :q!
- 强制保存退出 :wq!
- 行号 :set nu
- 显示控制字符 :set list
- 查找替换
- 查找
- /pattern 向后搜索字符串pattern #辅助小n向下和大N向上,一般用 / 搜索
- ?pattern 向前搜索字符串pattern #辅助小n向上和大N向下,?搜索用的少
- 替换
- :起始行,结束行 s/原内容/新内容/全局(g)
- :1369,1379s/shell/jaden/g 将1369至1379这10行中的shell替换为jaden
- :行号 s/原内容/新内容/全局(g)
- :1369s/shell/jaden/g 将第1369行的shell替换为jaden
- 还可以用#或者@符号来代替 :1369s#shell#jaden#g
- :1369,$s/shell/jaden/g 将1369至文末中的shell替换为jaden
- :%s/old/new/g 搜索整个文件,将所有的old替换为new
- :%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换(y/n/a/..),y 表示确认替换一个、n 表示不替换、a 表示全部替换
- 光标定位
文件类型
常见类型
普通文件 -
目录文件 d
非常见类型
设备文件(块设备) b
设备文件(字符设备) c
链接文件 l
套接字文件 s
管道文件 p
文件传输
从网站下载文件
- curl
curl -o 本地存放路径 文件网址
- wget
wget 文件网址
SCP 传输
scp typora-setup-x64.exe root@10.0.0.128:/tmp
用户管理
用户/组概念
- 查看当前登录的用户信息
id
- 查看文件的owner
ll
- 查看运行进程的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 : :
- 登录名
- 口令
- 口令为空对应用户没有口令,登录时不需要口令
- 星号代表帐号被锁定
- 双叹号表示这个密码已经过期了
- 加密算法:$id$salt$encrypted($1 MD5 、$5 SHA-256、$6 SHA-512)
- 最后修改时间 1970.1.1 起天数
- 最小时间间隔 两次修改口令之间所需的最小天数
- 最大时间间隔 口令保持有效的最大天数
- 警告时间 从系统开始警告用户到用户密码正式失效之间的天数
- 不活动时间 用户没有登录活动但账号仍能保持有效的最大天数
- 失效时间 绝对的天数,使用了这个字段那么就给出相应账号的生存期。期满后,该账号就 不再是一个合法的账号,也就不能再用来登录了
- 保留
组信息文件 /etc/group
root:x:0:
组名:组密码:组ID:组成员
组成员默认为空
用户/组管理
用户
- 创建用户
useradd xxx
- 指定uid
useradd xxx -u 1503
- 指定家目录
useradd xxx -d /user03
- 删除用户
userdel -r user02
- 修改密码
passwd user01
- 修改登录shell
usermod -s /sbin/nologin user00
组成员管理
- 查看用户原先信息
id user02
- 将用户追加到hr组
usermod -aG 组名 用户名
- 将用户移除组(扩展)
gpasswd -d user02 hr
用户组操作
- 创建一个hr组
groupadd hr
- 创建组net01,并指定gid 1007
groupadd net01 -g 1007
- 删除组
groupdel net01
用户组分类
基本组 随用户创建,自动创建的同名组
附加组 用户加入的其他组
提取
永久提权 Switch Users (su)
携带环境变量 su - root
不携带环境变量 su root
临时提权 (sudo) /etc/sudoers
sudo配置文件语法
1 |
|
以 root ALL=(ALL) ALL 这一行为例:
root 表示用户名,如果是用户组,加百分号,%组名
ALL 表示允许登录的主机,ALL就表示允许任意主机
(ALL)表示以谁的身份执行,ALL表示root身份
ALL 表示当前用户可以执行的命令,多个命令需要使用英文逗号分隔
1 |
|
权限管理
用户权限解析
权限对象
属主: 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
相关参数:
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存
TTY: 进程运行的终端
STAT: 进程状态R 运行
S 睡眠 Sleep
T 停止的进程
Z 僵尸进程
X 死掉的进程START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名进程排序
ps aux --sort %cpu
、ps aux --sort -%cpu
(降序)进程的父子关系
ps -ef
自定义显示字段
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常用内部指令:
- h|?帮助
- M 按内存的使用排序
- P 按CPU使用排序
- N 以PID的大小排序
- < 向前
- > 向后
- z 彩色,Z设置彩色,使用数字调整
使用示例:
top -d 1
//每1秒刷新。top -d 1 -p 10126
//查看指定进程的动态信息top -d 1 -p 10126,1
//查看10126和1号进程
信号控制进程kill
信号种类:
列出所有支持的信号 kill -l
- SIGHUP 重新加载配置
- SIGINT 键盘中断Ctrl+C
- SIGQUIT 键盘退出Ctrl+\,类似SIGINT
- SIGKILL 强制终止,无条件
- SIGTERM 终止(正常结束),缺省信号
- SIGCONT 继续
- SIGSTOP 暂停
- SIGTSTP 键盘暂停Ctrl+Z
信号9,15:
kill -15 4362
// 正常终止
kill -9 4363
// 非法杀死。
进程优先级 nice
系统中的两种优先级
- PR值 NI: 实际nice值
- 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
服务管理
- 查看所有服务列表
systemctl list-unit-files
- 启动服务
systemctl start httpd
- 停止服务
systemctl stop httpd
- 重启服务
systemctl restart httpd
- 查看服务状态
systemctl status httpd
- 把服务设置为开机启动
systemctl enable httpd
- 取消服务的开机自启
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
特点
硬链接删除源文件,依然可以用
硬链接只能针对文件做,不能对目录做
硬链接只能在同分区做
系统管理
电源相关
- 关机 shutdown
- 立即关机
shutdown now
- 五分钟后关机
shutdown +5
- 指定时间关机
shutdown 23:30
- 取消关机
shutdown -c
- 五分钟后重启
shutdown -r 5
- 切换到单用户模式
shutdown -h now
-h
选项表示系统关闭但不完全断电。适用于系统维护模式,进入单用户模式- 单用户模式(Single-User Mode)是 Linux 和 Unix 操作系统中的一种运行模式,它允许只有一个用户(通常是系统管理员 root)以最低的系统服务运行操作系统,主要用于系统维护和故障修复
- 立即关机
- 重启 reboot
时间管理
- 查看时间
date
- 指定格式查看时间
- 日期
date +%F
- 时间
date +%T
- 日期和时间
date +%F\ %T
- 日期
- 修改时间和日期
date -s '20200723 14:40:00’
- 修改时间
date -s '14:40:00’
Shell 相关
快捷键
1 |
|
历史命令
- 列出当前用户的命令历史,通常按执行顺序排列,每条命令前会有一个编号 history
- 查看指定数量的历史命令
history 10
- 清空历史记录
history -c
- 保存历史记录到文件
history -w
- 读取历史文件中的命令
history -r
- 读取并加载默认历史文件(
~/.bash_history
)中的命令
- 读取并加载默认历史文件(
- 查看指定数量的历史命令
- 使用历史命令编号执行命令
!n
n
是命令历史中的编号,执行对应编号的命令- 执行编号为 100 的命令
!100
- 执行上一个命令
!!
- 执行上一个以特定字符串开头的命令
!<string>
- 执行最后一次以
ls
开头的命令!ls
- 执行最后一次以
命令别名 alias
- 查看别名
alias
- 添加别名
alias rm='rm -i'
或alias rm='echo 禁止使用删除操作’
等 - 取消别名
unalias ls
- 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 |
|
刷新分区表
partprobe /dev/sdb
查看分区结果
fdisk -l /dev/sdb
创建文件系统
mkfs.ext4 /dev/sdb1
挂载mount
mkdir /mnt/disk1
mount -t ext4 /dev/sdb1 /mnt/disk1
查看挂载信息
df -hT
重启自动挂载
- 永久挂载fstab
vim /etc/fstab
/dev/sdb1 /mnt/disk1 ext4 defaults 0 0
磁盘 挂载点 文件系统类型 默认选项 优先级 优先级
- 立刻挂载命令:
mount -a
- 写入自启动文件
vim /root/.bashrc
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信息:pvscan
、pvs
、pvdisplay
创建卷组-VG
vgcreate vg1 /dev/sdc
查看卷组信息:vgs
、vgscan
、vgdisplay
创建逻辑卷 - 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
- 创建 PV:
pvcreate /dev/sdd
- 将 PV 增加到 VG 中:
vgextend vg1 /dev/sdd
扩大LV
- 查看 VG 空间,确保剩余空间足够给 LV 扩容:
vgs
- 扩容 LV:
lvextend -L +200M /dev/vg1/lv1
- FS 扩容:
resize2fs /dev/vg1/lv1
LVM 命令汇总
交换分区管理 Swap
Swap 大小
推荐:设置交换分区大小为内存的2倍
大于 4GB 而小于 16GB 内存的系统,最小需要 4GB 交换空间;
大于 16GB 而小于 64GB 内存的系统,最小需要 8GB 交换空间;
大于 64GB 而小于 256GB 内存的系统,最小需要 16GB 交换空间
查看当前的交换分区
free -m
增加交换分区
- 准备分区
fdisk /dev/sde
partprobe /dev/sde
- 格式化
mkswap /dev/sde1
- 挂载
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
名词解释
- inode:索引节点
- 记录文件的属性(文件的元数据metadata)
- 一个文件占用一个 inode,同时记录此文件数据所在的 block numbber
- inode 大小 为 128 bytes
- block:块
- 存储文件的实际数据
- 实际存储文件的内容,若文件较大,会占用多个 block
- block 大小 为默认为4K
- superblock:超级块
- block 与 inode 的总量
- block 与 inode 的总量
- 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 实例
- 创建RAID
yum -y install mdadm
// 确保mdadm 命令可用mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{d,e,f,g}
- -C 创建RAID
- /dev/md0 第一个RAID设备
- -l5 RAID5(level-5)
- -n RAID成员的数量
- x 热备磁盘的数量
- 格式化,挂载
mkfs.ext4 /dev/md0
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5
cp -rf /etc /mnt/raid5/etc1
- 查看RAID信息
mdadm -D /dev/md0
// -D查看详细信息
- 模拟一块硬盘损坏,并移除
watch -n 0.5 'mdadm -D /dev/md0 | tail'
// watch持续查看mdadm /dev/md0 -f /dev/sde -r /dev/sde
//模拟坏了并移除- -f –fail
- r –remove
文件查找与打包
命令文件查找
which ls
whereis vim
任意文件查找
locate
- 查找 hosts 文件:
locate hosts
- 更新 locate 数据库:
updatedb
find
find [path...] [options] [expression] [action]
命令 路径 选项 表达式 动作
- 按文件名
find /etc -name "hosts”
find /etc -iname "HOSTS”
(-i 忽略大小写)find /etc -iname "hos*”
- 按文件大小
find /etc -size +5M
(文件>5M)find /etc -size 5M
(文件=5M)find /etc -size -5M
(文件<5M)
- 指定查找的目录深度:
find / -maxdepth 4 -a -name "readme- ifcfg*”
- 按文件属主、属组找
find /home -user jack
find /home -group hr
- 按文件类型
find /tmp -type f
find /dev -type b
- f 普通文件
- b 块设备文件
- d 目录
- p 管道
- l 链接
- 按文件权限
find . -perm 644 -ls
- ls 是 find 的动作之一,精确权限
- 找到后处理的动作 ACTIONS
- 找到后默认是显示文件:
find . -perm 715 -print
- 显示文件属性:
find . -perm 715 -ls
- 找到后删除:
find /etc -name "775*" -delete
- 找到后复制:
find /etc -name "hosts*" -ok cp -rvf {} /tmp \;
- 找到后默认是显示文件:
- 查找目录下的所有文件中是否含有某个字符串
grep -rn "xxx" *
- -r 是递归查找
- -n 是显示行号
- : 表示当前目录所有文件,也可以是某个文件名
文件打包及压缩
tar 选项 压缩包名称 源文件
打包
tar -cf etc.tar /etc
压缩
gzip:tar -czvf etc-gzip.tar.gz /etc/
bzip:tar -cjf etc-bzip.tar.bz /etc/
xzip:tar -cJf etc-xzip.tar.xz /etc/
解压
- 查看,并没有解压:
tar -tf etc.tar
// t查看f文件名 - 直接解压:
tar -xf etc.tar
- 指定解压位置:
tar -xvf etc2.tar.bz2 -C /tmp
zip 压缩
- zip [选项] 压缩文件名 文件/目录
- 将
file1.txt
和file2.txt
压缩为archive.zip
文件zip archive.zip file1.txt file2.txt
- 递归压缩目录
zip -r archive.zip mydir
- 添加文件到已有的压缩文件
zip archive.zip file3.txt
- 排除某些文件或目录
zip -r archive.zip mydir -x "*.bak”
- 使用密码保护压缩文件
zip -e archive.zip file1.txt
- 压缩并显示进度
zip -r -v archive.zip mydir
- 压缩时使用最大压缩级别
zip -r -9 archive.zip mydir
- 将
- 查看压缩文件内容
unzip -l archive.zip
- 解压 .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包并且安装可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装
- 安装:
yum -y install httpd vsftpd
- 重新安装:
yum -y reinstall httpd
- 升级安装:
yum -y update httpd
- 查询
- 查询YUM源:
yum repolist
- 查询HTTP程序:
yum list httpd
- 查询YUM源:
- 卸载:
yum -y remove httpd
- 查询工具和软件包的关系:
yum provides ifconfig
- 配置YUM仓库/YUM源
- 备份源配置:
mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup
- 创建新仓库文件:
vim /etc/yum.repos.d/centos.repo
- 备份源配置:
- 更新缓存:
yum makecache && yum update
RPM (redhat package manager)
和YUM功能相同,优点不需要配置,直接使用。无法解决依赖关系,无法自行下载软件包
- 安装:
rpm -ivh wget-1.21.1- 7.el9.x86_64.rpm
- i 安装
- v 可视
- h 百分比
- 查询:
rpm -q wget
- 卸载:
rpm -evh wget-1.21.1-7.el9.x86_64
- 升级:
rpm -Uvh wget.rpm
- 查看已安装的软件:
rpm -qa
计划任务
一次性调度执行 at
语法格式
at <TIMESPEC>
示例
- 5分钟后:
now +5min
- 下午茶时间:
teatime tomorrow (teatime is 16:00)
- 第四天中午:
noon +4 days
- 2024年8月3日下午5点:
5pm august 3 2024
- 某年某月某日某时:
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 |
|
示例:
每小时的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 |
|
这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
- facility设备类型:
- LOG_SYSLOG:syslogd自身产生的日志
- LOG_AUTHPRIV:安全认证
- LOG_CRON:调度程序(cron and at)
- LOG_MAIL:邮件系统mail subsystem
- LOG_USER (default):LOG_USER (default)
- LOG_DAEMON:LOG_DAEMON
- LOG_FTP:文件服务器ftp daemon
- LOG_KERN:内核设备kernel messages
- LOG_LPR:打印机设备
- LOG_LOCAL0 through LOG_LOCAL7:用户自定义设备
- level级别:
- LOG_EMERG:紧急,致命,服务无法继续运行,如配置文件丢失
- LOG_EMERG:报警,需要立即处理,如磁盘空使用95%
- LOG_CRIT:致命行为
- LOG_ERR:错误行为
- LOG_WARNING:警告信息
- LOG_NOTICE:普通,重要的标准信息
- LOG_INFO:标准信息
- LOG_DEBUG:调试信息,排错所需,一般不建议使用
相关文件,定义级别
/etc/sysconfig/rsyslog
日志轮转(切割)相关
/etc/logrotate.conf
/etc/logrotate.d/syslog
1 |
|
网络配置
Linux网络接口名称规则
en:eethernet 以太网-双绞线
wl:wirelessLAN:无线网卡
ww:WAN广域网:串行线缆
o:on-board板载网卡
s:hotplug热插拔
p:PCI接口
N:序号或者ID
示例:enp2s0
NetworkManager服务
查看网络管理程序的状态
systemctl status NetworkManager
查看网络子管理程序的状态
systemctl status network
配置网络的工具
- 命令行查看IP:
ip a
- 命令行查网关/默认路由:
ip r
- 命令行查dns:
cat /etc/resolv.conf
配置文件
- 备份配置:
cp /etc/sysconfig/network-scripts/ifcfg-ens33 .
- 编辑配置:
vim /etc/sysconfig/network-scripts/ifcfg- ens32
1 |
|
CentOS9配置IP
vim /etc/NetworkManager/system-connections/ens33.nmconnection
1 |
|
命令行 nmcli
1 |
|
简易图形 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
- 检查禁用匿名账户登录开启:anonymous_enable=YES
- 配置上传指令:
- 启动上传文件的能力:anon_upload_enable=YES
- 启动创建目录的能力:anon_mkdir_write_enable=YES
- 匿名用户执行除上载和创建目录之外的写 入操作:anon_other_write_enable=YES
- 默认权限掩码:anon_umask=022
- 匿名用户主目录:anon_root=/var/ftp
- 匿名用户访问速率:anon_max_rate=0
- 重启ftp程序:systemctl restart vsftpd
- 创建上传目录:
mkdir /var/ftp/upload
chmod 777 /var/ftp/upload
- 客户端测试:
lftp 192.168.142.129
- 上传文件:
put 2.txt
- 创建目录:
mkdir 222
- 上传目录:
mirror -R aaa
系统用户的配置
1 |
|
FTP Server
- 安装vsftp:
yum -y install vsftpd
- 准备分发的文件:
touch /var/ftp/abc.txt
- 启动服务:
systemctl start vsftpd
systemctl enable vsftpd
netstat -anpt
- 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
—> SELINUX=disabled
FTP Clinet
- 安装客户端工具:
yum -y install lftp
- 访问服务器:
lftp 服务器的IP地址
- 查看并下载
NFS Server
Network File System 网络文件系统,Linux/Unix系统之间共享文件 的一种协议
NFS 的客户端主要为Linux,支持多节点同时挂载,以及并发写入
服务端
- 安装NFS服务器:
yum -y install nfs-utils
- 配置NFS服务器:
vim /etc/exports
- /webdata 192.168.142.0/24(rw)
- /webdata指的是发布资源的目录
- 192.168.142.0/24允许访问NFS的客户机
- (rw)可读可写
- 启动NFS服务器:
systemctl start nfs-server
systemctl enable nfs-server
- 检查NFS输出是否正常:
exportfs -v
客户端
- 安装NFS客户端:
yum -y install nfs-utils
- 查看存储端共享:
showmount -e 192.168.142.133
- 手动挂载:
mount -t nfs 192.168.142.133:/webdata /var/www/html/
挂载命令 类型 nfs类型 nfs服务器地址:nfs输出目录 本地目录
- 查看挂载:
df
SSH SERVER
yum install openssh-server
vim /etc/ssh/sshd_config
1 |
|
启动服务:systemctl start sshd
开机启动:systemctl enable sshd
查看端口:netstat -antp | grep sshd
Linux 特殊符号
- # 注释、备注、批注,系统自动忽略,不执行
- ; 命令的分隔符,通过它可以连接多条指令一起执行
例如:touch 111.txt; chmod 777 111.txt
- .. 上级目录
- . 当前目录
- “” 换行,解析变量,如:
echo "$LANG”
,输出:en_US.UTF-8 - ‘’ 换行,不解析变量,如:
echo '$LANG’
,输出:$LANG - / 路径分割
- \ 转义
- ! 历史命令调用
- * 通配符
- $ 调用变量,如:
echo $LANG
- > 输出重定向 >> 追加输出重定向 < 输入重新定向 << 追加输入重定向
- | 管道
- || 或 第一个命令失败,才执行第二个命令,第一个指令成功了,不会执行第二个指令
- && 和 两个一起执行,如果第一个失败了,两个都不执行,如果第一个成功了,第二个失败了,就只执行第一个,如果两个都成功了,就都执行
- & 后台运行
- ~ 家目录
- ` 嵌套命令,反引号中的命令先执行,如 touch `test_date +%T`.txt
三剑客和正则表达式
待补充……