首页 > 系统相关 >Linux常用命令

Linux常用命令

时间:2024-11-02 16:13:10浏览次数:4  
标签:oldboy 文件 -- sql 常用命令 Linux txt root

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安装

  1. 必须将软件下载到本地才能安装
  2. 不能自动解决依赖
  3. 在第三方官网上下载的是.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会变化

image-20240928004811946

解释:

  1. 访问时间,修改后会变更一次,修改后的第一次查看(cat等)会发生改变
  2. Modefy 修改时间,修改后时间会变化 重要
  3. 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 软链接

特点

    1. 软链接inode号不同,类似windows的快捷方式
    2. 软链接中存放着源文件的指针指向和详细信息,文件名称是存在上级目录的block中
    3. 软链接默认的是一个
    4. 软链接可以跨文件系统
    5. 删除源文件会影响链接文件,变为红底白字,并一直闪烁
    6. 创建软链接使用绝对路径
-- 创建软链接
ln -s  源文件   目标文件

软链接和硬链接的区别:笔试题

  1. 硬链接的inode号相同,软链接不同
  2. 创建方式不同
  3. 硬链接不能跨文件系统,软链接可以
  4. 目录不能做硬链接,可以做软链接,文件两个都能做
  5. 删除硬链接不影响源文件,删除软连接文件不影响文件
  6. 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. 正则表达式

  1. 正则表达式分类:
  • 基础正则
  • 扩展正则
  1. ^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. $ 以....结尾
# 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. 普通用户提权
  2. 软件的权限提权,针对启动软件的用户进行提权
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 进入该目录

总结:

  1. 目录默认的权限是 755
  2. 文件默认权限是 644
  3. 脚本的最高权限 755

6. linux 系统默认权限控制命令UMASK

作用:决定我们创建目录和文件的默认权限

  1. 文件的默认权限
  • 由文件的做高权限减去umask的值 就是创建后的文件默认权限
  • 文件的最高权限:rw 666
  • 系统默认创建的文件权限是: 644
  1. 目录的默认权限
  • 由目录的做高权限减去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

磁盘管理

image-20241028233737924

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. 获得更好的安全性

image-20241029000029911

image-20241029001425182

image-20241029002330962

3. 磁盘分区

fdisk 对小于2T的磁盘进行分区

parted 对大于2T的磁盘进行分区

  1. 小于2T的磁盘格式是MBR,使用fdisk进行分区
  • 第一步:插入一块磁盘1T
  • 第二步:物理机不需要重启
  • 查看磁盘列表信息
  • 第三步,磁盘分区
  1. MBR 只能有4个主分区(对小于2T的硬盘)
  2. 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字符显示树状结构,表达进程间的相互关系

image-20241030005211284

image-20241030005240006

image-20241030005309901

image-20241030005344405

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命令查看当前的进程状态 动态

image-20241030005622116

image-20241030005635752

image-20241030005710493

3. 管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭信号,当然除了kill 还有killall pkill

1) 使用kill –l列出当前系统所支持的信号

image-20241030005809894

虽然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

  1. 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配合&将程序放到后台运行

  1. nohup运行的后台程序,它如果有输出的话,会将输出结果保存到当前目录下的nohup.out文件中,容易将磁盘搞满
  2. 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

相关文章

  • Linux系统System V机制共享内存基础用法C++代码示例
    写数据进程代码//writer.cpp#include<iostream>#include<sys/ipc.h>#include<sys/shm.h>#include<cstring>#include<unistd.h>intmain(){//使用ftok()生成一个唯一的键用来标识共享内存,shmfile需要是一个存在的文件,也可以用其他方法来生成用来标识共......
  • 【Linux中的第一个小程序】进度条及printf打印彩色字符
    ......
  • 【Linux】文件操作函数 (详解)
     ......
  • kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz
    ==问题==java.lang.IllegalStateException:officeHomedoesn'texistorisnotadirectory:optlibreoffice7.1==安装==kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz==测试====全过程脚本==[zengwenfeng@localhostDesktop......
  • linux开发必备知识(一)CH340相关以及驱动
    CH340是什么CH340是一种USB转串口的芯片,主要用于将USB接口转换为串口(UART),方便与各种串口设备进行通信。它广泛应用于Arduino、单片机开发板及其他需要串口通信的设备中。​​了解上面的知识后我们就知道了CH340是一款常用的USB转串口转换芯片,通常用于将USB接口连......
  • 嵌入式Linux驱动开发环境搭建-CH340 串口驱动安装
    CH340串口驱动安装驱动安装安装之前一定要连接板子检查驱动是否安上驱动安装我们一般在Windwos下通过串口来调试程序,或者使用串口作为终端,STM32MP157开发板使用CH340这个芯片实现了USB转串口功能。CH340是一款常用的USB转串口转换芯片,通常用于将USB接口连......
  • Linux基础命令
    在Linux学习,进行各种操作过程中需要用到很多种命令,本篇主要讲基础命令仅供大家参考。绝对是干货满满的一篇文章!!!基础命令篇:提示:以下是本篇文章正文内容仅供大家参考1.[root@localhost~]:其中:        root:表示当前系统登录的用户名        @:表示分隔符......
  • Linux文件管理基础命令
    在Linux学习,进行各种操作过程中需要用到很多种命令,本篇主要讲文件管理基础命令仅供大家参考。绝对是干货满满的一篇文章!!!文件管理基础命令篇:提示:以下是本篇文章正文内容仅供大家参考1.cat命令:        作用:查看文件内容        语法:cat文件名   ......
  • linux 内核-nvme driver
    创建NVMe块设备对于Linux的块设备来说,其主要的是通过device_add_disk或者add_disk函数(后者是对前者的简单包装)来向操作系统添加一个设备实例。具体原理我们在之前的文章中已经介绍过,本文不再啰嗦了,想了解的同学请自行翻阅一下历史文章。其基本原理就是通过调用该函数,就会创建......