Linux 常用命令
文件目录管理
grep
grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行。 |
-A | 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 |
-B | 在显示符合范本样式的那一行之外,并显示该行之前的内容。 |
-C | 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 |
awk
1 | localhost% cat test.txt |
sed
定位到数据行并对数据进行增删改查操作
1 | # 替换文本中的字符串: |
find
find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
-type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec …… {}; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
1 | # 查找当前目录下是否存在README.md |
echo
1 | # 创建带有内容的文件 |
dd
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。
Linux系统中有一个名为/dev/zero的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。
参数 | 作用 |
---|---|
if | 输入的文件名称,如果不指定if,默认就会从stdin中读取输入。 |
of | 输出的文件名称,如果不指定of,默认就会将stdout作为默认输出。 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
1 | # 从/dev/zero设备文件中取出一个大小为100M的数据块 |
1 | 测试磁盘写入速度 |
1 | 测试磁盘读取速度 |
tar
tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式。
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
命令示例:
1 | # 仅打包,不压缩!将 /home/vivek/bin/ 目录打包 |
1 | 上下翻页:Ctrl+f、Ctrl+b |
scp
scp命令 用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。
1 | # 从远程拷贝目录到本地 |
vi
vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。
常用内置命令如下:
命令 | 作用 |
---|---|
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
D | 删除光标处所在行尾的全部字符 |
x | 删除光标处的一个字符 |
:set nu | 显示行号 |
/string、?string | 查找字符串,常结合n/N可以继续查找上一个、下一个字符串 |
:s/foo/bar/g | 将当前光标所在行的所有foo替换成bar |
:%s/foo/bar/g | 将全文中的所有foo替换成bar |
Fn+右键 | 光标跳到当前行最后一个字符 |
Fn+右键、0 | 光标跳到当前行第一个字符 |
Ctrl+f、Ctrl+b | 上下翻页 |
file
file命令用于查看文件的类型,格式为“file 文件名”。
在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。
1 | [root@master01 ~]# file admin-openrc.sh |
wc
wc
命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数]
文本”。
参数 | 作用 |
---|---|
-l |
只显示行数 |
-w |
只显示单词数 |
-c |
只显示字节数 |
网络管理
ip
ip命令 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。
网卡配置
1 | ip link # 显示网络接口信息 |
ip命令配置网卡信息,在网卡或机器重启后配置会丢失。要想配置永久生效,那就要修改网卡配置文件。如下:
1
2
3
4
5
6
7
8
9 # 文件名对应网口名,CentOS 7\8 默认配置文件
[Linux]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
BROADCAST="192.168.0.255"
HWADDR="00:16:36:1B:BB:74"
IPADDR="192.168.0.100"
NETMASK="255.255.255.0"
ONBOOT="yes"
路由配置
1 | ip r # 显示系统路由 |
netstat
有时进程之间需要通信,需要开启一个socket,socket就是对外建立连接的一个窗口,然后借助TCP协议进行通信。但进行通信之前首先需要进程开启一个端口,这时就可以通过netstat命令查看开启的端口以及由哪个进程开启
1 | #列出所有端口 |
ss
ss 可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
1 | ss -t -a # 显示TCP连接 |
系统管理
firewalld-cmd
firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结 构以及使用方法不一样罢了。
1 | [root@master01 ~]# firewall-cmd --zone=public --list-ports |
firewalld中常见的zone(默认为public)以及相应的策略规则如下所示:
区域 | 默认规则策略 |
---|---|
trusted | 允许所有的数据包 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
ps
ps命令 用于报告当前系统的进程状态。
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
1 | # 加上ww可以完整展示进程的信息 |
journalctl
检索 systemd 日志,是 CentOS 7 才有的工具
1 | # 查看服务启动日志 |
如果不知道服务名称,可以使用
systemctl list-units --type=service
命令来列出系统中的 systemd 服务。
watch
watch命令 以周期性的方式执行给定的指令,指令输出以全屏方式显示
1 | # 每隔60s查看主机内存的使用情况 |
rpm
rpm命令 是RPM软件包的管理工具
1 | # 列出所有安装过的包 |
crontab
crontab命令 被用来提交和管理用户的需要周期性执行的任务
用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron
目录中。其文件名与用户名一致。
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
1 | minute hour day month week command 顺序:分 时 日 月 周 |
1 | [root@master01 ~]# cat /var/spool/cron/root |
进阶操作
nohup
nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
1 | # 后台运行脚本,stderr和stdout重定向输出到output.log |
script
script 用于在终端会话中,记录用户的所有操作和命令的输出信息。
使用命令exit
或者快捷键Ctrl + D
停止记录。
1 | # 静默模式记录 |
chattr
chattr命令 用来改变文件属性。这些属性共有以下8种模式:
1 | a:让文件或目录仅供附加用途; |
用chattr命令防止系统中某个关键文件被修改:
1 | chattr +i /etc/fstab |
然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
1 | chattr +a /var/log/ansible.log |