Linux常用命令
一、目录/文件基本操作
1.1 切换目录命令 cd
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录;
cd ../.. 返回上两级目录;
cd / 切换到系统根目录
1.2 显示用户当前工作目录的绝对路径 pwd
1.3 显示目录内容列表 ls
ls(list)是一个非常有用的命令,用来显示当前目录下的内容。配合参数的使用,能以不同的方式显示目录内容。
* ls
* ls -a 显示所有文件或目录(包含隐藏的文件)
* ls -l 缩写成ll
* ls -lh 友好显示文件大小,缩写形式 ll -h注意:在linux中,以 . 开头的文件都是隐藏的文件
1.4 目录的创建与移除 mkdir / rmdir
mkdir(make directory)命令可用来创建子目录。
* mkdir wfx 在当前目录下创建wfx目录
* mkdir –p wfx/demo 级联创建wfx以及demo
- -p 若所要建立目录的上层目录目前尚未建立,则会一并建立。
rmdir(remove directory)命令可用来删除“空”的子目录。
* rmdir wfx 删除wfx目录
1.5 重新命名、移动文件 mv
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。
* mv a.txt b.txt 将a.txt文件重命名为b.txt* mv a.txt ../ 将a.txt文件移动到上一层目录中
* mv a/* . 将目录当前a目录中的所有文件移到当前目录(用.表示)中语法:mv [源文件或目录][目标文件或目录]
-f或--force 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。
1.6 将源文件或目录复制到目标文件或目录中 cp
cp(copy)命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。选项:
- -f:强行复制文件或目录,不论目标文件或目录是否已存在;
- -i:覆盖既有文件之前先询问用户;
- -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
- -b:覆盖已存在的文件目标前将目标文件备份;
- -v:详细显示命令执行的操作。
* cp a.txt b.txt 将a.txt复制为b.txt文件
* cp a.txt ../ 将a.txt文件复制到上一层目录中
1.7 创建新的空文件 touch
touch命令有两个功能:
① 是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;
② 是用来创建新的空文件。
[root@iZbp1e6dcmuajgzZ home]# cd wfx [root@iZbp1e6dcmuajgzZ wfx]# ll total 4 drwxr-xr-x 2 root root 4096 Sep 3 21:48 demo [root@iZbp1e6dcmuajgzZ wfx]# touch test [root@iZbp1e6dcmuajgzZ wfx]# ll total 4 drwxr-xr-x 2 root root 4096 Sep 3 21:48 demo -rw-r--r-- 1 root root 0 Sep 3 22:41 test [root@iZbp1e6dcmuajgzZ wfx]# ls -ll test -rw-r--r-- 1 root root 0 Sep 3 22:41 test [root@iZbp1e6dcmuajgzZ wfx]# ls -ll test -rw-r--r-- 1 root root 0 Sep 3 22:41 test [root@iZbp1e6dcmuajgzZ wfx]# touch test [root@iZbp1e6dcmuajgzZ wfx]# ls -ll test -rw-r--r-- 1 root root 0 Sep 3 22:43 test
1.8 为文件创建连接 In
ln命令用来为文件创建连接,连接类型分为硬连接和软连接两种,默认的连接类型是硬连接。
如果要创建软连接必须使用"-s"选项(以路径的形式存在。类似于Windows操作系统中的快捷方式)。
1.9 文件内容查看
1.9.1 分屏上下翻页浏览文件内容 less
less命令允许用户向前或向后浏览文件。(比more要常用一点)
语法:less [参数] 文件
-m 显示类似more命令的百分比
-N 显示每行的行号
操作:
空格键:前进一页 或 page down
b:后退一页 或 page up
d:前进半页
u:后退半页
回车键:前进一行 或 方向键向下
y:后退一行 或 方向键向上
/字符串:向下搜索
?字符串:向上搜索
v:进入vim编辑器
左右方向键:相当于水平滚动条
q:退出
1.9.2 显示文件内容,每次显示一屏 more
more命令全屏幕的方式按页显示文本文件的内容,还支持直接跳转行等功能。
语法:more file(文件名称)
操作:
Enter:向下n行,需要定义。默认为1行。
空格键: 向下滚动一屏 或 Ctrl+F
B: 返回上一屏 或 Ctrl+B
q:退出more
1.9.3 连接文件并打印到标准输出设备上 cat
// cat命令用来显示文件的内容。 [root@iZbp1e6dcmuajgzZ ~]# cd TEST [root@iZbp1e6dcmuajgzZ TEST]# ll total 4 -rw-r--r-- 1 root root 10 Dec 5 2019 test1.txt [root@iZbp1e6dcmuajgzZ TEST]# cat test1.txt hello boy [root@iZbp1e6dcmuajgzZ TEST]# cat test1.txt > test2.txt [root@iZbp1e6dcmuajgzZ TEST]# ll total 8 -rw-r--r-- 1 root root 10 Dec 5 2019 test1.txt -rw-r--r-- 1 root root 10 Sep 3 23:18 test2.txt [root@iZbp1e6dcmuajgzZ TEST]# cat test2.txt hello boy [root@iZbp1e6dcmuajgzZ TEST]#
1.9.4 连接文件并打印到标准输出设备上 cut
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。
cut只擅长处理“以一个字符间隔”的文本内容
选项:
-b :以字节为单位进行分割。
-d :自定义分隔符,默认为制表符。
[root@iZbp1e6dcmuajgzZ TEST]# who root pts/0 2020-09-03 21:43 (***.***.**.***) root pts/1 2020-09-03 22:41 (***.***.**.***) [root@iZbp1e6dcmuajgzZ TEST]# who|cut -b 3 o o [root@iZbp1e6dcmuajgzZ TEST]# who|cut -b -3 roo roo [root@iZbp1e6dcmuajgzZ TEST]# who|cut -b -3 roo roo [root@iZbp1e6dcmuajgzZ TEST]# who|cut -b 3- ot pts/0 2020-09-03 21:43 (***.***.**.***) ot pts/1 2020-09-03 22:41 (***.***.**.***) [root@iZbp1e6dcmuajgzZ TEST]# who|cut -b -3,3- root pts/0 2020-09-03 21:43 (***.***.**.***) root pts/1 2020-09-03 22:41 (***.***.**.***) [root@iZbp1e6dcmuajgzZ TEST]#
1.9.5 在屏幕上显示指定文件的末尾若干行 tail
tail命令是在实际使用过程中使用非常多的一个命令。
它的功能是:用于显示指定文件尾部(后面的行)的内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
语法:tail [必要参数][选择参数][文件]-n <行数> 显示行数-f 循环读取,不断刷新-F 等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪用法:tail -尾行数 文件名* tail -20 /etc/passwd 查看后20行数据
* tail -f catalina.log 动态查看日志(*****)
- tail命令默认在屏幕上显示指定文件的末尾10行。
- ctrl+c 结束查看
ping 127.0.0.1 > ip.log &
tail -f ip.log
& 表示后台运行,否则占用终端
1.9.6 在屏幕上显示指定文件的开头若干行 head
head命令用于显示文件的开头的内容。用法:同tail
- 在默认情况下,head命令显示文件的头10行内容。
1.10 比较给定的两个文件的不同 diff
diff命令在最简单的情况下,比较给定的两个文件的不同。
diff命令是以逐行的方式,比较文本文件的异同处。
* 如果该命令指定进行目录比较,则将会比较该目录中具有相同文件名的文件,而不对其子目录文件进行任何比较操作。
[root@iZbp1e6dcmuajgzZ TEST]# ll total 8 -rw-r--r-- 1 root root 10 Sep 3 23:21 test1.txt -rw-r--r-- 1 root root 10 Sep 3 23:18 test2.txt [root@iZbp1e6dcmuajgzZ TEST]# diff test1.txt test2.txt 1,2c1,5 < hello < boy --- > a > s > b > r > c [root@iZbp1e6dcmuajgzZ TEST]#
1.11 在指定目录下查找文件 find
[root@iZbp1e6dcmuajgzZ ~]# find TEST/ -name "test1.txt" // 用文件名查找文件 TEST/test1.txt [root@iZbp1e6dcmuajgzZ ~]# find TEST/ -name "Test1.txt" [root@iZbp1e6dcmuajgzZ ~]# find TEST/ -iname "Test1.txt" // 用文件名查找文件,忽略大小写 TEST/test1.txt [root@iZbp1e6dcmuajgzZ ~]# find TEST/ -iname "*.txt" // 将TEST/目录及其子目录下所有文件后缀为 .txt 的文件列出来,忽略大小写 TEST/test1.txt //查找n那天修改的文件 find . -mtime n -print //查找n天前修改的文件 find . -mtime +n -print //查找n天至今修改的文件 find . -mtime -n -print //查找n天新增文件 find . -ctime -n //查找大于10M的文件 find . -size +10M //将当前目录及其子目录中的所有文件列出 find . -type f
1.12 分割任意大小的文件 split
split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。选项
-b:值为每一输出档案的大小,单位为 byte。
-d:使用数字作为后缀。
-a length来指定后缀的长度实例:文件被分割成多个带有字母的后缀文件,如果想用数字后缀可使用-d参数,同时可以使用-a length来指定后缀的长度:
-bash-4.1$ split -b 10k date.file -d -a 3
-bash-4.1$ ls
date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009
1.13 文件编辑
1.13.1 功能强大的流式文本编辑器 sed
-i 表示inplace edit,就地修改文件,不备份
-in-place 备份后,就地修改文件
1.13.2 功能强大的纯文本编辑器 vi/vim
vi/vim是Linux中最基本的文本编辑器。既可以查看文件也可以编辑文件。
三种模式:命令行、插入、底行模式。
* 切换到命令行模式:按Esc键;
* 切换到插入模式:按 i 、o、a键;
i 在当前位置前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
* 切换到底行模式:按 :(冒号);
:q 退出
:wq 保存并退出:
:q! 不保存退出快捷键:
dd 快速删除一行
R 替换
yy 拷贝当前行
p 粘贴
1.14 统计文件的行数、字数、字节数 wc
wc命令可以计算文件的行数、字数或是Byte数。
选项
-l:只显示行数;
-w:只显示字数;
-c: 只显示字节数。
[root@iZbp1e6df2m25lgcmuajgzZ demo]# wc spotError_zh_CN.properties
105 90 8466 spotError_zh_CN.properties #第一个文件行数为105、单词数90、字节数8466
1.15 报告或忽略文件中的重复行 uniq
uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。
1.16 将文件进行排序并输出 sort
sort命令将文件进行排序,并将排序结果标准输出。
1.17 强大的文本搜索工具 grep
查找符合条件的字符串。
用法: grep [选项]... PATTERN [FILE]...选项
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-C<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-i 忽略字符大小写。
-o 只输出文件中匹配到的部分。举例
* grep lang anaconda-ks.cfg 在文件中查找lang
* grep lang anaconda-ks.cfg –color 高亮显示
1.18 删除操作 rm
rm 删除文件
用法:rm [选项]... 文件...
* rm a.txt 删除a.txt文件
选项
-f 不询问,直接删除
-r 递归删除
不询问递归删除(慎用)
rm -rf a 不询问递归删除a
rm -rf * 删除所有文件
rm -rf /* 自杀
1.19 打包和解压 tar
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。
利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。常用参数:
-c或--create:创建一个新tar文件(备份文件)
-v:显示运行过程的信息
-f<备份文件>或--file=<备份文件>:指定文件名
-z或--gzip或--gunzip:调用gzip压缩命令进行压缩
-t:查看压缩文件的内容
-x或--extract或--get:解开tar文件(从备份文件中还原文件)打包:
* tar –cvf xxx.tar ./*
打包并且压缩:
* tar –zcvf xxx.tar.gz ./*
解包
* tar –xvf xxx.tar
解包并且解压
* tar -zxvf xxx.tar.gz -C /home/wfx (解压到指定路径下)
- 如果加z选项,则以.tar.gz来代表gzip压缩过的tar包。
1.20 文件压缩 gzip
gzip命令用来压缩文件。文件经它压缩过后,其名称后面会多处“.gz”扩展名。
gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处:
① 是可以减少存储空间;
② 是通过网络传输文件时,可以减少传输的时间。
1.21 文件解压缩 gunzip
gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。
1.22 下载文件 wget
案例:下载资料
- wget http://nginx.org/download/nginx-1.9.12.tar.gz
1.23 软件包的管理 rpm
RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包。语法:rpm[参数][软件]选项:-v 显示指令执行过程-h 或者 --hash 套件安装时列出标记
-a 所有的包
-q 查询,使用询问模式,当遇到任何问题时,rpm指令会先询问用户-i<套件档>或--install<套件档> 安装指定的套件档-U<套件档>或--upgrade<套件档> 升级指定的套件档-e<套件档>或--erase<套件档> 删除指定的套件档--nodeps 不验证套件档的相互关联性常用:【安装】rpm -ivh rpm 文件【升级】rpm -Uvh rpm 文件【删除】rpm -e --nodeps 软件名【查看】rpm -qa案例* rpm –qa | grep java 查找rpm下的java包
* rpm -e --nodeps java-1.8.0_231 ... 卸载java1.8
二、网络通讯命令
ifconfig 显示或设置网络设备。
* ifconfig 显示网络设备
* ifconfig eth0 up 启用eth0网卡
* ifconfig eth0 down 停用eth0网卡
ping 探测网络是否通畅。
* ping 127.0.0.1
netstat 查看网络端口。
* netstat -an | grep 3306 查询3306端口占用情况
三、系统相关命令
3.1 性能查询
3.1.1 查看Liunx系统负载信息 uptime
uptime命令能够打印系统总共运行了多长时间和系统的平均负载。
uptime命令可以显示的信息显示依次为:
* 现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载选项
-V:显示指令的版本信息。
[root@iZbp1e6dcmuajgzZ ~]# uptime -V // 查看版本 uptime from procps-ng 3.3.10 // 3.3.10版本 [root@iZbp1e6dcmuajgzZ ~]# uptime // 系统负载信息 13:58:29 up 67 days, 15:08, 1 user, load average: 0.00, 0.01, 0.05 // 显示内容说明: // 13:58:29 系统当前时 // up 67 days 主机已运行时间,时间越大,说明你的机器越稳定。 // 1 user 用户连接数,是总连接数而不是用户数 // load average: 0.00, 0.01, 0.05 系统平均负载(在特定时间间隔内运行队列中的平均进程数。),统计最近1,5,15分钟的系统平均负载
3.1.2 显示内存使用情况 free
free命令可以显示当前系统未使用的和已使用的内存资源,还可以显示被内核使用的内存缓冲区。
选项
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
[root@iZbp1e6dcmuajgzZ ~]# free -m total used free shared buff/cache available Mem: 1838 734 75 0 1028 928 Swap: 0 0 0 /** * Mem行:内存的使用情况。 * Swap行:交换空间的使用情况。 * total:内存总数; * used:已经使用的内存数; * free:空闲的内存数; * shared:当前已经废弃不用; * buff/cache:缓存内存数; * available:还可以被应用程序使用的物理内存大小。 */
3.1.3 查看系统资源消耗情况 top
top命令可以实时动态地查看系统的整体运行情况。选项
-c:显示完整的治命令;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
top交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
q:退出程序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
top - 14:35:24 up 67 days, 15:45, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 83 total, 2 running, 81 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1882160 total, 77344 free, 751924 used, 1052892 buff/cache KiB Swap: 0 total, 0 free, 0 used. 950256 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 829 root 20 0 484308 7548 3164 S 0.3 0.4 4:10.62 rsyslogd 23137 root 20 0 161908 2248 1580 R 0.3 0.1 0:00.05 top 1 root 20 0 51856 3656 2280 S 0.0 0.2 10:18.04 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.09 kthreadd /** top - 14:35:24[当前系统时间], up 67 days[系统已经运行了16天], 1 user[个用户当前登录], load average: 0.00, 0.01, 0.05[系统负载,即任务队列的平均长度] Tasks: 83 total[总进程数], 2 running[正在运行的进程数], 81 sleeping[睡眠的进程数], 0 stopped[停止的进程数], 0 zombie[冻结进程数], %Cpu(s): 0.3 us[用户空间占用CPU百分比], 0.0 sy[内核空间占用CPU百分比], 0.0 ni[用户进程空间内改变过优先级的进程占用CPU百分比], 99.7 id[空闲CPU百分比], 0.0 wa[等待输入输出的CPU时间百分比], 0.0 hi[], 0.0 si[], 0.0 st[], KiB Mem: 1882160 total[物理内存总量], 77344 free[空闲内存总量], 751924 used[使用的物理内存总量], 1052892 buff/cache[用作内核缓存的内存量] KiB Swap: 0 total[交换区总量], 0 free[空闲交换区总量], 0 used[使用的交换区总量], 950256 avail Mem[缓冲的交换区总量] */
3.1.4 显示磁盘的相关信息 df
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
选项
-h:计算时是以1000 Bytes为换算单位而非1024 Bytes;
-a或--all:包含全部的文件系统。
[root@iZbp1e6dcmuajgzZ ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 7.5G 30G 20% / devtmpfs 909M 0 909M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 608K 919M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup overlay 40G 7.5G 30G 20% /var/lib/docker/overlay2/7f4229668b39f9861d71014/merged overlay 40G 7.5G 30G 20% /var/lib/docker/overlay2/10142cfd5d4f77ee60ba716/merged tmpfs 184M 0 184M 0% /run/user/0
3.1.5 显示每个文件和目录的磁盘使用空间 du
[root@iZbp1e6dcmuajgzZ ~]# cd TEST [root@iZbp1e6dcmuajgzZ TEST]# ll total 8 -rw-r--r-- 1 root root 10 Sep 3 23:21 test1.txt -rw-r--r-- 1 root root 8 Sep 4 01:30 test2.txt [root@iZbp1e6dcmuajgzZ TEST]# du -a // 查看文件列表大小 4 ./test1.txt 4 ./test2.txt 12 . [root@iZbp1e6dcmuajgzZ TEST]# du -ah // 查看文件列表大小 4.0K ./test1.txt 4.0K ./test2.txt 12K . [root@iZbp1e6dcmuajgzZ TEST]# du -sh // 查看所有文件的大小总和 12K .
3.1.6 查询线程 ps
ps命令用于报告当前系统(正在运行)的进程状态。
可以搭配kill指令随时中断、删除不必要的程序。
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。选项
-a:显示现行终端机下的所有程序,包括其他用户的程序。
-e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
-u:以用户为主的格式来显示程序状况。实例
查看所有进程:
* ps –ef
查找某一进程:
* ps –ef | grep ssh
java进程数:
* ps -ef |grep java|grep -v grep|wc -l
java线程数:
* ps -ef H|grep java|grep -v grep|wc -l
3.1.7 杀死进程 kill
kill 8080 杀掉8080编号的进程
kill -9 8080 强制杀死8080进程
3.2 常用信息命令
3.2.1 统计给定命令所花费的总时间 time
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。
- real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
- user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
- sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
[root@iZbp1e6dcmuajgzZ ~]$ time ls Desktop Documents Downloads files Music Pictures Public temp Templates Videos real 0m0.002s user 0m0.000s sys 0m0.001s
3.2.2 查找并显示给定命令的绝对路径 which
which命令用于查找并显示给定命令的绝对路径,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
[root@iZbp1e6dcmuajgzZ diff]$ which top /usr/bin/top
3.2.3 显示目前登入系统的用户信息 who
3.2.4 查看当前主机名 hostname
3.2.5 显示系统信息 uname
uname -a 显示本机详细信息
[root@iZbp1e6dcmuajgzZ ~]# uname -a Linux iZbp1e6dcmuajgzZ 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux //依次为:内核名称(类别),主机名,内核版本号,内核版本,内核编译日期,硬件名,处理器类型,硬件平台类型,操作系统名称
3.2.6 显示或设置系统时间与日期 date
date命令是显示或设置系统时间与日期。
很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。
延时通常用于脚本执行过程中提供一段等待的时间。
日期可以以多种格式去打印,也可以使用命令设置固定的格式。* date 显示当前系统时间
* date -s "2020-09-04 17:01:00" 设置系统时间日期格式字符串列表
%H 小时,24小时制(00~23)
%I 小时,12小时制(01~12)
%k 小时,24小时制(0~23)
%l 小时,12小时制(1~12)
%M 分钟(00~59)
%p 显示出AM或PM
%r 显示时间,12小时制(hh:mm:ss %p)
%s 从1970年1月1日00:00:00到目前经历的秒数
%S 显示秒(00~59)
%T 显示时间,24小时制(hh:mm:ss)
%X 显示时间的格式(%H:%M:%S)
%Z 显示时区,日期域(CST)
%a 星期的简称(Sun~Sat)
%A 星期的全称(Sunday~Saturday)
%h,%b 月的简称(Jan~Dec)
%B 月的全称(January~December)
%c 日期和时间(Tue Nov 20 14:12:58 2012)
%d 一个月的第几天(01~31)
%x,%D 日期(mm/dd/yy)
%j 一年的第几天(001~366)
%m 月份(01~12)
%w 一个星期的第几天(0代表星期天)
%W 一年的第几个星期(00~53,星期一为第一天)
%y 年的最后两个数字(1999则是99)
// 1、格式化输出 //now时间 [root@iZbp1e6dcmuajgzZ ~]# date +"%Y-%m-%d" 2020-09-04 [root@iZbp1e6dcmuajgzZ ~]# date +"%Y-%m-%d %H:%M:%S" 2020-09-04 17:05:36 //前一天 [root@iZbp1e6dcmuajgzZ ~]# date -d "1 day ago" +"%Y-%m-%d %H:%M:%S" 2020-09-03 17:07:06 //前一周 [root@iZbp1e6dcmuajgzZ ~]# date -d "1 week ago" +"%Y-%m-%d %H:%M:%S" 2020-08-28 17:07:24 //前一月 [root@iZbp1e6dcmuajgzZ ~]# date -d "1 month ago" +"%Y-%m-%d %H:%M:%S" 2020-08-04 17:07:31 //前一年 [root@iZbp1e6dcmuajgzZ ~]# date -d "1 year ago" +"%Y-%m-%d %H:%M:%S" 2019-09-04 17:07:40 //2、加减操作 //当天 [root@iZbp1e6dcmuajgzZ ~]# date +%Y%m%d 20200904 //前一天 [root@iZbp1e6dcmuajgzZ ~]# date -d "-1 day" +%Y%m%d 20200903 //后一天 [root@iZbp1e6dcmuajgzZ ~]# date -d "+1 day" +%Y%m%d 20200905 //上一月 [root@iZbp1e6dcmuajgzZ ~]# date -d "-1 year" +%Y%m%d 20190904 //下一月 [root@iZbp1e6dcmuajgzZ ~]# date -d "+1 month" +%Y%m%d 20201004 //前一年 [root@iZbp1e6dcmuajgzZ ~]# date -d "-1 year" +%Y%m%d 20190904 //下一年 [root@iZbp1e6dcmuajgzZ ~]# date -d "+1 year" +%Y%m%d 20210904 //3、设置时间(需root权限执行) [root@iZbp1e6dcmuajgzZ ~]# date -s 17:15:11 [root@iZbp1e6dcmuajgzZ ~]# sudo date -s 17:15:11 // 把系统时间写入CMOS [root@iZbp1e6dcmuajgzZ ~]# clock -w [root@iZbp1e6dcmuajgzZ ~]# sudo clock -w
3.2.7 将目前动作延迟一段时间(暂停、睡眠) sleep
sleep命令暂停指定的时间。
有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的。
//下面是一个Shell进度条的脚本演示在脚本中生成延时。 /** #!/bin/bash b='' for ((i=0;$i<=100;i++)) do printf "Progress:[%-100s]%d%%\r" $b $i sleep 0.5 b=#$b done echo */
3.2.8 输出指定的字符串或者变量 echo
// echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。 [root@iZbp1e6dcmuajgzZ ~]# echo wfx wfx [root@iZbp1e6dcmuajgzZ ~]# echo date date [root@iZbp1e6dcmuajgzZ ~]# echo `date` Fri Sep 4 17:24:37 CST 2020
3.2.9 退出当前的shell exit
exit命令用于退出shell,并返回给定值。
在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。
若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
3.2.10 查询历史命令记录 history
history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
// 使用history命令显示最近使用的10条历史命令,输入如下命令: [root@iZbp1e6dcmuajgzZ ~]# history 10 1021 date +"%Y-%m-%d %H:%M:%S" 1022 echo wfx 1023 echo data 1024 echo wfx 1025 echo date 1026 echo 'date' 1027 echo wfx 1028 echo date 1029 echo `date` 1030 history 10
3.2.11 清屏幕 clear
3.2.12 显示帮助信息 help
help命令用于显示shell内部命令的帮助信息。
help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man命令查看。* help
* help shell内部命令
3.2.13 定时任务 crontab
crontab命令被用来提交和管理用户的需要周期性执行的任务。
与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。格式如下:
minute hour day month week command 顺序:分 时 日 月 周其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。示例
* 每1分钟执行一次
command * * * * * command
* 每小时的第3和第15分钟执行
3,15 * * * * command
* 在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
* 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
* 每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
* 每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
* 每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
* 每周六、周日的1:10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
* 每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
* 每星期六的晚上11:00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
* 每一小时重启smb
* */1 * * * /etc/init.d/smb restart
* 晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
* 每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart
* 一月一号的4点重启smb
0 4 1 jan * /etc/init.d/smb restart
* 每小时执行/etc/cron.hourly目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
四、其他命令
4.1 重定向输出 > 和 >>
> 重定向输出,覆盖原有内容;
>> 重定向输出,又追加功能;示例
* cat /etc/passwd > a.txt 将输出定向到a.txt中
* cat /etc/passwd >> a.txt 输出并且追加到a.txt中
4.2 管道 |
管道是Linux命令中重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入。示例
* ls --help | more 分页查询帮助信息
* ps –ef | grep java 查询名称中包含java的进程* ifconfig | more 网络设备信息
* cat index.html | more
* ps –ef | grep aio
4.3 执行控制 &&
命令之间使用 && 连接,实现逻辑与的功能。
只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。