Linux常用命令
软件安装的方式
1. 使用yum安装
yum -y install 包的名称
yum -y install package1 package2
# 查看某个命令是哪个包的
1. 方式1
yum provides rz
# 查看rz是属于哪个包的
方式2
yum search rz
特点:
(1) 自动解决依赖
(2) 安装的位置是固定的,无法修改
(3) 清空yum仓库的缓存,在尝试安装软件
yum clean all
1.1. yum卸载软件
yum -y remove 包名
# 一次性可卸载多个
# 类似覆盖安装,已经安装过,但是有问题,再重新覆盖安装
yum -y reinstall 包名
2.使用rpm安装
- 必须将软件下载到本地才能安装
- 不能自动解决依赖
- 在第三方官网上下载的是.rpm包
2.1 语法格式
rpm -ivh 包名
# 注意包名必须是.rpm结尾的
# 大多数依赖都存在与yum仓库,如果网络正常,可以使用yum安装的方式先解决依赖,在通过rpm方式安装
# 参数
-i # install 安装
-v # 显示过程 verbose
-h # 显示进度
-qa # 是否安装
-ql # 列出安装的软件装了哪些东西
-qc # 列出指定包的配置文件
-e # 卸载
# 注意 不管使用rpm安装还是yum安装的方式,都能使用yum -y remove进行卸载
2.2 查看包是否成功安装
--方式一:使用which
which wget
# which 命令名称
--方式二 查看包是否安装
rpm -qa 包名
# 直接回车,列出安装的所有rpm包
--方式三:列出指定安装的包装了哪些东西
rpm -ql 包名
[root@sql ~]#rpm -ql yum
/etc/logrotate.d/yum
/etc/yum
/etc/yum.conf
/etc/yum.repos.d
/etc/yum/fssnap.d
/etc/yum/pluginconf.d
/etc/yum/protected.d
/etc/yum/vars
--只显示有关的配置即可
rpm -qc yum
[root@sql ~]#rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
--rpm卸载
rpm -e 包名
--本地安装所有的rpm文件,能自动解决依赖(前提是所有依赖都下载到本地了)
yum -y localinstall *.rpm
path变量
作用:存储着命令的路径
(1):执行命令的流程
- 用户输入命令
- 系统会自动查找PATH变量中的路径是否存在这个命令
- 如果存在则调用执行此命令
- 如果不存在提示command not Found
- 如果命令的路径不存在PATH变量里面,那么执行该命令要使用绝对路径或相对路径
(2):
1. path变量
---1. path变量查看
[root@sql ~]#echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
-- 2. 将指定命令路径添加到PATH变量中,可以是大目录,也可以是更具体的目录
# 将/opt目录添加到PATH变量中
[root@sql ~]#PATH="$PATH:/opt/"
[root@sql ~]#echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/
# 这样的方式重启失效,如果需要永久生效,需要放到vim /etc/profile 中
--在profile文件中添加下面格式的内容即可
export PATH=/usr/local/mysql/bin:$PATH
# 在 PATH变量前后位置添加的效果是优先值,如果添加在前面需要在PATH变量前+ : 如果添加在后面,需要在PATH变量后+ :
export PATH=/usr/local/mysql/bin:$PATH:/opt
--重新加载 /etc/profile 文件
# 方式一
source /etc/profile
# 方式2
. /etc/profile
# 方式3
重新连接客户端或打开新的客户端
文件专题
1. 文件详细属性
--1. 查看文件详细属性
[root@sql ~]#ll -i 1.txt
33574992 -rw-r--r-- 1 root root 4 9月 25 00:58 1.txt
# 第一列 33574992
索引文件->先找到文件的索引才能找出具体里面存放的内容
索引->内容 存折目标位置的指向指针
文件的inode号码如果相同,说明两个文件互为硬连接
--2. 磁盘是否写入需要检查inode 和 block
inode: df -i # 查看是否有inode号
block: df -h # 查看是否占用了空间
1.1 查看文件详细属性(访问时间,修改日期等)
[root@sql ~]#stat a.txt
文件:"a.txt"
大小:3 块:8 IO 块:4096 普通文件
设备:803h/2051d Inode:33574979 硬链接:2
权限:(0644/-rw-r--r--) Uid:(0/root) Gid:(0/root)
最近访问:2024-09-28 00:07:41.420421323 +0800
最近更改:2024-09-28 00:07:56.573298870 +0800
最近改动:2024-09-28 00:08:14.084398263 +0800
创建时间:-
[root@sql ~]#ll
总用量 8
-rw-r--r-- 2 root root 3 9月 28 00:07 a.txt
-rw-r--r-- 2 root root 3 9月 28 00:07 head_a.txt
# -rw-r--r-- 2 root root 3 9月 28 00:07 head_a.txt 这些信息都是文件属性,其一变化则change会变化
解释:
- 访问时间,修改后会变更一次,修改后的第一次查看(cat等)会发生改变
- Modefy 修改时间,修改后时间会变化
重要
- change 修改后时间会变化
2. 文件权限
--1. 文件权限
# rw-r--r--
前三位:属主位
中三位:属组位
后三位:其他位
r->可读->权限数字 4
w->可写->权限数字 2
x->可执行->权限数字 1
- 表示空,没权限
# 用户组在Linux中没有任何意义
3. 硬链接和软连接
3.1 硬链接
[root@sql ~]#touch a.txt
[root@sql ~]#echo aa > a.txt
[root@sql ~]#
[root@sql ~]#ln a.txt head_a.txt
[root@sql ~]#ll
总用量 8
-rw-r--r-- 2 root root 3 9月 28 00:07 a.txt
-rw-r--r-- 2 root root 3 9月 28 00:07 head_a.txt
[root@sql ~]#ll -i
总用量 8
33574979 -rw-r--r-- 2 root root 3 9月 28 00:07 a.txt
33574979 -rw-r--r-- 2 root root 3 9月 28 00:07 head_a.txt
# 第四列r--后面的2 硬链接的个数
# 创建方式
ln 源文件 目标文件
# 目录默认是两个硬链接
① . 表示当前目录
② 表示他本身
硬链接的特点:
(1): 具有相同的inode号的文件互为硬链接(a.txt和head_a.txt具有相同的inode号,因此他们互为硬链接)
(2): 硬链接类似于给超市开了多个门
(3): 相当于多张藏宝图,但是指向相同的位置
(4): 目录默认创建的硬链接的个数为两个
(5):目录不能创建硬链接
(6): 硬链接不能跨文件系统
(7):删除一个硬链接,不影响文件
(8): 修改一个另外一个也会发生变化
硬链接的作用:
(1): 备份文件,使用少
3.2 软链接
特点
- 软链接inode号不同,类似windows的快捷方式
- 软链接中存放着源文件的指针指向和详细信息,文件名称是存在上级目录的block中
- 软链接默认的是一个
- 软链接可以跨文件系统
- 删除源文件会影响链接文件,变为红底白字,并一直闪烁
- 创建软链接使用绝对路径
-- 创建软链接
ln -s 源文件 目标文件
软链接和硬链接的区别:笔试题
- 硬链接的inode号相同,软链接不同
- 创建方式不同
- 硬链接不能跨文件系统,软链接可以
- 目录不能做硬链接,可以做软链接,文件两个都能做
- 删除硬链接不影响源文件,删除软连接文件不影响文件
- inode 号为0,则文件被删除(没有被进程调用),删除源文件影响软链接文件
4. 压缩与接压缩
4.1 tar
--tar命令
# 压缩
tar -zcvf 压缩包的名称 文件或目录
-z 必须的参数,使用gzip打包
-c 创建文件 create
-v 显示过程
-f 指定文件
-C 解压到指定目录
# 案例
--1. 打包当前的1.txt文件为test.tar.gz
[root@sql ~]#echo aaa> 1.txt
[root@sql ~]#ll
总用量 4
-rw-r--r-- 1 root root 4 9月 28 01:01 1.txt
[root@sql ~]#cat 1.txt
aaa
[root@sql ~]#tar -zcvf test.tar.gz 1.txt
1.txt
# tar zcvf test.tar.gz 1.txt 参数前不加- 也可以
[root@sql ~]#ll
总用量 8
-rw-r--r-- 1 root root 4 9月 28 01:01 1.txt
-rw-r--r-- 1 root root 118 9月 28 01:02 test.tar.gz
-- 查看压缩包的内容
tar -tf test.tar.gz
-- 解压
4.2 zip
--1.压缩文件
zip test.zip file
--2. 解压文件
unzip test.zip
-d 解压到指定目录
# 案例
1. 压缩文件
zip test.zip *.txt
2. 解压
unzip test.zip # 解压到当前目录
3. 解压到指定目录
unzip test.zip -d /opt/ # 解压到/opt/目录下
四剑客专题
1. find
1.1 基础语法
禁止从/下直接查找文件
文件类型
f 表示普通文件
d 表示目录
l 表示软链接
b 表示块设备 硬件
c 表示字节文件
--按文件类型查找
### 查找常规文件
查找所有的普通文件:
find /path/to/search -type f
### 查找目录
查找所有的目录:
find /path/to/search -type d
### 查找符号链接
查找所有的符号链接:
find /path/to/search -type l
### 查找块设备文件
查找所有的块设备文件:
find /path/to/search -type b
### 查找字符设备文件
查找所有的字符设备文件:
find /path/to/search -type c
### 查找套接字文件
查找所有的套接字文件:
find /path/to/search -type s
### 查找命名管道文件
查找所有的命名管道(FIFO)文件:
find /path/to/search -type p
### 如果想在`/var/log`目录中查找所有的普通文件,可以使用:
find /var/log -type f
--按文件名称查找
find /oldboy/ -name "1.txt"
find /oldboy/ -name "*.txt"
--不区分大小写查询
# + -i参数
find /oldboy/ -iname "*.txt"
--使用深度等级查询(比如只查询当前目录下的一级目录等)
[root@sql ~]#find ./ -maxdepth 1 -type f
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./.bash_history
./.mysql_history
./.viminfo
./1.txt
./test.tar.gz
# -maxdepth 1 查询当前目录下一级目录或文件
-- 按照inode查找文件,当我们无法删除文件的时候,使用inode查找辅助删除
[root@sql ~]#ll -i
总用量 8
33574979 -rw-r--r-- 1 root root 4 9月 28 01:01 1.txt
33574987 -rw-r--r-- 1 root root 118 9月 28 01:02 test.tar.gz
[root@sql ~]#find ./ -inum 33574979
./1.txt
-- 根据文件大小查找
[root@sql /]#mkdir oldboy
[root@sql /]#cd oldboy/
[root@sql /oldboy]#dd if=/dev/zero of=1.txt bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600字节(105 MB)已复制,0.629038 秒,167 MB/秒
[root@sql /oldboy]#dd if=/dev/zero of=2.txt bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760字节(10 MB)已复制,0.123881 秒,84.6 MB/秒
[root@sql /oldboy]#dd if=/dev/zero of=3.txt bs=1M count=50
记录了50+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,0.548066 秒,95.7 MB/秒
[root@sql /oldboy]#ll
总用量 163840
-rw-r--r-- 1 root root 104857600 9月 28 01:42 1.txt
-rw-r--r-- 1 root root 10485760 9月 28 01:42 2.txt
-rw-r--r-- 1 root root 52428800 9月 28 01:42 3.txt
[root@sql /oldboy]#ll -h
总用量 160M
-rw-r--r-- 1 root root 100M 9月 28 01:42 1.txt
-rw-r--r-- 1 root root 10M 9月 28 01:42 2.txt
-rw-r--r-- 1 root root 50M 9月 28 01:42 3.txt
# 1. 查找文件大于1M的文件
[root@sql /oldboy]#find ./ -size +1M
./1.txt
./2.txt
./3.txt
# 2. 查找文件等于100M的文件
find ./ -size 100M
# 3. 查找文件小于100M的文件
find ./ -size -100M
# 4. 查找大于1M并且小于100M的文件
# -a 表示并且关系,可省略
find ./ -size +1M -size -100M
find ./ -size +1M -a -size -100M
# 5. 查找文件大于10M或者等于5M的文件
# -o 表示 或
find ./ -size +10M -o -size 5M
--按照修改时间查找
atime 访问时间
mtime 修改时间
ctime 改变时间
# 1.查找修改时间为10天前的文件
find ./ -mtime +10
# 2. 查找修改时间为2天内的
find ./ -mtime -2
1.2 find查找到的文件交给其他命令去处理
方法一:xargs
xargs处理的内容默认会甩到命令的最后面去执行
但是使用 xargs -i {}
可以将xargs处理的内容查到指定位置运行
--1. find查找到的内容进行删除 交给rm处理
# xargs 后面的别名无效
find ./ -name "3.txt"|xargs rm
--2. 查找到的内容交给ls查看
find ./ -name "3.txt" |xargs ls -l
--3. 查找到的文件交给mv移动
find /opt/ -name "*.txt" |xargs -i mv {} /tmp/
find /opt/ -name "*.txt" |xargs -i cp {} /tmp/
方法二: exec
--1. find 查找到的内容进行删除,交给rm 处理
find ./ -name "1.txt" -exec rm {} \;
# \ 去掉;的特殊含义
# ;以分号结尾
--2. find结果交给cp
find ./ -name "1.txt" -exec cp {} /opt/ \;
--3. find结果交给mv
find ./ -name "1.txt" -exec mv {} /opt/ \;
--4. find结果交给ll
find ./ -name "1.txt" -exec ls -l {} \;
方法三: 优先执行
--1. 使用反引号优先执行的方式
`` $()
rm -rf `find ./ -name "1.txt"`
rm -rf $(find ./ -name "1.txt")
-- 2.find 交给 cp执行
cp `find ./ -name "1.txt"` /opt/
2. grep
模糊过滤查找内容
# 语法结构
grep '查找的内容' 文件
参数:
-r 递归过滤文件内容
-l 显示包含匹配内容的文件名而不是具体的文件内容
-v 取反
-w 精确匹配
-i 不区分大小写
-n 显示过滤到内容的行号
-c 统计单词次数
-o 查看匹配过程
-E 扩展正则
3. sed
作用:
(1)内容查找
(2)增加内容
(3)替换内容
(4)删除内容
(5)格式化输出
# 1. 查找内容
语法结构:
sed '/找谁/动作' file
动作:
-p: print 输出查找到的内容,模糊查询
-d: delete 删除查找到内容的行
选项参数:
-n:取消默认输出--默认输出所有内容
# 2. 替换--重点
语法:
sed 's#替换谁#替换成谁#g'
# 3. 删除,是临时的不会修改源文件。如果需要修改源文件,添加 -i参数
sed '3d' file
案例1:删除该文件的第三行
[root@sql ~]#sed '3d' 1.txt 此时相当于预览
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@sql ~]#sed -i '3d' 1.txt
[root@sql ~]#cat 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例2:指定区间删除
sed '2,4' file
# 删除第二行到第四行
案例3:过滤区间范围进行统计,过滤时间日志
比如:统计最近两个小时的日志或者过滤昨天一天的日志
(1)日志切割
mv 当前日志并进行今日日期的命名即为日志的切割,需要重启服务
(2)取区间范围统计,统计一个小时的日志
sed -n '/2024:03:01/,/2024:04:01/p' acces.log
3. sed 增加/追加内容
语法:
sed '3a 内容' file # 在第三行的后面追加内容
sed '3a 内容' file # 在第三行处插入内容
sed '3c 内容' file # 替换整行内容
4. 替换(想要修修改源文件 。使用-i)
语法:
sed 's#替换的内容#替换成谁#g' file
### 可以是任意的字符
sed 's///g' file
sed 's@@@g' file
参数:
s 替换标志
g 全局
案例1:替换内容
sed 's#root##g' file # 将root替换为空格
案例2:替换文件中的特殊符号,替换: 为空格
sed 's#:# #g' file
案例3:替换多个字符为空格
sed 's#:/# #g' file # 替换:和/为空格
4. awk
4.1 语法结构
awk 语法
awk '找谁' file
查找指定行:awk 'NR==3' 找出第三行
模糊查找:awk '/查找内容/' file
区间模糊查询:awk '//,//' file
比较表达式查找:awk '$3==0' file 第三列如果有等于0的行就输出
awk '$1=="root"' file 第三列如果有root的行就输出
awk '{动作}' file
# awk 找谁 干啥
awk '找谁{print $1}' file
awk 的内置变量
(1): NR 存储着每行的行号
NR==3 第三行
4.3 awk的内置变量
(1): NR 存储着每行的行号
NR==3
取出第三行NR!=3 ! = 取反
NR>3
找出大于3的行(第三行后面的行)(2) : $0 存储着每行的内容
,表示空格 awk '{print $0,NR}'
$1 表示第一列
$2 表示第二列
NF 存储着最后与一列的列号
4.2 案例
案例1:awk按照行查找
# 取出第三行
[root@sql ~]#cat 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@sql ~]#
[root@sql ~]#awk 'NR==3' 1.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
# 案例2 :取出3-5行 并且 &&
[root@sql ~]#awk 'NR>2 && NR < 6' 1.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
# 案例3 取出第一行和大于第三行的内容 或者 ||
[root@sql ~]#awk 'NR==1 || NR>3' 1.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
# 案例4 输出所有内容
awk '{print $0}' 1.txt # 会输出1.txt的所有内容
# awk 取列
awk '{print 列号}' file
列号 默认按照 tab 或者空格来分隔列数
$1 表示第一列
$2 表示第二列
案例1: 取出文件中的第一列
awk '{print $1}'
案例2: 取出第一列和第二列
awk '{print $1"\t"$2}' file
awk '{print $2"\t"$1}' file
awk '{print $2,$1}' file
案例3 : 取出倒数第一列
awk '{print $NF}' file
案例4: 取出倒数第二列
awk '{print $(NF-1)}'
指定分隔符(默认分隔符是空格 和tab)
-F
# 以下爱两种方式皆可
awk -F: '{print $1}' file -F指定分隔符为:
# 下面这种方式 双引号之内可以写正则
awk -F ":" '{print $1}' file -F指定分隔符为:
awk -F "[:/]" '{print $1}' file 以冒号或者/作为分隔符
awk运算
BEGIN 读取文件之前的操作
正则表达式
1. 特殊符号
(1) ; 命令的分隔符,不管前面的命令执行失败或正确都会往后执行
[root@sql ~]#ll ; mkdir sc ;cd sc; pwd
总用量 8
-rw-r--r-- 1 root root 4 9月 28 01:01 1.txt
-rw-r--r-- 1 root root 118 9月 28 01:02 test.tar.gz
/root/sc
[root@sql ~/sc]#llll ; mkd scm ; pwd
-bash: llll: 未找到命令
-bash: mkd: 未找到命令
/root/sc
(2) && 命令分隔符,只有前面的命令执行成功,才会继续向后执行,否则全部命令执行失败
# 命令执行失败 1. 命令错误 2. 执行结果错误,包括找不到等一切异常情况
mkdir nn && ll /opt
(3) || 前面的命令必须执行失败,才执行管道后面的命令或内容
案例1:执行成功则不会执行后面的命令
[root@sql ~]#mkdir nn || ll
[root@sql ~]#ll
总用量 0
drwxr-xr-x 2 root root 6 9月 28 11:52 nn
案例2: 执行失败执行后面的内容
# 如果进入oldboy目录失败则创建
[root@sql ~]#cd oldboy || mkdir oldboy
-bash: cd: oldboy: 没有那个文件或目录
[root@sql ~]#ll
总用量 0
drwxr-xr-x 2 root root 6 9月 28 11:52 nn
drwxr-xr-x 2 root root 6 9月 28 11:53 oldboy
2. 正则表达式
- 正则表达式分类:
- 基础正则
- 扩展正则
^word
以...开头的行
grep '^o' oldboy.txt
# 只显示以o开头的行
# 取出以#开头的所有行
[root@sql ~]#grep '^#' /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
# 取出除了#开头的所有行 grep -v grep取反
[root@sql ~]#grep -v '^#' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
$
以....结尾
# 1. 排查所有空行
[root@sql ~]#grep -v '^$' /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
# 2. 取出所有未被注释的和非空行的行
[root@sql ~]#grep -v '^$' /etc/selinux/config |grep -v '^#'
SELINUX=disabled
SELINUXTYPE=targeted
查找文件空行
grep ' ' oldboy.txt
查看文件内容行后面是否有空格
cat -A oldboy.txt
[root@sql ~]#cat -A oldboy.txt woshishi$ fndasnfna$ fadshfashf $ # 改行是以空格结尾 fadsnbfjsanhfsjdplkaskas $ # 改行是以空格结尾 ghudasghfuhasdjihfasdjfokajfiq-fkemas$ dsamfasmodasfl]d;safdsa'kfa$ $ # 查看文件内容是否存在tab键 [root@sql ~]#cat -A oldboy.txt woshishi$ fndasnfna$ fadshfashf $ fadsnbfjsanhfsjdplkaskas $ ghudasghfuhasdjihfasdjfokajfiq-fkemas$ dsamfasmodasfl]d;safdsa'kfa$ $ $ woshiole^Ibiy$ ^I 说明之间有一个tab键
-- 1. 如果使用 $ 获取不到内容,一定要查看文件行是不是以空格结尾的
---2. 单引号 所见及所得 不会解析变量和特殊符号
---3. 双引号 会解析变量和特殊符号
用户管理
1. 用户分类
默认的三类用户
# 可以根据UID进行区别
1. 管理员 root -> UID 0
2. 虚拟用户 -> UID 1-999 在运行程序的时候必须使用一个用户来执行,用户不需要登录操作系统
3. 普通用户 -> UID 1000+ 包含1000
我们自己创建的用户可以指定任意的UID,如果不指定 默认从1000开始往后排
2. 用户相关的配置文件
(1) /etc/passwd
用户文件
[root@sql ~]#head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 以:为分隔 每一列的含义
root 表示用户名称
x 加密密码文件
0 UID
0 组ID
root 用户的描述符(可以是空的)
/root 用户的家目录
/bin/bash 命令解释器(表示用户是普通用户) /sbin/nologin 表示虚拟用户,禁止登录 操作系统
(2) /etc/shadow
密码文件
[root@sql ~]#cat /etc/shadow
root:$6$Qm7zquam$XjcgwIBJ05bu9yefuXZdVc5QMoSSP1N78oxpUcwYKw3N4qqczc1G0bCOuAKkPunODAnJ0Vt2gPpBj15jt5moJ/:19988:0:99999:7:::
root: 用户
$6$Qm7zquam$XjcgwIBJ05bu9yefuXZdVc5QMoSSP1N78oxpUcwYKw3N4qqczc1G0bCOuAKkPunODAnJ0Vt2gPpBj15jt5moJ: 密码(加密)
bin:*:18353:0:99999:7:::
# 用户后面是*的表示虚拟用户
bin:!!:18353:0:99999:7:::
# 两个!! 表示普通用户但没有设置密码
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
(3) /etc/group
组文件
[root@sql ~]#cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
3. 与用户相关的目录
(1) /etc/skel
作用:创建用户时,他是用户家目录的模板
第一步:使用命令创建用户oldboy
第二步:系统在/home下创建目录 /home/oldboy
第三步:系统将/etc/skel下的隐藏文件复制到/home/oldboy目录下,也设置为隐藏文件
第四步:复制后将文件的属主数组变更为oldboy
[root@sql ~]#ll /etc/skel/ -a
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc
1. 这两个隐藏文件存放的是环境变量
[root@sql ~] -> 此处如果变成-> -bash-4.2$ 这种形式,就意味着用户家目录下可能缺失了上面的隐藏文件
2. [root@sql ~] -> 此处如果变成-> -bash-4.2$
# 解决
(1) 复制/etc/skel/ .bash_profile .bashrc 这两个文件到用户的家目录下
(2) 或者复制 /etc/skel下的所有隐藏文件到用户的家目录下
(3) 复制后重新连接即可生效
或者:使用 . 或者使用 source 会立刻让 .bash_profile 执行一次
..bash_profile
source .bash_profile
注意:可读文件即可复制->普通用户只要用户可读权限也能复制root用户所属的文件
4. 用户相关的命令
(1) 创建用户
useradd
参数选项:
-u 指定uid
-g 指定gid
-M 不创建家目录(默认创建家目录)创建虚拟用户使用
-s 指定解释器
/bin/bash 允许登录
/sbin/nologin 不允许登录 创建虚拟用户使用
1. 默认创建用户 不添加任何参数
useradd oldboy 创建olboy用户
案例2:创建虚拟用户test 不创建家目录 不允许登录操作系统
[root@sql ~]#useradd -M -s /sbin/nologin test
[root@sql ~]#grep test /etc/passwd
test:x:1004:1004::/home/test:/sbin/nologin
# /home/test 此处只显示家目录 但是实际不存在
案例3:创建虚拟用户test01 UID666 GID666 不创建家目录 不允许登录操作系统
[root@sql ~]#useradd -u666 -g666 -M -s /sbin/nologin test01
useradd:“666”组不存在
# 如果指定GID,必须先创建,然后再创建指定的用户的uid
# 如果指定UID 不指定GID 那么小组会自动创建 GID会自动顺延
正确步骤
(1). 创建组
[root@sql ~]#groupadd -g666 test01
(2). 再创建用户
[root@sql ~]#useradd -u666 -g666 -M -s /sbin/nologin test01
[root@sql ~]#grep test01 /etc/passwd
test01:x:666:666::/home/test01:/sbin/nologin
(2) 修改用户信息
usermod
-u UID修改
-g GID修改
-s
-G
(3) 删除用户
userdel -r 用户名
-r 删除用户及其用户的家目录和邮件相关的所有文件
(4) 创建和修改密码
1. 交互式
passwd 直接回车修改当前登录用户的密码
passwd oldboy 修改/创建oldboy用户的密码
2. 非交互式
echo 密码|passwd --stdin 用户名
# 修改oldboy用户的密码为1234
[root@sql ~]#useradd oldboy
[root@sql ~]#passwd oldboy
更改用户 oldboy 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@sql ~]#echo 1234|passwd --stdin oldboy
更改用户 oldboy 的密码 。
passwd:所有的身份验证令牌已经成功更新。
5. MD5指纹校验
作用: 防止文件被篡改
6. sudu提权
(1) 常用命令补充
1. id 用户名
[root@sql ~]#id oldboy
uid=1005(oldboy) gid=1005(oldboy) 组=1005(oldboy)
2. w 显示当前登录的用户 from 列表示公网地址
[root@sql ~]#w
23:23:51 up 0 min, 1 user, load average: 0.21, 0.07, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 23:23 7.00s 0.08s 0.00s w
3. 查看出口的公网地址
[root@sql ~]#curl cip.cc
IP : 116.178.186.47
地址 : 中国 新疆 乌鲁木齐
运营商 : 联通
数据二 : 中国新疆 | 联通
数据三 : 中国新疆乌鲁木齐市 | 联通
URL : http://www.cip.cc/116.178.186.47
4. last(显示用户什么时候登录什么时候退出)
[root@sql ~]#last
root pts/0 10.0.0.1 Thu Oct 10 23:23 still logged in
reboot system boot 3.10.0-1160.el7. Thu Oct 10 23:23 - 23:33 (00:10)
root pts/0 10.0.0.1 Wed Oct 9 23:47 - crash (23:35)
reboot system boot 3.10.0-1160.el7. Wed Oct 9 23:47 - 23:33 (23:46)
root pts/0 10.0.0.1 Tue Oct 8 23:28 - down (00:59)
reboot system boot 3.10.0-1160.el7. Tue Oct 8 23:28 - 00:28 (00:59)
root pts/0 10.0.0.1 Tue Oct 1 11:35 - crash (7+11:53)
5.lastlog 显示用户最后一次登录的时间
(2) 切换用户
su
语法:
su - 用户名称
案例1:root用户切换成普通用户 --不需要密码
su - oldboy
案例2:普通用户切换root --需要密码
su -
su - root
su 和 su - 的区别 su切换用户会不加载环境变量
案例3:普通用户切换普通用户 -- 需要密码
(3) sudu 提权
给普通用户授权
作用:
- 普通用户提权
- 软件的权限提权,针对启动软件的用户进行提权
1. 查看当前普通用户有无sudo权限
sudo -l # 然后输入当前用户的密码查看权限
2. sudo 提权,在root中进行配置
# 如果要授予该用户单独的命令让它有root的权限执行该命令,则在第三列All下写命令的绝对路径
# 使用 which 命令名 查看命令的绝对路径
执行:visudo,会打开文件,在第100行后新增用户即sudo权限即可
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
需要sudo的用户名 不变 写命令的绝对路径
101 oldboy ALL=(ALL) /usr/bin/cat
3. 保存退出即可生效
4. 使用被授权的用户进行测试
5. 使用被授权的普通用户登录 sudo cat /var/log/messasges
sudo 授权单个命令
oldboy ALL=(ALL) /usr/bin/cat
sudo 授权多个命令 使用逗号分隔 命令都需要使用绝对路径
oldboy ALL=(ALL) /usr/bin/cat,/usr/bin/tailf
sudo 授权所有的命令
oldboy ALL=(ALL) All
# 使用sudo的时候不用输入密码
oldboy ALL=(ALL) NOPASSWD: All
# 注意 普通用户拥有sudu所有权限后,为了避免执行命令每次输入sudo
可以使用:sudo su - 会变为彻底的root用户
sudo 授权所有的命令 取反(不能使用的命令)
oldboy ALL=(ALL) All,!/usr/bin/rm, !/usr/bin/vim
文件权限
1. 查看用户对当前文件的权限
使用ll等查看
2. rwx对应的数字
r 4 读权限
w 2 写权限
x 1 执行权限
- 0 无权限
命令或脚本才有赋予执行权限的意义,对于一个普通文件来说,它的最高权限应该是rw
3. 改变文件权限
每个位置的表示方式:
属主:u user
数组:g group
其他:o other
chmod语法格式:
chmod u+w 给属主增加写的权限
chmod u-w 给属主取消写的权限
(1) 直接权限赋值
案例1:给属主位增加x权限
[root@sql ~]#touch 1.txt
[root@sql ~]#ll
总用量 4
-rw-r--r-- 1 root root 345 10月 11 23:49 1.txt
[root@sql ~]#chmod u+x 1.txt
[root@sql ~]#ll
总用量 4
-rwxr--r-- 1 root root 345 10月 11 23:49 1.txt
案例2:给属主位取消x权限
chmod u-x 1.txt
案例3:给属组怎加写的权限
chmod g+w 1.txt
案例4: 给其他人增加x的权限
chmod o+x 1.txt
chmod o+wx 1.txt
chmod o+rwx 1.txt
案例5: 给所有位 u g o全部增加执行权限
chmod +x 1.txt --方式1
chmod a+x 1.txt --方式2
案例6: 给所有位 u g o全部增加执行权限
chmod -x 1.txt --方式1
chmod a-x 1.txt --方式2
案例7:先清空,在赋值 u=x
chmod u=x 1.txt 会把属主的权限先清空,在进行赋值x权限
(2) 使用数字进行权限赋值
chmod 644 file
6 rw
4 r
4 r
案例1:授权文件 u 读写权限 g 读写权限 o 读写权限
chmod 666 file
案例2:授权文件的属主可读写,其他位无权限
chmod 600 file
(3) 递归授权
1. 授权目录下所有的文件权限600
chmod -R 600 目录
# 不建议使用,有可能更改目录权限
2. 实际场景中,我们只对文件进行授权
find oldboy/ -type f |xargs chmod 600
4. rwx对于文件含义
注意:当一个文件属于某个用户,用户及时没有写权限,也可以使用强制写入退出
文件的rwx 表示文件可读 可写 可执行 但是不能删除
因为目录的权限决定文件创建 删除 移动 复制等
r 权限对于文件的作用
1): 只读 可查看文件内容
2): 不能正常写入,但是可以强制写入:wq!
3): 不能执行,因为没有x权限
w 权限对于文件的作用
1) 啥都不能干
2) 只能echo写入 echo hhh > 1.txt
x 权限对于文件的作用
1) 啥都不能干
权限组合才能正常使用
1) 权限位置只有r是没问题的表示文件可读
2) 如果文件需要读写 必须 rw 一起
3) 想要执行文件 必须 rx 一起
4) rwx 是对于脚本的最高权限
5) 对于文件的最高权限是rw(6)
5. rwx 对于目录的作用
r 权限的作用:啥都不能干
w 权限的作用:啥都不能干
x 权限的作用: 只能使用cd进入
总结:rwx 单个权限对目录的作用,啥都不能干
1) 查看目录下的内容及该目录下文件的内容需要 r-x权限
2) 在目录下删除 改名 创建文件 需要 rwx 权限 r 能看目录下的内容,w 创建删除改名等 x 进入该目录
总结:
- 目录默认的权限是 755
- 文件默认权限是 644
- 脚本的最高权限 755
6. linux 系统默认权限控制命令UMASK
作用:决定我们创建目录和文件的默认权限
- 文件的默认权限
- 由文件的做高权限减去umask的值 就是创建后的文件默认权限
- 文件的最高权限:rw 666
- 系统默认创建的文件权限是: 644
- 目录的默认权限
- 由目录的做高权限减去umask的值 就是创建后的目录默认权限
- 目录的最高权限 rwx 777
- 系统默认目录的文件权限是: 755
umask的默认值是:022
1. 查看umask值
umask
2. 临时修改
umask 044
7. 文件的隐藏权限位
作用:保护重要的系统文件
i 啥都不能干
a 只能追加写入内容
查看文件隐藏权限
lsattr 1.txt
设置隐藏权限a
定时任务
1. 定时任务分类
(1) 系统定时任务
/etc/crontab 系统定时任务编辑 vim /etc/crontab 系统定时任务书写方式 * * * * * root command 分 时 日 月 周 用户 分钟:0-59 小时:0-23 日: 1-31 月: 1-12 周: 0-6 or 1-7 root 那个用户执行的 系统定时任务一般使用root # Example of job definition: # .---------------- 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 # | | | | | # * * * * * user-name command to be executed * * * * * command_to_execute - - - - - | | | | | | | | | +---- 一周中的星期几 (0 - 7) (星期天为0或7) | | | +------ 月份 (1 - 12) | | +-------- 一个月中的哪一天 (1 - 31) | +---------- 小时 (0 - 23) +------------ 分钟 (0 - 59)
(2) 用户定时任务
定时任务的配置文件最好进行备份
root 是配置文件,哪个用户登录,显示的就是以哪个用户名命名的文件
/var/spool/cron/root 用户定时任务编辑 crontab -e 实际是编辑了(如果是root用户) vim /var/spool/cron/root 文件 crontab -e 带有语法检测的功能 查看日志 tailf /var/log/cron
(3) 案例:
案例1:每5分钟做一次时间同步
*/5 * * * * root ntpdate ntp1.aliyun.com
(4) 用户定时任务和系统定时任务的区别
最好养成习惯定义定时任务时添加PATH变量
1. 用户定时任务默认的PATH变量只识别 <PATH=/usr/bin:/bin> # 在用户的定时任务中增加PATH变量 [root@sql ~]#echo $PATH /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt:/root/bin [root@sql ~]#crontab -l PATH=/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt:/root/bin #1. sync time by lidao996 at 20230101 3 * * * * /sbin/ntpdate ntp.aliyun.com &>/dev/null 3 * * * * /sbin/ntpdate ntp.aliyun.com &>/dev/null &>/dev/null
磁盘管理
1. 磁盘分类
1.1 磁盘接口
1. IDE 淘汰
2. SCSI 淘汰
3. STAT 常见(家用)
4. SAS 企业服务器标配
1.2 机械磁盘转速
家用:STAT 5400 7200 10000/分钟
企业:STAT or SAS 7200 10000 存储或测试
2. 磁盘raid
又叫:磁盘整列 raid卡/阵列卡
为什么要做raid
: 1. 获取更大容量: 将多块磁盘在逻辑上合成一个磁盘
:2. 获得更高的性能
:3. 获得更好的安全性
3. 磁盘分区
fdisk 对小于2T的磁盘进行分区
parted 对大于2T的磁盘进行分区
- 小于2T的磁盘格式是MBR,使用fdisk进行分区
- 第一步:插入一块磁盘1T
- 第二步:物理机不需要重启
- 查看磁盘列表信息
- 第三步,磁盘分区
- MBR 只能有4个主分区(对小于2T的硬盘)
- GPT 无限制(主分区)
查看磁盘列表信息 fdisk -l # 磁盘分区 fdisk 磁盘名称 第三步:磁盘分区(类似给房间打隔断) [root@oldboy ~]# fdisk /dev/sdb d delete a partition # 删除一个分区 l list known partition types # 列出分区类型 m print this menu # 打印帮助 n add a new partition # 创建分区 p print the partition table # 输出分区表 q quit without saving changes # 退出不保存 w write table to disk and exit# 保存并退出 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 直接回车即可 First sector (2048-20971519, default 2048): 2048 直接回车即可 Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): p Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xcf1f945d Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux 删除一个分区: Command (m for help): d Partition number (1-4, default 4): 4 分完区查看: Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xcf1f945d Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux /dev/sdb4 6293504 20971519 7339008 5 Extended /dev/sdb5 6295552 10489855 2097152 83 Linux /dev/sdb6 10491904 20971519 5239808 83 Linux 第四步: 格式化分区(装修风格、清理房间) [root@oldboy ~]# mkfs.xfs /dev/sdb1 make file system 制作文件系统 默认使用xfs即可 第五步: 挂载使用 创建一个入口文件,空的目录 [root@oldboy ~]# mount /dev/sdb1 /mnt [root@oldboy ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 980M 0 980M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.5M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/sda3 18G 2.3G 16G 13% / /dev/sr0 4.5G 4.5G 0 100% /data /dev/sda1 197M 110M 88M 56% /boot tmpfs 199M 0 199M 0% /run/user/0 /dev/sdb1 1014M 33M 982M 4% /mnt 卸载磁盘: [root@oldboy ~]# umount /mnt 第六步: 写入开机自动挂载 [root@oldboy ~]# tail -1 /etc/fstab /dev/sdb1 /mnt xfs defaults 0 0 [root@oldboy ~]# mount -a 执行一次/etc/fstab中的配置 企业常用磁盘挂载方式: 1.插入新的磁盘900G 2.格式化分区 # 直接使用下面的命令相当与windows 硬盘格式化 会自动分区 [root@oldboy ~]# mkfs.xfs -f /dev/sdb 3.挂载使用 [root@oldboy ~]# mount /dev/sdb /mnt [root@oldboy ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 980M 0 980M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.5M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/sda3 18G 2.3G 16G 13% / /dev/sr0 4.5G 4.5G 0 100% /data /dev/sda1 197M 110M 88M 56% /boot tmpfs 199M 0 199M 0% /run/user/0 /dev/sdb 10G 33M 10G 1% /mnt 大于2T磁盘分区: parted 配置好后分区直接生效 第一步: 插入3个T磁盘 第二步: 分区 help 查看帮助信息 mklabel 创建新的磁盘标签 mkpart 创建分区 print 查看分区 quit 退出 rm 删除分区 第一步:parted /dev/sdc # 修改为gpt格式 第二步: (parted) mklabel gpt 第三步: (parted) mkpart # 开始分区 第四步: Partition name? []? test1 # 主分区的名称 第五步: File system type? [ext2]? xfs # 文件系统类型 第六步: Start? 0 # 开始 第七步: End? 500G # 结束大小 第八步 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? I # 输入I 忽略 第九步: (parted) print # 打印分区表 Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 500GB 500GB test1 (parted) mkpart Partition name? []? test2 File system type? [ext2]? xfs Start? 500G End? 1000G (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 500GB 500GB test1 2 500GB 1000GB 500GB test2 删除分区: (parted) rm Partition number? 2 支持非交互式分区: (parted) mkpart test2 xfs 500G 1000G (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 500GB 500GB test1 2 500GB 1000GB 500GB test2 在shell命令行直接分区: [root@oldboy ~]# parted /dev/sdc mkpart test3 xfs 1000G 2000G 查看分区: [root@oldboy ~]# parted /dev/sdc print 删除分区: [root@oldboy ~]# parted /dev/sdc rm 3 第三步: 格式化分区 [root@oldboy ~]# mkfs.xfs /dev/sdc1 第四步: 挂载使用 [root@oldboy ~]# mount /dev/sdc1 /mnt You have new mail in /var/spool/mail/root [root@oldboy ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 980M 0 980M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.5M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/sda3 18G 2.3G 16G 13% / /dev/sda1 197M 110M 88M 56% /boot tmpfs 199M 0 199M 0% /run/user/0 /dev/sdc1 466G 33M 466G 1% /mnt
4. 磁盘相关案例
案例1.服务器内存满会杀死占用内存最高的进程,oom内存溢出
导致内存溢出的原因:
1)访问量大,增加内存
2)由于进程程序导致内存飙升java,查找程序的原因
3)由于业务的网络波动原因
4)内部服务器 内存不够用的时候临时使用swap解决
swap分区: 是磁盘的分区不是内存 速度非常慢
swap建议分配内存的1-1.5倍 如果内存大于8G 则swap给8G即可
创建swap方式:
两种
第一种安装操作系统进行分区
第二种安装完操作系统创建swap
1)创建一个块文件
[root@oldboy ~]# dd if=/dev/zero of=/tmp/1g bs=1M count=1000
2)格式化为swap类型
[root@oldboy ~]# mkswap /tmp/1g
3)挂载swap分区
[root@oldboy ~]# swapon /tmp/1g
swapon: /tmp/1g: insecure permissions 0644, 0600 suggested.
You have new mail in /var/spool/mail/root
[root@oldboy ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 120M 734M 9.5M 1.1G 1.7G
Swap: 3.0G 0B 3.0G
4)查看swap分区的组成
[root@oldboy ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -2
/tmp/1g file 1023996 0 -3
5)卸载swap文件
[root@oldboy ~]# swapoff /tmp/1g
系统分区:
/boot
/
案例2.磁盘无法写入怎么解决
1.inode号满
df -i
2.block满
df -h
如何查找小文件多的目录
find / -type d -size +1M
如何查找大文件
find / -type f -size +1G
查看整个目录及下面所有内容的大小
du -sh
案例3.删除文件不释放磁盘空间
因为进程被调用的原因导致无法释放
模拟进程被调用:
1.生成1个大文件
dd if=/dev/zero of=/tmp/1g bs=1M count=1000
2.调用文件
[root@oldboy ~]# tailf /tmp/1g
3.删除文件发现磁盘空间没有释放
4.查看文件被哪个进程所有调用lsof
安装命令
[root@oldboy ~]# yum -y install lsof
[root@oldboy ~]# lsof |grep 1g
vim 2488 root 3r REG 8,3 1048576000 17573898 /tmp/1g (deleted)
vim 2488 root 4u REG 8,3 4096 17573899 /tmp/.1g.swp
You have new mail in /var/spool/mail/root
[root@oldboy ~]# kill -9 2488
****案例4.解决磁盘不够用
第一块磁盘不够用: 由于日志文件占用磁盘空间过大
/var/log/nginx/access.log # 默认第一块磁盘空间100G
上面路径不变,解决磁盘不够用!
第一步: 增加一块磁盘 2T
第二步: 挂载磁盘
mkdir /data
mount /dev/sdb /data
第三步: 将access.log移动到新的磁盘(禁止用户上传或者写入数据)
第四步: 做软链接
ln -s /data/access.log /var/log/nginx/access.log
任务管理
1. 进程的概述
1.什么是进程
当我们运行一个程序,那么我们将运行的程序叫进程
PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限
PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息
2.程序和进程的区别
程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文 件,同时程序可以长期存在系统中
进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程 随着程序的终止而销毁,不会永久存在系统中
3.程序的生命周期
一个对象从无到有、从有到无过程称为生命周期
2. 监视进程状态
程序在运行后,我们需要了解进程的运行状态,查看进程的状态分为:静态和动态两种方式
1.使用ps命令查看当前的进程状态(静态)
ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
-a显示所有终端机下执行的进程,除了阶段作业领导者之外
-u以用户为主的格式来显示进程状况
-x显示所有进程,不以终端机来区分
-f用ASCII字符显示树状结构,表达进程间的相互关系
2.1 案例
1. 案例1
1)在终端1上运行vim
[root@lzy ~]# vim test
2)在终端2上运行ps命令查看状态
[root@lzy ~]# ps axu|grep test #S表示睡眠模式 +表示前台运行
root 14240 0.1 0.5 151868 5676 pts/1 S+ 10:48 0:00 vim test
root 14271 0.0 0.0 112660 968 pts/2 R+ 10:48 0:00 grep --color=auto test
3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态
root@lzy ~]# ps axu|grep test # T表示停止状态
root 14240 0.0 0.5 151868 5676 pts/1 T 10:48 0:00 vim test
root 14279 0.0 0.0 112660 964 pts/2 R+ 10:51 0:00 grep --color=auto test
2. 案例2
PS命令查看不可中断状态进程
使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.6 0.1 124268 1888 pts/2 S+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.7 0.2 124380 2240 pts/2 R+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root 14289 2.9 0.2 124916 2724 pts/2 D+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
2.2 使用top命令查看当前的进程状态 动态
3. 管理进程状态
当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭信号,当然除了kill 还有killall pkill
1) 使用kill –l列出当前系统所支持的信号
虽然Linux信号很多,但是我们仅仅使用最常用的3个信号
1) SIGHUP 重新加载配置文件 1
2) SIGKILL 强制杀死进程 9
3) SIGTERM 平滑终止进程,默认kill使用该信号(将内存中的数据会持续写入到磁盘) 15
[root@lzy ~]# ps axu|grep nginx root 15688 0.0 0.1 87384 1132 ? Ss 12:19 0:00 nginx: master process /usr/sbin/nginx nginx 15689 0.0 0.3 89096 3176 ? S 12:19 0:00 nginx: worker process root 15691 0.0 0.0 112660 968 pts/3 R+ 12:19 0:00 grep --color=auto nginx # 发送重新加载信号 nginx配置文件发生改变,可用此重新加载 [root@lzy ~]# kill -1 15688 [root@lzy ~]# ps axu|grep nginx nginx 15692 0.0 0.3 89376 3648 ? S 12:19 0:00 nginx: worker process root 15722 0.0 0.0 112660 968 pts/3 R+ 12:20 0:00 grep --color=auto nginx 发送停止信号 kill pid root@lzy ~]# kill 15692 强制终止服务 kill -9 15692
- Linux系统中
killall,pkill
命令用于杀死指定名字的进程,我们可以使用kill命令杀死指定进程的PID的进程,killall和pkill直接杀进程而不需要查pid[root@oldboy ~]# yum -y install psmisc # killall需要安装 [root@lzy ~]# killall nginx [root@lzy ~]# pkill nginx 使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出 [root@lzy ~]# pkill -9 -t pts/1
4. 进程后台运行
方式一
nohuo 命令 &
将程序放在后台运行# 方式一 nohuo 命令 & # 1. 程序在后台运行 sleep 3000 & # 在命令末尾添加 & # 2. 程序在后台运行并且 将输出定义到空 ping -c1 -W1 www.baidu.com &>/dev/null # 3. 为了避免关闭当前窗口,使用`&`后台运行的程序也会终止,使用nohup nohup sleep 3000 &
注:& 将程序放在后台运行,当 当前窗口结束时,进程也会随之结束
使用
nohup
配合&
将程序放到后台运行
- nohup运行的后台程序,它如果有输出的话,会将输出结果保存到当前目录下的
nohup.out
文件中,容易将磁盘搞满nohup
配合&
能将程序持续在后台运行而不退出方式二
screen
将程序放在后台运行1. 安装 yum -y install screen 2. 创建一个新的会话 screen -S 会话名称 3. `ctrl a d` 离开当前会话,但该screen 会话仍在运行 4. 查看screen会话 screen -ls or screen -list 5. 重新进入该screen会话 screen -r 会话名称or进程号 6. 在screen 会话中执行 exit or ctrl d 退出(终止)screen 会话
网络知识
1. OSI7层模型
2. 网络抓包
2.1 Linux转包工具tcpdump
1. yum -y install tcpdump
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
#常用选项
[root@oldboyedu ~]#yum -y install tcpdump
-i #监听哪一个网卡
-n #不把ip解析成主机名
-nn #不把端口解析成应用层协议
-c #指定抓包的数量
-S #不把随机序列和确认序列解析成绝对值
-w #将流量保存到文件中,文件中的信息是无法直接查看的
-r #读取文件中的内容
-v #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv #输出详细的报文信息。
-nnvvi eth0
#实例
1、默认启动
tcpdump -vv #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
2、过滤主机
tcpdump -i eth1 host 192.168.1.1 #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth1 src host 192.168.1.1 #指定源地址,192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1 #指定目的地址,192.168.1.1
3、过滤端口
tcpdump -i eth1 port 80 #抓取所有经过eth1,目的或源端口是80的网络数据
tcpdump -i eth1 src port 80 #指定源端口
tcpdump -i eth1 dst port 80 #指定目的端口
4、协议过滤
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
#抓tcp某端口的数据包
tcpdump -i eth0 tcp port 21 -nn
5、常用表达式
非 : ! or "not" (去掉双引号)
且 : && or "and"
或 : || or "or"
#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
标签:oldboy,文件,--,sql,常用命令,Linux,txt,root
From: https://www.cnblogs.com/xyff/p/18522112