切换工作目录 (cd)
# 切换到/home目录
cd /home
# 从哪来回哪去
cd -
# 切换到当前用户目录
cd ~
显示当前工作目录 (pwd)
pwd
显示进程状态 (ps)
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
- -A 列出所有的进程
- -w 显示加宽可以显示较多的资讯
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
au(x) 输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
含义如下:
USER: 进程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
示例:
# 查找指定进程状态
ps -ef | grep 进程关键字
显示内存使用情况 (free)
free -m
显示磁盘使用情况 (df)
df -h
移动文件或者将文件改名 (mv)
# 文件改名,将file.txt改名为file1.txt
mv file.txt file1.txt
# 文件移动,将test.txt移动到/home目录下
mv test.txt /home/
# 文件改名并移动,将test.txt移动到/home目录下并改名为test1.txt
mv test.txt /home/test1.txt
# 移动当前文件夹下的所有文件到上一级目录
mv * ../
复制 (cp)
使用该指令复制目录时,必须使用参数 -r 或者 -R。
# 将file.txt复制到/tmp/目录下,主要末尾要带"/"
cp file.txt /tmp/
# 改名复制,将file.txt复制到/tmp目录下并改名为file1.txt
cp file.txt /tmp/file1.txt
# 将a目录下所有文件复制到b中
cp –r a/ b/
压缩/解压文件 (gzip)
注意:该命令只能压缩一个文件。
gzip 文件 | 压缩 |
---|---|
gzip -dv 压缩文件 | 解压并打印执行过程 |
gzip -c 待压缩文件 > 带压缩文件.gz | 压缩文件并保留源文件 |
gzip * | 批量压缩 |
gzip -dv * | 批量解压 |
# 压缩并删除原有a.txt
gzip a.txt
打包/解压文件 (tar)
注意:打包不是压缩,打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
常见文件格式的压缩/解压命令:
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩, x表示从中提取,c表示创建,v表示显示操作过程,f表示指定压缩包)
.gz
解压1:gzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
修改文件或者目录的时间属性 (touch)
# 创建不存在的文件
touch a.txt
# 修改文件时间属性为当前系统时间
touch a.txt
# 设定文件的时间戳, 时间格式是YYYYMMDDhhmm[.SS]
touch -t 201211142234.50 a.txt
显示文件内容 (cat)
# 一次显示整个文件
cat filename
# 从键盘创建一个文件
cat > filename
# 将几个文件合并为一个文件
cat file1 file2 > file
# 反向展示文件内容
tac log.txt
查看文件尾部内容 (tail)
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
# 查看log最后100行内容且不断循环刷新的读取。-f循环读取,-n指定行数
tail -f -n 100 log2021.log
删除文件中重复的行 (uniq)
当重复的行并不相邻时,uniq 命令是不起作用的,这时候需要用到sort命令,先进行排序再删除重复的行。
# 删除file文件中的重复行
uniq file
# 删除重复的行并显示重复的次数
uniq -c file
# 先排序,再删除重复的行
sort file | uniq
# 删除fruit文件中的重复行并将结果保存到newfruit文件中
uniq file newfile
# 在文件中找出重复的行
sort file | uniq -d
# 统计各行在文件中出现的次数
sort file | uniq -c
逐页阅读 (more)
more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。
# 逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
more -s testfile
# 从第 20 行开始显示 testfile 之文档内容。
more +20 testfile
# 从文件中查找第一个出现"abc"字符串的行,并从该处前两行开始显示输出
more +/abc testfile
# 每页显示5行
more -5 testfile
# 从第20行开始显示,每页显示5条
more +20 -5 testfile
修改用户对文件的权限(chmod)
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令,
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
r表示read读,w表示write写,x表示excute执行。
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。这两种模式表示方法不同,效果等同的。
符号模式语法
语法格式是 :用户类型+操作符+权限,可以给指定的用户类型加减权限。
用户类型有四种:
- u 表示user,文件所有者
- g 表示group,文件所有者所在组
- o 表示other,其他用户
- a 表示all,所有用户
操作符有三种:
- 增加指定的权限
- 去除指定的权限
- = 重新设置指定的权限给用户
权限符号有六种,常用的三种就是r(read)、w(write)、x(excute),下面是所有的权限符号:
- r 读,设置为可读权限
- w 写,设置为可写权限
- x 执行,设置为可执行权限
- X 特殊执行权限,只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
- s setuid/gid,当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
- t 粘贴位,设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
示例:
# 设置file1.txt增加所有人可读取的权限
chmod ugo+r file1.txt
# 设置file1.txt增加所有人可读取的权限
chmod a+r file1.txt
# 设置文件所有者和组用户可读可写可执行,其他用户只能执行
chmod ug=rwx,o=x file
# 设置file1.txt文件所有者和所在组用户增加可写权限,其他用户不可写
chmod ug+w,o-w file1.txt
# 为文件所有者增加可执行权限。
chmod u+x ex1.py
8进制语法
也就是权限表示这里可以用0-7的数字表示,文件所有者,所在组用户,其他用户分别用一个数字表示。
表示方法:
执行表示数字1,写表示数字2,读表示数字4,这三个数字之间可以做加法。
无权限:0
执行:1
写:2
写+执行:1+2 = 3
读:4
读+执行:4+1=5
读+写:4+2=6
读+写+执行:4+2+1=7
比如:chmod 765 file,这三个数字分别表示文件所有者用户,所在的组用户,和其他用户的权限,
7表示文件所有者拥有完全读写执行权限,6表示组用户拥有读写权限,5表示其他用户拥有读和执行的权限。
示例:
# 设置file.txt权限为所有用户都拥有完全的读、写、执行权限,等同于chmod a+rwx file1.txt
chmod 777 file.txt
# 设置file.txt权限为所有者用户和组用户拥有所有权限,其他用户只能执行,等同于chmod ug=rwx,o=x file
chmod 771 file.txt
文本搜索 (grep)
grep全称是Global Regular Expression Print,表示全局正则表达式印刷,它的使用权限是所有用户。
# 查找指定的名称为java的进程(这条命令本身也会形成一个进程)
ps -ef | grep java
# 从文件中读取关键词进行搜索
cat config.php | grep -f object.txt
# 从文件中读取关键词进行搜索 且显示行号
cat config.php | grep -nf object.txt // 注意n和f的位置不能调换
# 从文件中查找关键词
grep 'api' config.php // 注意是区分大小写的
# 还可以从多个文件中查找
grep 'linux' test.txt test2.txt
# grep不显示本身进程 (加-v就是显示除匹配之外的)
ps aux | grep ssh | grep -v "grep"
防火墙 (firewalld)
systemctl使用
systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
systemctl mask firewalld # 下次需要锁定该服务时执行
systemctl start firewalld.service #启动防火墙
systemctl stop firewalld.service #停止防火墙
systemctl reloadt firewalld.service #重载配置
systemctl restart firewalld.service #重启服务
systemctl status firewalld.service #显示服务的状态
systemctl enable firewalld.service #在开机时启用服务
systemctl disable firewalld.service #在开机时禁用服务
systemctl is-enabled firewalld.service #查看服务是否开机启动
systemctl list-unit-files|grep enabled #查看已启动的服务列表
systemctl --failed #查看启动失败的服务列表
firewall-cmd使用
#状态相关
firewall-cmd --state #查看防火墙状态
firewall-cmd --reload #更新防火墙规则
firewall-cmd --state #查看防火墙状态
firewall-cmd --reload #重载防火墙规则
firewall-cmd --list-ports #查看所有打开的端口
firewall-cmd --list-services #查看所有允许的服务
firewall-cmd --get-services #获取所有支持的服务
#区域相关
firewall-cmd --list-all-zones #查看所有区域信息
firewall-cmd --get-active-zones #查看活动区域信息
firewall-cmd --set-default-zone=public #设置public为默认区域
firewall-cmd --get-default-zone #查看默认区域信息
firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
#接口相关
firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口
firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default
firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
firewall-cmd用例
firewall-cmd --query-port=8080/tcp # 查询端口是否开放
firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)
firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)
firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)
firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
查找进程和端口号相关
查看关键词对应的进程,获取进程号(pid)
# 查找java相关的进程
ps -ef|grep java
根据进程pid查找对应的端口
lsof -i | grep pid
# 或
netstat -anp | grep pid
根据端口查是否有相关进程(查看端口是否被占用),如有则获取pid
lsof -i:port
# 或
netstat -anp | grep port
结束/杀死进程
有两种可以帮我们杀死错误的进程的信息。
- 进程的名字
- 进程的 ID (PID)
kill - 通过进程 ID 来结束进程
killall - 通过进程名字来结束进程
另外需要给kill指令发送信号来告诉他如何结束这个进程,比如是挂起还是直接杀死
kill -l 查看所有结束进程的信号
常用结束进程的信号如下:
Signal Name | Single Value | Effect |
---|---|---|
SIGHUP | 1 | 挂起 |
SIGINT | 2 | 键盘的中断信号 |
SIGKILL | 9 | 发出杀死信号 |
SIGTERM | 15 | 发出终止信号 |
SIGSTOP | 17, 19, 23 | 停止进程 |
可以用信号的Value代替Name,这样不用记住所有的信号名称。
kill -9 PID 是操作系统从内核级别强制杀死一个进程。
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭。
kill的默认信号是15。
优雅关闭进程一般是发出终止信号,让应用程序进行关闭前的清理工作。
kill -15 pid
等待一会,再次查询进程信息,如果还没停止,可以强制杀死进程。
kill -9 pid
重启 (reboot)
reboot