一、Linux 命令集


一、目录结构

|-/ # 根节点(`cd /`)
|-/bin # 系统命令
|-/boot # 启动目录
|-/dev # 设备文件保存目录
|-/etc # 系统的所有配置文件
	|-profile # 环境变量配置文件(修改后需`source /etc/profile`使配置文件立即生效)
|-/home # 普通用户的家目录(`cd ~`)
|-/lib # 系统库保存目录
|-/lib64
|-/media # 挂载目录
|-/mnt # 系统挂载目录
|-/opt # 用户的软件安装目录
|-/proc # 直接写入内存的,虚拟文件系统
|-/root # 超级用户的家目录(`cd ~`)
|-/run
|-/sbin # 系统命令
|-/srv
|-/sys # 直接写入内存的,虚拟文件系统
|-/tmp # 临时目录
|-/usr # 系统的软件安装目录(`yum install`默认安装目录)
	|-bin # 系统命令
	|-sbin # 系统命令
|-/var # 系统相关文档内容		

1. bin 和 sbin 系统命令

  • 根目录下的 /bin 和 /sbin,usr 目录下的 /usr/bin 和 /usr/sbin,这四个目录都是用来保存系统命令的。
  1. /bin 二元 (binar),主要放置一些 系统 的必备执行档。
    例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar 等。
  1. /usr/bin,主要放置一些 应用软体工具 的必备执行档。
    例如:c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget 等。
  1. /sbin,主要放置一些 系统管理 的必备程式。
    例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown 等。
  1. /usr/sbin,主要放置一些 网路管理 的必备程式。
    例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump 等。

  • bin 目录下的命令 普通用户root 用户 都可以执行。
  • 但是 sbin 目录下的命令只有 root 用户 可以执行。

2. boot 启动目录

  1. /boot 启动目录,存的是启动相关的文件,该目录下不要乱存东西。

二、目录命令


1. 查看目录

# 显示 目录或文件
ls [-选项] <目录|文件>
ls /etc/ # 查看 etc 目录下所有文件
ls -a # 显示所有目录和文件,包括隐藏文件(.点开头的隐藏文件)
ls -l # 显示详细信息(缩写`ll`)
ll -h # 友好显示文件大小(1582=1.6kb)
ll -d /root/ # 查看目录属性
ls -i # 显示`inode`(主键)
ls --help # 查看帮助信息

-a:显示目录下的所有文件,包括隐藏文件
-A:显示除“.”和“…”外的所有文件
-d:显示目录自身的属性信息
-f:不进行文件排序
-h:以更易读的容量单位显示文件大小
-i:显示文件的inode属性块信息
-k:以字节单位显示文件的大小
-l:使用长格式输出文件信息
-m:以逗号为间隔符输出文件信息
-N:不限制文件长度
-q:用问号代替所有无法显示的字符
-Q:将所有文件名称加上双引号
-r:反向显示文件排序
-R:递归显示所有子文件
-s:显示每个文件名时加上大小信息
-S:依据文件大小排序
-t:依据文件修改时间排序
-u:依据文件访问时间排序

1. ll -hia /root/
19161088 '-rw-r--r--.'  1 root root 1.7K 'Apr  4 21:52' initial-setup-ks.cfg
  1. 19161088:inode 属性(ls -i 主键)
  2. -rw-r--r--.:权限
  3. 1:硬链接次数
  4. root:所属者
  5. root:所属组
  6. 1.7K:文件大小(ll -h 查看)
  7. Apr 4 21:52:文件最后修改时间
  8. initial-setup-ks.cfg:文件名称

2. 切换目录

# 改变目录(change directory)(`Tab`键目录补全)
cd <目录>
cd app # 切换到 app 目录	
cd . # 切换到当前目录
cd .. # 切换到上一层目录
cd / # 切换到系统根目录
cd ~ # 切换到用户主目录(`cd --`)
cd - # 切换到上一个所在目录  
1. pwd
  • pwd 是 Print Working Directory 的缩写,意思是 打印工作目录。
  • 这是一个 shell 内建命令,用于在 Linux 和 Unix 系统中显示当前工作目录的完整路径。
  • 当用户在文件系统中导航时,pwd 命令可以帮助他们确定当前所处的位置。
## 打印工作目录(Print Working Directory) 
pwd [选项]

## [选项]
## 1. -L 或 --logical:如果当前目录是通过符号链接访问的,则返回符号链接的路径。
## 2. -P 或 --physical:不跟随任何符号链接(默认行为)。

在这里插入图片描述


#!/bin/bash
curr_dir=$(pwd)
echo '当前目录:$curr_dir'

curr_dir=$pwd
echo '当前目录:$curr_dir'

curr_dir=$(cd "$(dirname "$(readlink -f "$0")")" &amp;&amp; pwd)
echo '当前目录:$curr_dir'

3. 创建移除目录

# 制作目录(make directories)
mkdir -['选项'] ['目录']	
mkdir app # 当前目录下创建app 目录			
mkdir dir1 dir2 # 同时创建两个目录
mkdir -p dir3/dir4 # 创建级联目录 dir3 下 dir4 目录
# 删除空目录(remove empty directories)
rmdir ['空目录']		

# 去掉(remove)
rm -['选项'] ['目录'|'文件']	

# 删除`file1`文件,询问用户确认(y/n)
rm file1		
# 删除`file2`文件,不询问	
rm -f file2		
# 递归删除`dir1`目录,询问 	
rm -r dir1 		
# 同时删除两个目录,不询问	
rm -rf dir1 dir2    
# 删除所有以`dir`开头的目录|文件
rm -rf dir*   
# 删除`.tar`结尾文件      
rm -rf *.tar		

4. 复制剪切目录

# 复制(copy)
cp -['选项'] ['原目录'|'文件'] ['目标目录']	

# 复制`file1`文件,命名为`file2`文件	
cp file1 file2		

# 复制`file1`文件,到上一层目录	
cp file1 ../    	

# 复制`dir1`目录下的所有文件,到当前目录
cp dir1/* . 		
# 复制`dir1`目录,到上一层目录
cp -r dir1 ../		

# 复制 `/dir1/dir2` 目录,到当前目录
cp -r /dir1/dir2 .	

# 带文件属性复制(最后修改时间保持一致)
cp -p file1 file3

# 若源文件是链接文件,则复制链接属性	
cp -d 				

# 相当于(`-pdr`)
cp -a 				
#复制
cp xxx.log

# 复制并强制覆盖同名文件
cp -f xxx.log

# 复制文件夹
cp -r xxx(源文件夹) yyy(目标文件夹)

# 远程复制
scp -P ssh端口 username@10.10.10.101:/home/username/xxx /home/xxx

# 级联创建目录
mkdir -p /xxx/yyy/zzz

# 批量创建文件夹, 会在test,main下都创建java, resources文件夹
mkdir -p src/{test,main}/{java,resources}

# 移动(move)
mv -['原目录'|'文件'] ['目标目录']
	
# 剪切`file1`文件,重命名为`file2`文件
mv file1 file2   	

# 剪切`file1`文件,到上一层目录
mv file1 ../    	

# 剪切`dir1`目录,重命名为`dir2`目录 
mv dir1 dir2     	

三、文件命令


1. 创建移除文件

# 创建一个a.txt空文件
touch a.txt				
# 创建一个qs文件,并写入'王岩'
echo 王岩 > qs			
# 向wy文件,追加写入'wy'
echo wy >> qs	
> info.log		

# 创建一个`hello.sh`文件,并写入'hello'
echo hello > hello.sh	 

# 授予文件`hello.sh`可执行权限
chmod u+x hello.sh     	
# 删除`file1`文件,询问用户确认(y/n)
rm file1            	
rm -f file1         	# 删除file1文件, 不询问
rm -r file1         	# 递归删除file1文件, 询问
rm -rf *            	# 删除所有文件
rm -rf /*           	# 自杀

2. 查看文件

# 分页查询帮助信息
ls --help       more	

ifconfig        more

cat index.html  more

1. md5sum
  • md5sum 查看文件或字符串的 MD5 值。
  1. MD5 算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。
  2. MD5 全称是报文摘要算法(Message-Digest Algorithm 5)。
  3. 此算法对任意长度的信息逐位进行计算,产生一个二进制长度为 128 位(十六进制长度就是 32 位)的"指纹"(或称"报文摘要")。
  4. 不同的文件产生相同的报文摘要的可能性是非常非常之小的。
  5. md5sum 命令采用 MD5 报文摘要算法(128 位)计算和检查文件的校验和。
  6. 一般来说,安装了 Linux 后,就会有 md5sum 这个工具,直接在命令行终端直接运行。
md5sum [选项] <参数>

## [选项]
## 1. -b或--binary: 把 输入文件 作为 二进制文件 看待
## 2. -t或--text: 把 输入的文件 作为 文本文件 看待【默认】。
## 3. -c或--check: 用来 从文件中 读取 MD5 信息检查文件的一致性。
## 4. --status: 这个选项 和 check 一起使用,在 check 的时候 不输出,而是根据返回值表示检查结果。
## 5. -w或--warn: 在 check 的时候,检查输入的 MD5 信息又没有非法的行,如果有则输出相应信息。

## <参数>
## 1. 文件: 指定 保存的文件名 和 校验和的文本文件


# 查看指定文件的`MD5`值
md5sum zookeeper-3.4.9.tar.gz 
# 3e8506075212c2d41030d874fcc9dcd2  zookeeper-3.4.9.tar.gz

# 将指定文件的`MD5`值写入文件
md5sum zookeeper-3.4.9.tar.gz  > zookeeper.txt

2. cat
# 查看文件全部内容
cat nohup.out
# 参数 n 为显示行号
cat -n nohup.out | grep '关键词'

# 显示匹配字串及后 10 行(After)
cat nohup.out | grep -A 10 '关键字'
# 显示匹配字串及前 10 行(Before)
cat nohup.out | grep -B 10 '关键字'
# 显示日志里匹配字串那行以及前后 10 行(Context)
cat nohup.out | grep -C 10 '关键字'
cat nohup.out | grep -C 10 'Exception'
# 查看特殊字符
cat -v xxx.sh

# 查看去除特殊字符
# 去除文件的特殊字符,比如`^M`需要这样输入`ctrl+v+enter`	
sed -i 's/^M//g’ env.sh
# 处理因系统原因引起的文件中特殊字符的问题
# 可以转换为该系统下的文件格式
cat file.sh > file.sh_bak

# 先将 file.sh 中文件内容复制下来然后运行,然后粘贴内容,最后`ctrl + d`保存退出
cat > file1.sh

# 在 vim 中通过如下设置文件编码和文件格式
:set fileencodings=utf-8 
# 然后 w(存盘) 一下即可转化为 utf8 格式
:set fileformat=unix

3. tail
# 实时查看文件内容
tail -f 文件名
tail -f nohup.out

# 实时日志,过滤关键字
tail -f nohup.out | grep '关键字'
tail -f nohup.out | grep '2023-09-01 20:16'

# 查看文件最后两行
tail -2 nohup.out
tail -n 2 nohup.out
tail -2f nohup.out
# 日志输出的字节数,可以用作性能测试
# 如果做性能测试,可以每执行一次,往日志里面输出`.`,这样日志中的字节数就是实际的性能测试运行的次数,还可以看见实时速率
tail -f nohup.out | pv -bt
# 清空 c 文件再写入
tail -10 b.txt > c.txt
# 追加写入到 c 文件
tail -10 b.txt >> c.txt

4. tee & awk
# tee 重定向的同时输出到屏幕
awk{print $0}’ nohup.out | tee test.log

awk '/error/ { print $1 }' access.log

5. more
# 查看文件一页内容(`空格`下一页、`回车`下一行、`q`退出)
more nohup.out		

# 查看文件一行内容(`空格`下一行、`B`上一行、`PgUp`上一页、`PgDn`下一页)
less yum.conf

# 查看后面的数据,q退出
more +行号 文件名
# 查看前面的数据,q退出
more -行号 文件名
# 查询 18 行之后的日志
more +18 nohup.out
# 查询 18 行之前的日志
more -18 nohup.out
# 查看文件前两行
head -2 nohup.out
# 根据关键字所在行号,显示后面的几行
cat nohup.out | tail -n +第几行开始 | head -n 显示几行
# 从 18 行开始,显示 30 行
cat nohup.out | tail -n +18 | head -n 30
cat nohup.out | grep '2023-09-01 18:24:07'  | tail -n +18 | head -n 3
# 查看时间范围内日志(2023-09-01 18:27-59 的日志)
grep  '2023-09-01 18:2[8-9]'   nohup.out

6. sed
# 截取几行到几行的数据,写入到文件
sed -n ‘10000,20000p’ nohup.out> test.log

# history 命令写入到 1.text
history >1.txt

# 把 1.txt 文件中写入到 2.txt,第 1 到 3 行不写入
# 结果:1 到 3 行没在了
# 相当于文件 1 中的几行不需要写入到文件 2,使用该命令
sed '1,3d' 1.txt >2.txt
# 删除第文件中 1 到 3 行
sed -i '1,3d' 1.txt
# 截取最后几行写入到另外一个文件
tail -100000 nohup.out > b.txt
# 截取时间内容到另外一个文件
grep '2023-03-17 14:57 >a.txt

8. less

3. 编辑文件

  • vi
# 打开文件
vi file		

a	# 命令模式
b	# 编辑模式			
c	# 底行模式
:1 	# 首行
:$ 	# 结尾
:set nu 	# 查看总行数
:set number	# 查看总行数
/search  	# n往后查看  N往前查看
dd	# 删除整行
d6	# 删除6行	
u 	# 撤销上次动作

# 切换到命令行模式
Esc   
# 退出      
Esc -> :q   
# 保存并退出
Esc -> :wq  
# 不保存退出
Esc -> :q!  

  • vim
# 打开文件
vim file    

i	# 在当前位置前插入
I  	# 在当前行首插入
a  	# 在当前位置后插入
A  	# 在当前行尾插入
o 	# 在当前行之后插入一行
O  	# 在当前行之前插入一行
: 	# 切换到底行模式
dd 	# 快速删除一行
R  	# 替换

# 切换到命令行模式
Esc      
# 退出   
Esc -> :q 
# 保存并退出  
Esc -> :wq  
# 不保存退出
Esc -> :q!  
#normal模式下 g表示全局, x表示查找的内容, y表示替换后的内容
:%s/x/y/g

#normal模式下
0  # 光标移到行首(数字0)
$  # 光标移至行尾
shift + g # 跳到文件最后
gg # 跳到文件头

# 显示行号
:set nu

# 去除行号
:set nonu

# 检索
/xxx(检索内容)  # 从头检索, 按n查找下一个
?xxx(检索内容)  # 从尾部检索

  • 打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)
# 在normal模式下
:w !sudo tee %

4. 文件类型

  • 普通文件:包括文本文件、数据文件、可执行的二进制程序文件等。
  • 目录文件:Linux 系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。
  • 设备文件:Linux 系统把每一个设备都看成是一个文件。
普通文件(-) 
目录(d)
符号链接(l)	# 进入`etc`可以查看,相当于快捷方式
字符设备文件(c) 
块设备文件(s) 
套接字(s) 
命名管道(p)

5. wc 命令

# 查看文件里有多少行
wc -l filename

# 看文件里有多少个word
wc -w filename

# 文件里最长的那一行是多少个字
wc -L filename

# 统计字节数
wc -c

6. 变更文件所属用户、用户组

# 查看文件的当前所属用户和组
ls -l example.txt
`
-rw-r--r-- 1 currentuser currentgroup 123456 Jan 1 00:00 example.txt # 其中currentuser是文件的当前所属用户,currentgroup是文件的当前所属组。
`


# 修改文件的所属用户
sudo chown newuser example.txt

# 同时修改文件的所属用户和组
sudo chown newuser:newgroup example.txt
sudo chown eagleye.eagleye xxx.log

# 递归地更改目录及其内容的所属用户和组
sudo chown -R newuser /path/to/directory/
sudo chown -R newuser:newgroup /path/to/directory/

7. 比较两个文件

diff -u 1.txt 2.txt

四、链接命令

## 链接(link)
ln <源文件> <目标文件>	

## 1. 创建 file1 硬链接 file2
## inode 属性一样,操作是同一个文件
ln file1 file2

## 2. 创建 file1 软链接 file3				
ln -s file1 file3		

1. 硬链接特征

  1. 拥有相同的 i 节点 和 存储 Block 块,可以看作是同一个文件。
  2. 可通过 i 节点识别。
  3. 不能跨分区。
  4. 不能针对目录使用。
  5. 容易误操作文件,不推荐使用。
  6. 推荐使用 软链接,类似 Windows 里的快捷方式。

2. 软链接特征

  1. 类似 Windows 快捷方式。
  2. 软链接 拥有自己的 i 节点和 Block 块,但是数据块中只保存源有文件的文件名 和 i 节点号,并没有实际的文件数据。
  3. lrwxrwxrwx. 软连接权限,l 开头代表软链接,软链接 文件权限都为 rwxrwxrwx。
  4. 修改任意文件,另一个都改变。
  5. 删除原文件,软链接不能使用。
# 建立软连接
ln -s /usr/local/jdk1.8/ jdk

3. 软硬链接区别

  • 假如把源文件删除,软链接 不能使用。
  • 但是 硬链接,删除源文件 不影响 硬链接 的使用。

五、搜索命令

1. locate 文件名搜索

# 配置文件`/etc/updatedb.conf`
`yum -y install mlocate`

# 后台数据库中按文件名搜索,搜索速度更快。
locate '文件名'	

# 更新`mlocate`数据库(`/var/lib/mlocate/mlocate.db`)			
updatedb					

1. locate 优缺点
  • 优点:是搜索速度快。
  • 缺点:是只能按文件名搜索。

2. 修改数据库配置文件
  • /etc/updatedb.conf
# 开启搜索限制
PRUNE_BIND_MOUNTS = "yes"	

# 搜索时,不搜索的文件系统
PRUNEFS = "..."				

# 搜索时,不搜索的文件类型
PRUNENAMES = "..."			

# 搜索时,不搜索的路径	
PRUNEPATHS = "..."				

2. whereis & which 命令搜索

# 搜索命令所在路径及帮助文档所在位置
whereis <命令名>	

# 只查找可执行文件位置
whereis -b cd	

# 只查找帮助文件
whereis -m cd 	

# 搜索命令所在路径及别名
# 在`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin`
which <命令名>

在这里插入图片描述


3. find 文件搜索

  • find ['搜索范围'] ['搜索条件']
# 在系统当中,搜索符合条件的文件名。
find /root -name 'file_name'			

# 搜索名称为`java`。
find -name 'java'
# `*`匹配任意内容。  
# `?`匹配任意一个字符。 
# `[]`匹配任意一个中括号的字符(可以不用,号分割)。
sudo find / -name '*tomcat*'
find /root -name 'file*'		  
find /root -name 'file?'
find /root -name 'file[1,2]'

# `-iname`不区分大小写。
find /root -iname 'file[4]'		

# 根据所有者搜索
find /root -nouser		
# 根据用户搜索		
find /home/qs -user qs			
# 查找文件大小是`1-2KB`的文件。
find /root -size 2k			
# 查找文件小于`2KB`的文件。	
find /root -size -2k		
# 查找文件大于`2KB`的文件。	
find /root -size +2k	

# 查找`i`节点是`19164938`的文件。		
find -inum 19164938		

# `-a`逻辑与and,两个条件都满足。
# `-o`逻辑或or,两个条件满足一个即可。

# 查找`/etc`目录下(20KB < 文件大小 < 50KB)的文件
find /etc -size +20k -a -size -50k

# 显示详细信息。
find /etc -size +20k -a -size -50k -exec ls -lh {} \;	
# 在目录下找后缀是.mysql的文件
find /home/eagleye -name '*.mysql' -print

# 会从 /usr 目录开始往下找,找最近3天之内存取过的文件。
find /usr -atime 3 –print

# 会从 /usr 目录开始往下找,找最近5天之内修改过的文件。
find /usr -ctime 5 –print

# 会从 /doc 目录开始往下找,找jacky 的、文件名开头是 j的文件。  
find /doc -user jacky -name 'j*' –print

# 会从 /doc 目录开始往下找,找寻文件名是 ja 开头或者 ma开头的文件。
find /doc \( -name 'ja*' -o- -name 'ma*' \) –print

#  会从 /doc 目录开始往下找,找到凡是文件名结尾为 bak的文件,把它删除掉。-exec 选项是执行的意思,rm 是删除命令,{ } 表示文件名,“\;”是规定的命令结尾。 
find /doc -name '*bak' -exec rm {} \;
# 在 mac 下使用 dos2unix 进行文件格式化
find . -name "*.sh" | xargs dos2unix

1. Linux 文件状态的三个时间
# `-atime`文件访问时间。
# `-ctime`改变文件属性。
# `-mtime`修改文件内容。	

# 查找`10`天前修改的文件。
find /var/log/ -mtime +10
# 查找`10`天内修改的文件。		
find /var/log/ -mtime -10		
# 查找`10`天当前修改的文件。
find /var/log/ -mtime 10		
  • 最近访问时间 access time (-atime)
  1. 它代表着最近一次访问文件的时间。
  2. 显示一个文件的内容 或者 运行一个Shell脚本 会更新文件的 atime。
  3. 可用 ls -lu 命令查看。
  • 最近更改时间 modify time(-mtime)
  1. 它代表着最近一次文件内容 被修改的时间。
  2. 可用 ls -l 命令查看。
  • 最近状态改动时间 change time(-ctime)
  1. 它代表着最近一次文件状态 改变的时间。是 status change time。
  2. 是在写入文件、更改所有者、权限 或 链接设置时,随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。
  3. 可用ls -lc 命令查看。

4. grep 字符串搜索

  • 在文件当中 匹配 符合条件的字符串:
    grep ['选项'] '字符串' '文件名'
  1. -i:忽略大小写
  2. -r:递归搜索子目录
  3. -n:显示匹配行的行号
  4. -A n:显示匹配行及其后 n 行的内容
# 查找`file1文件`中的'qwq字符串`(忽略大小写)
grep -i 'qwe' 'file1'

# 查找`file1文件`所有,排除'qwe字符串`
grep -v 'qwe' 'file1'

# 查出一个文件中该字符出现的次数
grep -o "匹配字符" 文件名|wc -l
# -o 表示只输出匹配到的内容,过滤掉这一行的其他内容
# wc -l 表示统计行数,配合 grep 既可以统计字符的出现个数

# 在文件中查找'lang字符串`
grep 'lang' 'anaconda-ks.cfg'           	

# 高亮显示
grep 'lang' 'anaconda-ks.cfg' –color    		

 # 查找5行,带行号
grep 'lang' 'anaconda-ks.cfg' –color -A5 -B5   
# 反向匹配,查找不包含 xxx 的内容
grep -v xxx

# 排除所有空行
grep -v '^/pre>

# 返回结果 2,则说明第二行是空行
grep -n “^$” 111.txt    

# 查询以abc开头的行
grep -n “^abc” 111.txt 

# 同时列出该词语出现在文章的第几行
grep 'xxx' -n xxx.log

# 计算一下该字串出现的次数
grep 'xxx' -c xxx.log

# 比对的时候,不计较大小写的不同
grep 'xxx' -i xxx.log

5. awk

# 以':'为分隔符,如果第五域有 user 则输出该行
awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd 

# 统计单个文件中某个字符(串)(中文无效)出现的次数
awk -v RS='character' 'END {print --NR}' xxx.txt

六、解压缩命令

  • 常用压缩格式:*.zip*.gz*.bz2
  • 常用打包压缩格式:*.tar.gz*.tar.bz2

1. zip、unzip 解压缩

yum install -y zip
yum install -y unzip

  • 压缩为 zip 格式(源文件会保留):
  1. zip '压缩文件名' '被压缩文件'
  2. -r:压缩目录
# 压缩文件
zip 'file_name.zip' 'file_name'
zip -o 'ROOT.war' 'index.html'

# 压缩目录	
zip -r 'dir_name.zip' './dir_name'	

  • 解压
    unzip '压缩文件名'
# 解压
unzip '压缩文件名'
# 解压,并指定目录
unzip '压缩文件名' -d /root/demo

2. gzip、gunzip 解压缩

  • 压缩为 gz 格式(源文件会消失):
  1. gzip '被压缩文件'
  • 压缩为.gz格式(源文件会保留):
  1. gzip -c '被压缩文件' > '压缩文件名'
# 源文件会消失
gzip 'file_name'
	
# 源文件会保留
gzip -c 'file_name' > 'file_name.gz'

# 压缩目录
gzip -r 'dir_name'			

# 解压
gzip -d '压缩文件'	
		
gunzip '压缩文件'

3. bzip2、bunzip2 解压缩

  • 注意:bzip2 命令不能压缩目录
yum -y install bzip2

# 压缩为`.bz2格式`(不保留源文件)
bzip2 '源文件'
	
# `-k`保留源文件		
bzip2 -k '源文件'			

# 解压缩(`-k`保留压缩文件)
bzip2 -d '压缩文件'

# 解压缩
bunzip2 '压缩文件' 

4. tar 打包命令

## 解打包
tar [选项] 源文件.tar 源文件

## [选项]
## -c:打包,创建一个文件
## -f:指定打包后的文件名
## -j:bzip2 压缩命令进行压缩(压缩为 *.tar.bz2 格式)
## -t:查看压缩文件的内容
## -v:显示运行过程的信息
## -x:解开 *.tar 文件
## -z:gzip 压缩命令进行压缩(压缩为 *.tar.gz 格式)
# 打包文件
tar -cvf 'file_name.tar' 'file_name'		

# 打包目录
tar -cvf 'dir_name.tar' './dir_name*'            	

# 解包目录。
tar –xvf 'dir_name.tar'  
# 压缩目录
tar czvf xxx.tar 压缩目录 
zip -r xxx.zip 压缩目录

# 解压缩命令
tar -zxvf xxx.tar
# 解压到指定文件夹
tar -zxvf demo.tar -C /root/demo/

unzip xxx.zip

  • 解压缩
# 压缩(压缩`tar.gz格式`)
gzip 'file_name.tar'			

# 解压
gzip -d 'file_name.tar.gz'			

  • 打包并压缩
# 先打包为`tar格式`,再压缩为`gz格式`
tar –zcvf 'dir_name.tar.gz' './dir_name*'

# 压缩多文件或目录
tar –zcvf 'dir.tar.gz' './dir1* ./dir2*'

# 压缩`dir`开头的目录
tar -zcvf 'dir.gz' './dir*'

  • 解压
# 查看压缩包(不解压)
tar -ztvf 'dir.gz'
				
# 解压。		
tar -zxvf 'dir.gz'
						
# 解压,到上一层目录
tar -zxvf 'dir.tar.gz' -C '../'    		

  • 压缩 *.tar.bz2 格式
# 先打包为`.tar格式`,再压缩为`.bz2格式`
tar -jcvf 'dir.tar.bz2' 'dir1' 'dir2'

# 解压		
bzip2 -d 'dir.tar.bz2'		

# 解打包			
tar -xvf 'dir.tar'	

# 解压,到上一层目录			
tar -jxvf 'dir.tar.bz2' -C '../'			

七、帮助命令

1. man 命令帮助

yum -y install man

# 手册(manual)
man '命令名'

# 查看`man命令`解释
man man

# 查看`ls命令`解释
man ls

# 查看`ps命令`解释
man ps / ls
`/-d`		# 搜索`-d`
``# 上翻
``# 下翻
`q`# 退出

1. man 的级别

在这里插入图片描述

LS(1)	# 查看命令的帮助
LS(2)	# 查看可被内核调用的函数的函数的版主
LS(3)	# 查看函数和函数库的帮助
LS(4)	# 查看特殊文件的帮助(主要是/dev目录下的文件)
LS(5)	# 查看配置文件的帮助
LS(6)	# 查看游戏的帮助
LS(7)	# 查看其他杂项的帮助
LS(8)	# 查看系统管理员可用命令的帮助
LS(9)	# 查看和内核相关文件的帮助

2. man 的常用
# 查看命令拥有哪个级别的帮助(相当于`whatis`命令)
man -f '命令名'	

# 例如
man -5 passwd
man -4 null
man -8 ip
man -f ls
man -f ip

# 查看和命令相关的所有帮助(相当于`appropos`命令)
man -k '命令名'
	
# 例如
apropos passwd
man -k passwd

2. info 详细命令帮助

info '命令名'

# `-回车` 进入子帮助页面(带有*号标记)
# `-u` 进入上层页面
# `-n` 进入下一个帮助小节
# `-p` 进入上一个帮助小节
# `-q` 退出

八、组合命令

>		# 重定向输出, 覆盖原有内容
>>		# 重定向输出, 追加功能
cat /etc/passwd > a.txt		# 将输出定向到a.txt中
cat /etc/passwd >> a.txt    # 输出并且追加
ifconfig > ifconfig.txt 

&&	# 前一个命令必须成功执行, 才会执行后面的命令
mkdir test && cd test

|	# 对前一个命令的输出结果进行操作

九、上传下载访问

1. 上传

# 1. 上传(本地 > 服务器)
scp -r '本地文件夹URL' root@192.168.0.101:/root/
scp -P 22 /root/file/data.jar root@192.168.0.101:/root/data/

# 2. 下载文件(服务器 -> 本地)
scp -P 22 root@192.168.0.101:/root/data/data.jar /root/file/
scp -r -P 8888 root@192.168.0.101:/root/log/info.log /root/log/
scp -r -P 22 /root/test mc@192.168.0.101:/home/qs/test
`
-P 指定远程主机的ssh端口
-p 保留文件修改和访问时间
-q 抑制进度表和错误信息
-C 传输时压缩数据
-r 递归复制文件
`
# `Alt+p` > 协议选择SFTP > 开始上传
put -r '本地文件夹URL'	

2. 下载

# 修改 baseurl 为阿里云的地址
vim /etc/yum.repos.d/CentOS-Base.repo
`
[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
`
# 安装 wget
yum -y install wget
# 下载 nginx
wget http://nginx.org/download/nginx-1.9.12.tar.gz
# 下载 mysql
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装 mysql
yum -y localinstall mysql57-community-release-el7-11.noarch.rpm
# 在线安装 = 下载 + 安装
yum -y install mysql-community-server
sz nginx.config

3. 访问

# 1. GET 请求
curl http://127.0.0.1/index.html
curl http://127.0.0.1/login.html
curl http://192.168.100.101:8080

# 2. POST 请求
curl -v -X POST "http://localhost:8080/actuator/bus-refresh" -H "Content-Type: application/json"

curl -v -X POST "http://127.0.0.1:8080/login" 
-d '{"username":"admin","myPassword":"123"}'
--header "Content-Type: application/json"

十、权限命令

1. 文件权限

## 文件类型(1) 
## 属主权限(234) 
## 属组权限(567) 
## 其他用户权限(8910) 
`-rw-r--r--.`

## 1. `-`: 文件类型(1)(-文件-黑色、d目录-蓝色、l软件链接文件-绿色)
## 2. `rw-`: 属主权限(234)u
## 3. `r--`: 属组权限(567)g
## 4. `r--`: 其他用户权限(8910)o

2. 权限含义

## 权限分为四种
## 1. `r`: 读取权(r=4)
## 2. `w`: 写入权(w=2)
## 3. `x`: 执行权(x=1)
## 4. `-`: 无操作权限(-=0)

# 例如
`rx`可读可执行(4 + 1 = 5)
`rw`可读可写(4 + 2 = 6)
`rwx`可读可写可执行(4 + 2 + 1 = 7)

3. 变更文件或目录 权限

  • chmod:是 Linux 下设置文件权限的命令,后面的数字表示 不同 用户 或 用户组 的权限。
chmod 755 '文件名'
## 一般是三个数字
# 1: 表示文件所有者的权限。
# 2: 表示与文件所有者同属一个用户组,的其他用户的权限。
# 3: 表示其它用户组的权限。

chmod 755 '文件名'
## 设置用户的权限为`755`
## 1. `7`文件所有者,可读可写可执行
## 2. `5`与文件所有者同属一个用户组的其他用户,可读可执行
## 3. `5`其它用户组,可读可执行

chmod 755 'a.txt' 

chmod 'u=rwx,g=rx,o=rx' 'a.txt'

chmod '000' 'a.txt' / chmod 777 'a.txt' chown

# 授权
chmod -R 777 'solr-cloud'		

# 授予`root权限`		
chown 'root:root' -R '/home/java/jdk/'	
sudo chmod -R 777 /	

4. 变更文件或目录 所属 用户和组

# 变更当前的目录或文件的所属用户和组
chown u1:public a.txt   

# 变更目录中的所有的子目录及文件的所属用户和组
chown -R u1:public dir  

十一、网络命令


1. 网络测试

# 探测网络是否通畅
ping 192.168.0.1     
       
# 获取ip地址[ens33: inet]
ip addr						

1. telnet
telnet <ip> <端口>

# 1. TCP 端口开了
root@mbp:~# echo "" | telnet 192.168.31.200 8080
Trying 192.168.31.200...
Connected to 192.168.31.200.
Escape character is '^]'.
Connection closed by foreign host.

# 2. TCP 端口关了
root@mbp:~# echo "" | telnet 192.168.31.200 8089
Trying 192.168.31.200...
telnet: Unable to connect to remote host: Connection refused

# 3、带源地址测试
telnet -b 'source_ip' 'destanation_ip' 'port'

2. nc
# 1. TCP 端口开了
root@mbp:~# nc -nzv 192.168.31.200 8080
Connection to 192.168.31.200 8080 port [tcp/*] succeeded!

# 2. TCP 端口关了
root@mbp:~# nc -nzv 192.168.31.200 8089
nc: connect to 192.168.31.200 port 8089 (tcp) failed: Connection refused

# 3. 带源地址测试
nc -s 'source_ip' -zv 'destanation_ip' 'port'

3. nmap
# 1. TCP 端口开了
root@mbp:~# nmap -Pn -sT 192.168.31.200 -p 8080
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-12 11:07 CST
Nmap scan report for 192.168.31.200
Host is up (0.0013s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds


# 2. TCP端口关了
root@mbp:~# nmap -Pn -sT 192.168.31.200 -p 8089
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-12 11:07 CST
Nmap scan report for 192.168.31.200
Host is up (0.0012s latency).

PORT     STATE  SERVICE
8089/tcp closed unknown

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds


# 3. TCP 端口开了啥
root@mbp:~# nmap -Pn -sT 192.168.31.200 -p 8000-9000
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-12 11:08 CST
Nmap scan report for 192.168.31.200
Host is up (0.80s latency).
Not shown: 990 closed tcp ports (conn-refused)
PORT     STATE SERVICE
8066/tcp open  toad-bi-appsrvr
8067/tcp open  infi-async
8080/tcp open  http-proxy
8081/tcp open  blackice-icecap
8086/tcp open  d-s-n
8087/tcp open  simplifymedia
8088/tcp open  radan-http
8099/tcp open  unknown
8888/tcp open  sun-answerbook
8899/tcp open  ospf-lite
9000/tcp open  cslistener

Nmap done: 1 IP address (1 host up) scanned in 1.21 seconds

# 4. 所有开放的 TCP 端口
root@mbp:~# nmap -Pn -sT 192.168.31.200

2. ifconfig—网络设备

# 显示网络设备
ifconfig      
    
# 启用 eth0 网卡        
ifconfig eth0 up 

# 停用 eth0 网卡           
ifconfig eth0 down          

3. netstat—网络端口

# 查看端口使用情况
ss-lntp						

# 查看当前所有使用的端口情况
netstat -nultp
# 显示所有正在侦听的TCP端口
netstat -ntlp

# 查询 3306 端口占用情况          
netstat -an | grep 3306    	
netstat -tln | grep 8080
# 查看 3308 端口是否被占用
netstat -anpt | grep 3308
# 查看某个端口被哪个进程占用
netstat -tlnp | grep 端口号

# 根据 端口号 查 PID
lsof -i:8080

# 根据 PID 查 程序
ps aux | grep 1969

  • 普通用户 操作命令 需加上 sudo。
  • root用户 操作不用加 sudo。
  • 主要看监控状态为 LISTEN列 表示已经被占用。
  • 最后一列显示被 mysqld服务 占用了 22133(mysqld 服务的 PID)。
    在这里插入图片描述

3. 端口是否被占用

# 1. Windows 平台
netstat -ano | findstr :8080
# 这个命令可以查看当前系统的所有网络连接情况
# 通过管道符号 和 findstr 命令过滤出本地占用 8080 端口的进程。
# 输出结果中的最后一列数字就是进程的 PID(进程标识符),我们可以通过该 PID 进一步查看进程信息或结束该进程
tasklist | findstr PID
taskkill /F /PID PID

# Linux/Mac 平台
sudo lsof -i :8080
# lsof 是一个强大的系统命令,可以列出打开某个文件的所有进程,
# -i 选项可以过滤掉所有网络相关的文件句柄,
# :8080则是过滤掉对应端口的连接
# 输出结果中第二行的数字就是进程的 PID,我们可以通过该 PID 进一步查看进程信息或结束该进程
ps -ef | grep PID
kill -9 PID

4. 启动网卡

  • 修改配置:
  1. 修改完,按 Esc 键退出。
  2. 再输入命令 :wq 保存退出。
  3. 再按 Enter 键即可。

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

---
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="fc2ba0fd-3b01-440a-8668-408867074a82"
DEVICE="ens33"
ONBOOT="yes" # 是否启动网卡 (默认no)
---

# 重启网络服务
sudo service network restart	

5. Linux 查看公网IP地址

# 通过 curl 命令来发现公有 ip 地址
curl http://ifconfig.io
curl ident.me
curl ipinfo.io/ip/
curl api.ipify.org

# 查看本机的 ip 地址
ip addr
ip a
ip address

# 如果 Linux 服务器上安装了 net-tools
ifconfig -a

# 通过 hostname 命令用于查找 DNS 名称
hostname -I | awk '{print $1}'

# 通过 ip route 命令也能获取 ip 地址
ip route get 1.2.3.4 | awk '{print $7}'

# nmcli 命令
nmcli -p device show

6. 设置固定 IP

ifconfig em1  192.168.5.177 netmask 255.255.255.0

7. 配置 DNS

vim /etc/resolv.conf

9. nslookup 查看域名路由表

nslookup google.com

十二、进程命令

# 查看进程所有打开最大 fd 数
ulimit -n

1. top

# Linux 资源管理器(q退出)
top

ifconfig

2. ps

  • grep(管道):作用是 将一个命令的输出 用作 另一个命令的输入。
# 查看进程占用CPU的情况
ps aux --sort=-%cpu


# 查看所有运行的进程
ps -ef
# 查看所有名称中包含 java 的进程
ps -ef | grep java
# 根据 jar名 查找进程号
ps -ef | grep qs-server | grep -v grep | awk '{print $2}'
# 查看服务启动参数(空代表没有)
ps -eaf | grep qs-server | grep -v grep

ps aux | grep tomcat
# 指定端口查询
ps aux | grep 4874

ps -A | grep nginx
# 查看进程内加载的环境变量
# 也可以去 cd /proc 目录下, 查看进程内存中加载的东西
ps eww -p <进程号>

# 查看进程树找到服务器进程
ps auwxf

# 强制关闭进程名包含xxx的所有进程
ps aux | grep <xxx> | grep -v grep | awk '{print $2}' | xargs kill -9
kill 2868 # 杀掉 2868 进程
kill -9 2868 # 强制杀掉 2868 进程

pkill nginx
nc -l -k 443 -c 'echo -e "HTTP/1.1 200 OK\n\n $(date) test port"'
nc -l -k 3306 -c 'echo -e "HTTP/1.1 200 OK\n\n $(date) test port"' &

3. jps

jps # 查看 java 进程 pid
jps -q # 只显示 pid
jps -m # 输出传递给 main 方法的参数,在嵌入式 jvm 上可能是 null
jps -l # 输出应用程序 main class 的完整 package 名,或者应用程序的 jar 文件完整路径名
jps -v # 输出传递给 JVM 的参数
jps -V # 隐藏输出传递给 JVM 的参数

4. lsof

  • lsof (list open files):是一个列出当前系统打开文件的工具。
## 出所有正在监听的端口和进程信息。
sudo lsof -i -P -n | grep LISTEN

## 查看80端口是否开放
lsof -i:80

## 开放53端口
sudo ufw allow 53
## 查看服务器 8000 端口的占用情况
lsof -i:8000
# 根据 端口号 查找进程号
lsof -i:48088 | grep LISTEN | grep -v grep | awk '{print $2}'

## 显示开启文件 abc.txt 的进程		
lsof abc.txt
## 显示 abc 进程现在打开的文件
lsof -c abc
## 列出进程号所打开的文件
lsof -p <进程号>

## 显示归属 gid 的进程情况
lsof -g gid 
## 显示目录下被进程开启的文件
lsof +d /usr/local/ 
## 同上,但是会搜索目录下的目录,时间较长
lsof +D /usr/local/ 

## 显示使用 fd 为 4 的进程
lsof -d 4 
# 显示所有打开的 端口 和 UNIX domain 文件
lsof -i -U 

5. ss

## 查看 某个端口 被哪个进程占用
ss -tlnp | grep <端口号>

6. ls

## 查看进程启动路径
cd /proc/<进程号>
ls -all
## cwd 对应的是启动路径

7. fuser

# 查看 某个文件或目录 被 哪个进程占用
sudo fuser <端口号>/tcp

8. netstat

## 网络状态(确认有哪些连接)
netsat -a

## 查看开放的端口
sudo netstat -tulpn

十三、系统命令

## 清屏 (Ctrl + L)
clear

## 退出登录	
exit		

## 历史命令
history		
history | grep 'java -jar'	

1. 系统信息

## 查看版本,当前操作系统发行版信息
cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 

## 查看操作系统位数
getconf LONG_BIT
64

2. hostname 查看当前主机名

  • 修改主机名
  1. vim /etc/hostname
  2. vi /etc/sysconfig/network
hostname
qs

## 查看 IP 
hostname -i
192.168.137.2

3. uname 查看系统版本信息

## 查看 当前操作 版本信息
cat /proc/version
Linux version 3.10.0-514.26.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Jul 4 15:04:05 UTC 2017
uname
`
Linux
`

## 查看当前系统 内核版本
uname -r
`
3.10.0-514.26.2.el7.x86_64
`

## 查看当前系统 内核信息
uname -a
`
Linux qs 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
`
## Linux: 内核名称(类别)
## qs: 主机名
## 3.10.0-514.26.2.el7.x86_64: 内核版本号
## UTC: 内核版本
## 2017: 内核编译日期
## x86_64: 硬件名
## x86_64: 处理器类型
## x86_64: 硬件平台类型
## GNU/Linux: 操作系统名称

uname -an
`
Linux qs 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
`

3. 关机重启

## 1. 查看系统使用状态(确保没人在线)
## 显示当前 所有的登录用户 
who

## 2. 网络状态(确认有哪些连接)
netsat -a

## 3. 后台进程执行状态
## 注:列 COMMAND 带`[.]`的是内核进程,不带`[.]`的是用户态进程 
ps -aux

## 4. 数据同步
## 虽然关机命令会执行同步动作,但仍强烈建议先多次执行 sync 主动同步
sync;sync;sync;

1. shutdown 关机重启
shutdown [Options] 时间

---

## [Options]
## 1. -c: 取消前一个关机命令
## 2. -h: 关机
## 3. -r: 重启

---

## 立即关机(root 用户使用)
shutdown -h now
## 过 30 分钟后自动关机
shutdown -h 30

---

## 立即重启(root 用户使用)
shutdown -r now
## 过 30 分钟自动重启(root 用户使用)
shutdown -r 30
## 在时间为`17:30`时候重启
shutdown -r 17:30
## 在时间为`00:30`时候重启(root 用户使用)
shutdown -r 00:30 	

2. halt 关机重启
  • 其他关机命令(不太安全,不建议使用)
## 最简单的关机命令,实际调用的是`shutdown -h`
## `halt`执行时将杀死应用进程,执行`sync`系统调用文件系统写操作完成后就会停止内核
halt [Options]

---

## [Options]
## 1. -n: 防止`sync`系统调用,在用`fsck`修补根分区之后,以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块
## 2. -w: 并不是真正的重启或关机,只是写`wtmp〔/var/log/wtmp〕`纪录
## 3. -d: 不写`wtmp`纪录〔已包含在选项[-n]中〕
## 4. -f: 没有调用`shutdown`而强制关机或重启
## 5. -i: 关机〔或重启〕前关掉所有的网络接口
## 6. -p: 该选项为缺省选项。就是关机时调用 poweroff

---

## 关机
init 0
## 重启
init 6

---

## 系统运行级别
0 关机
1 单用户
2 不完全多用户,不含 NFS 服务
3 完全多用户
4 未分配
5 图形界面
6 重启

3. poweroff 关机
## 关机
poweroff

4. reboot 安全重启
## 重启(安全)
## `reboot`命令和`shutdown`命令差不多
reboot
reboot -f

## 使用`man reboot`时,会同时出现`halt、poweroff、reboot`的用法
man reboot

5. 退出登录
## 修改系统默认运行级别
cat /ect/inittab
`
id:3:initdefalult
`

## 查询系统运行级别
runlevel

## 退出登录
logout

2. 系统时间

## 当前系统时间
date        
## 当前系统时间,带时区                    
date -R
## 当前系统时间-格式化
date +"%Y-%m-%d %H:%M:%S"   

在这里插入图片描述


1. 设置时间
## 设置系统时间
sudo date -s "2014-01-01 10:10:10"
## 1. -s: 设置系统时间
## 格式: HH:MM:SS(24小时制)
## 格式: hh:mm:ss(12小时制) hh时mm分ss秒
## 格式: MMDDhhmm[[CC]YY][.ss] MM月DD日CC世纪YY年份后两位
sudo date -s "0412122323" # 2023年04月12日


# 同步服务器时间
sudo ntpdate -u ntp.api.bz

2. 设置时区
## 查看时区
date -R

## 方法1. 设置时区
sudo timedatectl set-timezone Asia/Shanghai
## 方法2. 设置时区
tzselect
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

## 查看时区
date -R

在这里插入图片描述


3. 防火墙

1. 安装
yum install firewalld

2. 启动关闭
  1. CentOS
## 查看防火墙状态
systemctl status firewalld			

## 开启关闭防火墙服务
systemctl start firewalld.service
## 临时关闭	
systemctl stop firewalld.service 	
systemctl stop firewalld 
## 然后 reboot 永久关闭
systemctl disable firewalld
## 关闭防火墙
service iptables stop	
## 永久关闭防火墙
chkconfig iptables off	

## 开机自启动防火墙服务
systemctl enable firewalld.service	
## 关闭开机自启动防火墙服务
systemctl disable firewalld.service	
  1. Ubantu
## 安装防火墙
sudo sudo apt-get install ufw

## 查看防火墙版本
sudo ufw version
## 查看防火墙状态
sudo ufw status
`
Status: active # 活跃
Status: inactive # 不活跃
`

## 开启防火墙
sudo ufw enable

## 关闭防火墙 
sudo ufw disable

## 重启防火墙
sudo ufw reload
## 注意:添加规则以后,需要使用该命令进行重启防火墙
## 设置默认允许外部访问本机
sudo ufw default allow

## 设置默认拒绝外部访问主机
## 拒接所有外来访问,本机能正常访问外部
sudo ufw default deny

## 允许外部访问 53 端口
sudo ufw allow 53
## 注意:开放成功以后,需要重启生效
## 查看 53 端口信息
sudo netstat -tunlp | grep 53
## 拒绝外部访问 53 端口
sudo ufw deny 53

## 允许 某个IP 访问本机所有端口
sudo ufw allow from 192.168.0.1

3. firewall-cmd 命令
## 查看防火墙状态,`running`运行,`not running`关闭
firewall-cmd --state	
## 获取活动的区域			
firewall-cmd --get-active-zones

## 获取所有支持的服务(每个服务以空格分隔)		
firewall-cmd --get-service			
## 获取所有永久支持的服务,就是重启后也支持的
firewall-cmd --get-service --permanent	

## 在 0.3.0 之前的 FirewallD版本中,panic 选项是 –enable-panic 与 –disable-panic
## 查看应急模式的状态
firewall-cmd --query-panic	
## 开启应急模式阻断所有网络连接		
firewall-cmd --panic-on		
## 关闭应急模式		
firewall-cmd --panic-off			

## 防火墙预定义的服务配置文件是xml文件,目录在`/etc/firewalld/services/`、`/usr/lib/firewalld/services/`
## 修改配置文件后,使用命令重新加载
firewall-cmd --reload				

4. 修改服务
# 查看开启的服务,服务空格隔开(例如: dhcpv6-client https ss)
firewall-cmd --permanent --zone=public --list-services	
firewall-cmd --permanent --list-services

# 启用某个服务
firewall-cmd --zone=public --add-service=https				# 临时
firewall-cmd --permanent --zone=public --add-service=https	# 永久
firewall-cmd --permanent --zone=public --add-service=ftp	# 永久添加 ftp 服务 
firewall-cmd --reload										# 重启防火墙

5. 修改端口
# 查看开启的端口,端口空格隔开(例如: 8080-8081/tcp 8388/tcp 80/tcp)
firewall-cmd --permanent --zone=public --list-ports 
# 查看开启的端口号	
firewall-cmd --permanent --list-ports  
# 查询8080端口是否开放
firewall-cmd --query-port=8080/tcp

# 开启某个端口
firewall-cmd  --zone=public --add-port=8080-8081/tcp 			# 临时(8080-8081)
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp	# 永久
firewall-cmd --permanent --zone=public --add-port=21/tcp 		# 永久添加tcp 21 端口
firewall-cmd --permanent --add-port =8080-8085/tcp				# 添加8080-8085的端口区段,也可以是固定值,如3000

# 关闭上面设置的端口
firewall-cmd --permanent --remove-port=8080-8085/tcp	# 需要注意的是,如果是加的区段值,删的时候也必须为区段值
firewall-cmd --reload									# 使用命令加载设置

6. 修改规则
# 3. 添加规则: 设置某个ip,访问某个服务(ip:192.168.0.4/24,访问:http)
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"  source address="192.168.0.4/24" service name="http" accept"
# 删除上面设置的规则
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4"  source address="192.168.0.4/24" service name="http" accept"
  1. 在每次修改 服务、端口 和 规则 后 /etc/firewalld/zones/public.xml文件就会被修改。
  2. 所以也可以 修改文件,然后重新加载。
    在这里插入图片描述

7. 端口转发
# 1. 先开启允许伪装IP
# 检查是否允许伪装IP
firewall-cmd --query-masquerade 

# 允许防火墙伪装IP	
firewall-cmd --add-masquerade   	

# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade	

# 2. 设置转发
# 转发tcp 22 端口至 3753	
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753	

# 转发 22 端口数据至另一个 ip 的相同端口上
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100	

# 转发 22 端口数据至另一 ip 的 2055 端口上		
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100	

4. openssl

openssl version

十四、CPU内存磁盘

1. CPU

  • 物理总核数 = 物理 CPU 个数 * 每个物理 CPU 的核数。
  • 逻辑CPU数(显示的核数) = 物理 CPU 个数 * 每个物理 CPU 的核数 * 超线程数
# 查看系统内核信息
uname -a

# 查看系统内核版本
cat /proc/version
# 1. 查看`CPU`型号
dmidecode -s processor-version
#pc-i440fx-2.1
#Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz

## 查看当前 CPU 运行在 32bit 还是 64bit 模式下
## 如果是运行在 32bit 下也不代表 CPU 不支持 64bit
getconf LONG_BIT

cat /proc/cpuinfo
## 查看有几个逻辑 CPU,包括 CPU 型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
## 查看有几颗 CPU,每颗分别是几核
cat /proc/cpuinfo | grep physical | uniq -c
## 如果结果大于 0,说明支持 64bit 计算
## lm 指 long mode,支持 lm 则是 64bit
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l

1. /proc/cpuinfo
# 1. 查看`CPU`详细信息(型号、主频、内核信息等)
cat /proc/cpuinfo
#...

# 2. 查看`CPU`型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
#      2  Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
#      8  Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
      
cat /proc/cpuinfo | grep name | sort | uniq
#model name      : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz      
#model name      : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
  1. sort 命令:将以默认的方式将文本文件的第一列,以 ASCII 码的次序排列,并将结果输出到标准输出。
  2. uniq 命令:使用 uniq 命令删除重复的行,当重复的行并不相邻时,uniq 命令是不起作用的,这是和 sort 命令组合。
## 1. 查看物理`CPU`个数(`physical id`)
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
#2
## 两个物理`CPU`
cat /proc/cpuinfo | grep "physical id" | sort | uniq
#physical id     : 0
#physical id     : 1

---

## 2. 查看每个物理`CPU`的核数(`cpu cores`)
cat /proc/cpuinfo | grep "cores" | uniq
cat /proc/cpuinfo | grep "cpu cores" | uniq
#cpu cores       : 4

## 查看`CPU`是否启用超线程
## 如果`cpu cores`和`siblings`数量一致,则没有启用超线程,否则超线程被启用
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
#cpu cores       : 1
#siblings        : 2

---

## 3. 查看逻辑 CPU 个数(显示的核数)
cat /proc/cpuinfo | grep "processor" | wc -l
#2

more /proc/cpuinfo | grep "model name"
#model name      : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
#model name      : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz

grep "model name" /proc/cpuinfo
#model name      : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
#model name      : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz

grep "model name" /proc/cpuinfo | cut -f2 -d:
# Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
# Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz

2. 内存

# 显示内存状态(显示以`MB`为单位内存组昂头)
free –m   

1. /proc/meminfo
# 查看内存详细信息
cat /proc/meminfo

# 查看总内存数
cat /proc/meminfo | grep MemTotal                      

3. 磁盘

## 查看磁盘挂载情况
mount

## 查看硬盘的分区
fdisk -l

## 查看 IDE 硬盘信息		
hdparm -i /dev/hda  	
## 查看 STAT 硬盘信息		
hdparm -I /dev/sda
## 同上 				
apt-get install blktool			
blktool /dev/sda id	

1. /proc/partitions
# 查看硬盘和分区详细信息
cat /proc/partitions 

major minor  #blocks  name

 253        0   41943040 vda
 253        1   41940992 vda1

2. df
# 查看磁盘分区信息
df

# 查看每个根路径的分区大小(显示格式化)
df -h       

# 查看磁盘剩余空间                    
df -hl			
				
df --help

3. du
# 显示 目录 或 文件 的大小 
du           
# 显示 当前目录 的大小                   
du -h
df -h
# 查看指定目录下的所有文件大小(包含子文件夹)
du -h <目录名>
# 查看目录及子目录大小
du -H -h

# 返回该目录的大小
du -sh <目录名>      			
# 查看目录占用空间
du -hs <目录名>  				
# 返回该文件夹总M数
du -sm ['文件夹']      	
# 查看根目录下每个文件夹的大小		
du -sh *						
# 查看当前目录下各个文件,文件夹占了多少空间,不会递归
du -sh *
du --help
# 显示当前目录中每个目录的大小
du -h --max-depth=1
du -sh /var/log

4. 磁盘扩容

  • 磁盘新扩容的空间,可以被独立创建成一个分区,或者用于扩容已有分区的空间,以下两种场景需求:
  1. 对于新增的容量空间,建立独立的新分区,老的分区保持不变。
  2. 扩容旧的分区至新增的容量空间,并且保持老分区的数据不丢失。

1. 新空间格式化成一个独立分区
# 1. 查看数据盘信息
fdisk -l	# 查看数据盘的已分区和未分区的信息
## df -h	# 无法看到未分区和格式化的数据盘

# 2. 数据盘分区
fdisk /dev/sda	# 新建一个分区
# 依次输入以下命令
p				# 查看现有分区信息
n				# 新建分区
p				# 主分区
3				# 使用第3个主分区
两次回车			# 使用默认配置
w				# 保存分区表
# 开始分区
# 这里是以创建1个分区为例,也可以根据需求创建多个分区

# 3. 查看新分区
fdisk -l	# 看到新分区`/dev/sda2`已经创建完成

# 4. 格式化新分区
# 在进行分区格式化时,可以自行决定文件系统的格式,如ext2、ext3等。这里以'ext3'为例:
mkfs.ext3 /dev/sda3	# 对新分区进行格式化

# 5. 挂载新分区
mkdir /data				# 创建data目录
mount /dev/sda3 /data	# 手动挂载新分区
df -h	# 查看数据盘信息

# 6. 添加分区信息		
# 如果希望云服务器在重启或开机时能自动挂载数据盘,必须将分区信息添加到`/etc/fstab`中;
# 如果没有添加,则云服务器重启或开机后,都不能自动挂载数据盘。
echo '/dev/sda3 /data ext3 defaults 0 0' >> /etc/fstab	# 添加分区信息
cat /etc/fstab											# 查看分区信息

2. 新空间增加到已有非 / 分区空间中
# 1. 查看数据盘信息
## fdisk -l	# 查看数据盘的已分区和未分区的信息
df -h	# 无法看到未分区和格式化的数据盘

# 2. 卸载正在使用的磁盘
umount /data	# 卸载已挂载的需要扩容的磁盘

# 3. 数据盘分区
fdisk /dev/sda
# 依次输入以下命令
p				# 查看现有分区信息
d				# 删除需要扩容的分区
n				# 新建分区
p				# 新建主分区
3				# 使用第3个主分区(必须保持与需要扩容的分区一样)
两次回车			# 使用默认配置
w				# 保存分区表
# 开始分区

# 4. 检查扩容后的分区
fdisk -l /dev/sda3	# 新的分区sda3已经创建并扩容完成
e2fsck -f /dev/sda3	# 检查扩容的分区是否ok

# 5. 扩容分区
resize2fs /dev/sda3	# 扩容分区

# 6. 挂载扩容后的分区
mount /dev/sda3 /data	# 手动挂载扩容后的分区
df -h		# 查看数据盘信息
ll /data	# 查看到扩容后原分区的数据没有丢失

3. 新空间增加到 / 分区空间中
# 1. 查看数据盘信息
fdisk -l	# 查看数据盘的已分区和未分区的信息
df -h		# 无法看到未分区和格式化的数据盘

# 2. 分区完后把新分区改成'LVM'卷的文件系统
# fdisk -l 看到/dev/sda3的Id号为83,我们要将其改成8e
fdisk /dev/sda
t			# 改变一个分区的系统ID
3
L
8e
w			# 保存分区表

# 3. 查看新分区
fdisk -l	# 查看ID是否修改成功

# 4. 重新启动虚拟机,系统重启后,格式化新的分区为'ext4'格式  
mkfs.ext4 /dev/sda3

# 5. 格式化后,创建PV(物理卷) 
pvcreate /dev/sda3
pvdisplay	# 查看当前的物理卷

# 6. 扩展VG把物理卷添加到VG里面
pvs	# 查看新建的物理卷
vgextend cl /dev/sda3

# 7. 把VG中多余的空间添加到/dev/mapper/cl-root 中
lvextend -L +1.9G /dev/mapper/cl-root /dev/sda3

# 8. xfs_growfs /dev/mapper/cl-root

df -h

4. 查看新增空间
df -h
fdisk -l

fdisk /dev/sda
n
四次回车
w

fdisk -l

vgextend cl /dev/sda3

pvs

lvextend -L +1.9G /dev/mapper/cl-root

df -h

resize2fs /dev/mapper/cl-root
xfs_growfs /dev/mapper/cl-root

df -h

十五、用户 和 用户组

## 查看系统使用状态(确保没人在线)
## 显示当前 所有的登录用户 

id <用户名>

## 查看当前用户环境变量
env

1. 用户

## 查看所有用户
cat /etc/passwd

## 显示所有可用的命令,别名和函数
compgen -u

1. 创建用户
## 新增用户
useradd 用户名
passwd 用户名
## 添加用户`test`
useradd test
## 为用户`test`设置密码
passwd test

---

## 创建用户`test`,并指定用户目录     		
useradd test -d /home/test

---

## 新建用户`qs`
## 添加到用户组`root`
## 但是不允许用户登录,仅仅可以`ftp`登录
## `ftp`登录后的默认目录是`/home/data` 
useradd -g root -d /home/data -s /sbin/nologin qs 

1. 用户文件 /etc/passwd
## 用户文件 
cat /etc/passwd

---

# 每条记录用冒号分隔(包含7个字段)
'root:x:0:0:root:/root:/bin/bash'
## 账号名称(root): 在系统中是唯一的(字符长度 1~12 个字符)
## 用户密码(x): 此字段存放加密口令(保存在`/etc/shadow`文件中)
## 用户标识码(UserID): 系统内部用它来标示用户
## 组标识码(GroupID): 系统内部用它来标识用户组(保存在`/etc/group`文件中) 
## 用户相关信息(root): 例如用户全名等 
## 用户目录: 用户登录系统后所进入的目录(家目录)
## 用户环境: 用户工作的环境(用户使用的 shell 类型)

---

## 使用 awk 或 cut 命令,仅打印出 Linux 系统中所有用户的用户名列表
awk -F':' '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd

2. 用户密码文件 /etc/shadow
## 密码文件    
cat /etc/shadow

---

# 每条记录用冒号分隔,9个字段组成
'mysql:!:19112:0:99999:7:::'
## 用户名: 用户登录到系统时使用的名字,而且是惟一的 
## 口令: 存放加密的口令 
## 最后一次修改时间: 标识从某一时刻起到用户最后一次修改时间 
## 最大时间间隔: 口令保持有效的最大天数,即多少天后必须修改口令 
## 最小时间间隔: 再次修改口令之间的最小天数 
## 警告时间: 从系统开始警告到口令正式失效的天数 
## 不活动时间: 口令过期少天后,该账号被禁用 
## 失效时间: 指示口令失效的绝对天数(从1970年1月1日开始计算)
## 标志: 未使用 

3. sudo 权限文件 /etc/sudoers
# 增加 sudo 权限
vim /etc/sudoers

## 修改文件里面的
#root ALL=(ALL) ALL
#用户名 ALL=(ALL) ALL

2. 删除用户
# 删除用户`test`,不会删除用户目录
userdel test    

# 删除用户`test`,以及用户目录       		
userdel –r test                		

3. 切换用户
## 切换用户`test`              
su test  

## 切换用户`test`,并切换`用户环境`【推荐使用】				
su - test

# 退出
Ctrl+D

# 查看用户的`UID`和`GID`
id '用户名'							
## /usr/local/suninfo/oma/oma/third/openssh/bin/ssh.exe 

## 切换远程用户
ssh -l test -p 22 192.168.19.128
ssh -p 22 root@192.168.100.101

4. 修改密码
# 修改 root 密码
sudo passwd root

2. 用户组

  • 当在创建一个新用户 user 时,若没有指定他所属于的组。就建立一个和该用户同名的私有组。
  • 创建用户时,也可以指定所在组并创建。
# 当前登录用户所属所有组列表
groups

1. 创建用户组
## 创建用户组`public`
groupadd public      

## 创建用户并指定组    
useradd user1 –g public

1. 用户组文件
# 组信息文件   
cat /etc/group  

---

'root:x:0:'
## 组名: 用户所属组 
## 组口令: 一般不用GID(组ID) 
## 用户列表: 属于该组的所有用户

2. 用户组密码文件
cat /etc/gshadow

---

'mysql:!::'

2. 删除用户组
## 如果该组有用户成员,必须先删除用户才能删除组
groupdel public

3. last 最近登录信息列表

## 最近登录的 5 个账号
last -n 5

十六、查看别名

# 查看别名设置
alias						

1. 临时配置

# 在当前进程中设置别名, 仅当前 shell 有用 
alias ll='ls -al'	

2. 永久配置

ps aux|grep bash
pa|grep bash

# 编辑`.bashrc`,在`.bashrc`文件中设置别名,每个新开的 shell 有用
alias pa='ps aux'	
# 使得配置生效
source .bashrc	
# 使得配置生效(用一个点代替 source 命令)	
. .bashrc 	

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑士梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值