切换工作目录 (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.txtmv file.txt file1.txt# 文件移动,将test.txt移动到/home目录下mv test.txt /home/# 文件改名并移动,将test.txt移动到/home目录下并改名为test1.txtmv test.txt /home/test1.txt# 移动当前文件夹下的所有文件到上一级目录mv * ../
复制 (cp)
使用该指令复制目录时,必须使用参数 -r 或者 -R。
# 将file.txt复制到/tmp/目录下,主要末尾要带"/"cp file.txt /tmp/# 改名复制,将file.txt复制到/tmp目录下并改名为file1.txtcp file.txt /tmp/file1.txt# 将a目录下所有文件复制到b中cp –r a/ b/
压缩/解压文件 (gzip)
注意:该命令只能压缩一个文件。
| gzip 文件 | 压缩 |
|---|---|
| gzip -dv 压缩文件 | 解压并打印执行过程 |
| gzip -c 待压缩文件 > 带压缩文件.gz | 压缩文件并保留源文件 |
| gzip * | 批量压缩 |
| gzip -dv * | 批量解压 |
# 压缩并删除原有a.txtgzip 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.txtchmod 777 file.txt# 设置file.txt权限为所有者用户和组用户拥有所有权限,其他用户只能执行,等同于chmod ug=rwx,o=x filechmod 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所属区域为defaultfirewall-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
