掌握这些常用Linux命令,一起提升工作效率

开始上班了,新一年的奋斗的之路启程了,要继续【奔赴山海,奔赴热爱】。

汪国真在《热爱生命》这首诗中写到:既然选择了远方,便只顾风雨兼程。技术上还是持续精进和学习,远方虽远,要迈开脚步,一步步抵达远方的目标。

这次整理了常用的Linux的命令,这里面很多命令都是高频使用。作为程序员,离不开和Linux服务器打交道,部署项目,排查问题等。正确掌握这些命令后,好处多多。比如能极大的提高工作的效率,遇到线上出现问题需要排查,能更快的通过命令定位问题,找到原因,解决问题,获得领导和同事的认可和赞赏,岂不美哉!

温馨提示本文内容较多,建议收藏食用!(收藏后一定要看啊,不要放到收藏夹吃土)

一、工欲善其事,必先利其器

基本功练习

0、登录服务器SSH命令

简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最基本的用法:

常用格式:ssh [-l login_name] [-p port] [user@]hostname

例子:

ssh 192.168.1.110
ssh -l root 192.168.0.11
# 比较常用 
ssh [email protected]

图解:

1、传输文件scp命令

scp命令用于Linux服务器之间复制文件和目录。scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

最基本的用法:

常用格式:scp [可选参数] file_source remote_username@remote_ip:remote_folder

例子:

scp /home/test.log [email protected]:/home/happy/

注意: 使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

2、查看系统状态 top、free、df

top命令用于实时显示 process 的动态。可以配合用来查询vm的一些问题!具体参数不做介绍。

# 表示更新两次后终止更新显示
top -n 2
#表示更新周期为3秒
top -d 3
# 显示进程号为2586的进程信息,CPU、内存占用率等
top -p 2586
更新显示二次的结果输入到名称为 top.log 的档案里
top -n 2 -b < top.log

free命令用于显示内存状态。

# 显示内存使用信息 , -h 选项为根据大小适当显示(人类可以读懂的方式)
free -h
# 每10s 执行一次命令
free -hs 10

df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

# 查看磁盘信息, -h 选项为根据大小适当显示
df -h

du会显示指定的目录或文件所占用的磁盘空间。用于查看当前目录的总大小。

 # 通过排序的方式显示前十条
[root@localhost ~]# du -am  | sort -nr | head -n 10
183	./jdk-8u191-linux-x64.tar.gz
183	.
1	./.viminfo
....

3、压缩/解压tar命令

tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

  • 压缩文件

命令 : tar -zcvf  备份文件.tar.gz  备份文件/目录

后缀也可以是.tgz。

# 创建一个文件
[root@localhost ~]# touch text.log    
# 压缩 text.tar.gz
[root@localhost ~]# tar -zcvf text.tar.gz text.log 

[root@localhost ~]# tar -zcvf text.tgz text.log 
text.log
[root@localhost ~]# ll
-rw-r--r--. 1 root root       114 3月  12 22:45 text.tgz
  • 列出压缩文件内容

命令: tar -ztvf 备份文件.tar.gz  或   tar -ztvf 备份文件.tgz

[root@localhost ~]# tar -ztvf text.tar.gz 
-rw-r--r-- root/root         0 2019-03-12 22:41 text.log
[root@localhost ~]# tar -ztvf text.tgz 
-rw-r--r-- root/root         0 2019-03-12 22:41 text.log
  • 解压文件

命令: tar -zxvf 备份文件.tar.gz  或   tar -zxvf 备份文件.tgz

[root@localhost ~]# tar -zxvf text.tar.gz 
-rw-r--r-- root/root         0 2019-03-12 22:41 text.log
[root@localhost ~]# tar -zxvf text.tgz 
-rw-r--r-- root/root         0 2019-03-12 22:41 text.log

tar -z 压缩(c)、查看(t)、解压(x)vf

  • -z或–gzip或–ungzip 通过gzip指令处理备份文件
  • -c或–create 建立新的备份文件
  • -t或–list 列出备份文件的内容
  • -x或–extract或–get 从备份文件中还原文件
  • -v或–verbose 显示指令执行过程
  • -f<备份文件>或–file=<备份文件> 指定备份文件

4、修改文件属性chmod命令

Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。

读,写,执行的权限。r=4,w=2,x=1

  • 若要rwx属性则4+2+1=7;
  • 若要rw-属性则4+2=6;
  • 若要r-x属性则4+1=5。

一般情况,赋值 命令

chmod 755 file

此外chmod也可以用字母来表示权限,这里就不进行说明。

5、查找文件find命令

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find . -iname \*.txt(大小写都匹配)
find . -type d(当前目录下的所有子目录)
find /usr -type l(当前目录下所有的符号链接)
find /usr -type l -name "z*" -ls(符号链接的详细信息 eg:inode,目录)
find /home/test -size +250000k(超过250000k的文件,当然+改成-就是小于了)
find /home/test f -perm 777 -exec ls -l {} \; (按照权限查询文件)
find /home/test -atime -1  1天内访问过的文件
find /home/test -ctime -1  1天内状态改变过的文件    
find /home/test -mtime -1  1天内修改过的文件
find /home/test -amin -1  1分钟内访问过的文件
find /home/test -cmin -1  1分钟内状态改变过的文件    
find /home/test -mmin -1  1分钟内修改过的文件
#----------
#查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们
find /var/log -type f -mtime +7 -ok rm {} \;

#查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l {} \;

6、查询字符grep命令

grep命令用于查找文件里符合条件的字符串。

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。

# 显示所有以d开头的文件中包含test的行。
grep 'test' d* 
# 显示在text1,text2,text3文件中匹配test的行。
grep 'test' text1 text2 text3
# text文件中显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep '[a-z]\{5\}' text

# 查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*

7、查看端口占用netstat命令

netstat命令用于显示网络状态。

利用netstat指令可让你得知整个Linux系统的网络情况。

# 查看端口1212的使用情况
netstat -tln | grep 1212
查看端口属于哪个程序
lsof -i :1212

8、查看文件内容 tail命令

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

真实使用:

# 查看日志
tail -f  xxxx.out
# 查看 100行日志
tail  -n100 xxxx.out
# 查看带有'test'的日志
tail -f | grep 'test' 这样可以只显示

9、杀死进程kill命令

kill命令用于删除执行中的程序或工作。查找tomcat服务,并彻底杀死进程。

# 查找tomcat服务器
ps aux | grep tomcat
root  25689
# 杀掉进程 -9 强制杀,一枪爆头
kill -9 25689
# 杀掉进程 -15 温柔杀,安乐死
kill -15 25689

10、切换目录 cd | 显示当前路径 pwd

#  登录酷炫的服务器
Connecting to 192.168.1.120:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'

cd 命令用于切换当前工作目录至 dirName(目录参数)。

其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。

另外,”~” 也表示为 home 目录 的意思,”.” 则是表示目前所在的目录,”..” 则表示目前目录位置的上一层目录。

pwd命令用于显示工作目录。

执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。

# 进入 magic “空间”
[root@localhost ~]# cd magic/

# 查看magic “空间”当前的目录
[root@localhost magic]# pwd
/root/magic

11、创建目录 mkdir|创建文件 touch

mkdir命令用于建立名称为 dirName 之子目录。

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

# 创建一个奇幻目录,也可以一次性创建多个。或者多级
# 创建一个
[root@localhost magic]# mkdir fantasy
[root@localhost magic]# ls
fantasy
# 创建多个
[root@localhost magic]# mkdir great best
[root@localhost magic]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月  14 22:47 best
drwxr-xr-x. 2 root root 6 3月  14 22:45 fantasy
drwxr-xr-x. 2 root root 6 3月  14 22:47 great

# 创建多级
[root@localhost magic]# mkdir -p surprise/otherworld
[root@localhost magic]# cd surprise/otherworld/
[root@localhost otherworld]# pwd
/root/magic/surprise/otherworld

#-------------------#
# 在fantasy 下创建一个文件
[root@localhost fantasy]# touch happyday
[root@localhost fantasy]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月  14 22:50 happyday

# 在fantasy 下创建多个文件
[root@localhost fantasy]# touch sadday busyday
[root@localhost fantasy]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月  14 22:50 busyday
-rw-r--r--. 1 root root 0 3月  14 22:50 happyday
-rw-r--r--. 1 root root 0 3月  14 22:50 sadday

12、文本编辑器vi/vim |  复制 cp | 截切 mv

Unix  系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。

但是目前我们使用比较多的是 vim 编辑器(有时候系统安装好没有vim需要自行安装一下)。

原因:vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

vim涉及的知识还是挺多,这里简单介绍,不详细展开,如不是很了解的可以阅读:Linux学习—vim文本编辑器学习://blog.csdn.net/u010648555/article/details/73719039

# 打开happyday
[root@localhost fantasy]# vim happyday 
#点击 i 后插入内容

# 输入完成 按 esc 输入 :wq  ,回车保存

# 拷贝 复制一份
[root@localhost fantasy]# cp happyday ../best/
[root@localhost fantasy]# cd ..
[root@localhost magic]# ll best/happyday 
-rw-r--r--. 1 root root 99 3月  14 23:02 best/happyday

# 改名
[root@localhost magic]# cd best/
[root@localhost best]# mv happyday besthappyday
[root@localhost best]# ll
总用量 4
-rw-r--r--. 1 root root 99 3月  14 23:02 besthappyday

注: Vim相关模式

(1)命令模式 -Command Mode
(2)输入模式 -Insert Mode
(3)底行模式(尾行,末行) – Last Line Mode

 --vim 打开(创建)文件
 默认进入的命令模式,输入I 转换到输入模式,
 到底行模式--esc :wq

13、显示文件内容 cat | more | less

cat 命令用于连接文件并打印到标准输出设备上。

more 命令类似 cat,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)。

lessmore 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

# 这里就只演示 cat
[root@localhost best]# cat besthappyday 
0315 happy
0812 happy
0201 happy
.....

插个小故事: 之前有遇到过使用vi打开几个G的文件去查日志内容。导致系统负载飙升。命令的正确使用很重要啊!

14、显示开头内容 head | 排序 sort

head命令 用来显示档案的开头至标准输出中。

sort命令用于将文本文件内容加以排序。sort可针对文本文件的内容,以行为单位来排序。

# 查看前5行内容 -n  num:显示每个文件的前num 行内容
[root@localhost best]# head -n 5 besthappyday 
0315 happy
0812 happy
0201 happy
0403 happy
9046 happy

# 排序一下
[root@localhost best]# head -n 5 besthappyday | sort 
0201 happy
0315 happy
0403 happy
0812 happy
9046 happy

15、压缩文件的内容查看和搜索 zgrep | zcat

避免解压文件,可以使用zgrep命令查找文件内容信息、zcat查看压缩文件中的信息。

# 五日后文件记录内容太多,压缩一下
[root@localhost best]# tar -zcvf besthappyday.tar.gz besthappyday 
besthappyday
[root@localhost best]# ll
总用量 8
-rw-r--r--. 1 root root  99 3月  14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月  14 23:14 besthappyday.tar.gz
# 查看 压缩文件内容 
[root@localhost best]# zcat -a besthappyday.tar.gz 
0812 happy
0201 happy
0403 happy
9046 happy
...
# 查找 压缩文件中的内容
[root@localhost best]# zgrep -a "0201" besthappyday.tar.gz 
0201 happy

: 一般公司日志都会每天压缩归档,当日志量较大的时候,如果想要排查问题,查找日志,那使用这个命令不用解压在查看了,方便高效。

16、查看目录下文件和属性 ls | 移除文件或目录 rm

ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。ls -l可以显示档案的时间记录。

rm命令用于删除一个文件或者目录。

# 查看best目录文件
[root@localhost best]# ls
besthappyday  besthappyday.tar.gz
[root@localhost best]# ls -l
总用量 8
-rw-r--r--. 1 root root  99 3月  14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月  14 23:14 besthappyday.tar.gz
[root@localhost best]# ll
总用量 8
-rw-r--r--. 1 root root  99 3月  14 23:02 besthappyday
-rw-r--r--. 1 root root 163 3月  14 23:14 besthappyday.tar.gz

# 删除 文件 besthappyday 
[root@localhost best]# rm -i besthappyday
[root@localhost best]# ll
总用量 4
-rw-r--r--. 1 root root 163 3月  14 23:14 besthappyday.tar.gz

**注意: rm使用一定不能胡搞,尤其还是root用户的时候,千万注意使用 rm -rf / ,生产环境切记! **

正规的公司一般有权限控制,不会直接给开发人员一个root的权限。

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。

注: 如果不能使用 ll(别名,不是系统自带命令),可以进行配置(临时):alias ll=’ls -l –color=auto’ ,如果想服务重启后还生效要改配置文件。
掌握别名的使用可以定义自己的专属命令。

17、网络命令工具 ifconfig | ping | telnet | nc

ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态,或是显示目前的设置,可用于启动关闭指定网卡、配置IP地址等。

ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

telnet命令用于远端登入。执行telnet指令开启终端机阶段作业,并登入远端主机.

nc命令nc命令是一个功能打包的网络实用程序,它通过命令行在网络上读取和写入数据。(有时候没有telnet命令可以使用nc 进行检查),这个命令我是这样记住的,nc(脑残)命令。

# 查询显示网络信息 配置的IP: 192.168.1.120
[root@localhost best]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.120  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2011:229e:3407:7b99  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ef:a7:71  txqueuelen 1000  (Ethernet)
        RX packets 2602  bytes 225175 (219.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1527  bytes 193319 (188.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 68  bytes 5912 (5.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 68  bytes 5912 (5.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
# 勾搭 googleMM 和 勾搭BaiduMM
[root@localhost best]# ping www.google.com
PING www.google.com (69.171.225.13) 56(84) bytes of data.
^C
--- www.google.com ping statistics ---
17 packets transmitted, 0 received, 100% packet loss, time 16019ms

[root@localhost best]# ping www.baidu.com
PING www.a.shifen.com (119.75.217.26) 56(84) bytes of data.
64 bytes from 119.75.217.26 (119.75.217.26): icmp_seq=1 ttl=55 time=101 ms
64 bytes from 119.75.217.26 (119.75.217.26): icmp_seq=2 ttl=55 time=124 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 101.591/113.020/124.449/11.429 m

# 看房间门是否打开
[root@localhost ~]# telnet 192.168.1.120 8080

-- telnet : ctrl + ] + quit

# 检查redis的服务是否通,redis部署在192.168.1.121服务器上
[root@localhost ~]# nc -zv 192.168.1.121 7000
Connection to 192.168.2.122 7000 port [tcp/newoak] succeeded
[root@localhost ~]# nc -zv 192.168.1.122 7000
nc: connect to 192.168.2.122 port 7000 (tcp) failed: Connection refused

18、显示进程状态 ps |定时执行任务 crontab

ps命令用于显示当前进程 (process) 的状态。
这个命令文章上面有介绍过。和grep组合使用查看应用进程。

# 查询java服务
[root@localhost ~]# ps -aux | grep java

crontab是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

crontab的使用这里略,感兴趣的请自行查找资料。

19、切换用户 su | 查看帮助 man

su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。一般会给权限小的账户,需要做一些高端操作,要切换到更高权限用户,这个时候可以使用su命令。这里注意下,切换的使用最好带 -, 会切换到用户的环境下,否则可能有些环境变量不可用。

# 显示当前用户
dufy@localhost:~$ whoami 
dufy
# 切换到root用户
dufy@localhost:~$ su - root 
密码: 
[root@localhost ~]# whoami
root

man命令来查看一些不熟悉的命令的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法。man就是manual(参考手册)。

# 查看对应命令的使用说明
[root@localhost ~]# man mv
[root@localhost ~]# man ls

三剑客 grep | sed | awk

0、文本过滤器-grep

grep命令用于查找文件里符合条件的字符串,是一种强大的文本搜索工具,支持正则表达式或者字符及基本文本字符所编写的过滤条件

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。说简单一点就是 :用户可以指定的“模式”(选项)对目标文本进行匹配检查 , 查看就打印匹配到的行。

注: 在grep命令中输入字符串参数时,最好将其用双引号括起来。调用变量时也可以使用双引号。在调用模式匹配事,应使用单引号。

  • 常用命令格式
# grep  匹配条件 目标文件/目录
可选参数:
-c 或 --count : 计算符合样式的列数。
-i 或 --ignore-case : 忽略字符大小写的差别
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号
-s :不显示不存在或无匹配文本的错误信息。
-v 或 --revert-match : 显示不包含匹配文本的所有行行
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同
-E 或 --extended-regexp : 将样式为延伸的普通表示法来使用
....

说明:在正则表达式中
^ :匹配字符串开始
$ :匹配字符串结尾
* :字符出现 [0- 任意次 ]
\?:字符出现 [0-1 次 ]
\+:字符出现 [1- 任意次 ]
  • 简单实例
# 1、新建一个busyday busyday1 busyday2文件 
[root@localhost learn_grep]# touch busyday
[root@localhost learn_grep]# vim busyday 
# 其他busyday1 busyday2类似,文件内容略
[root@localhost learn_grep]# cat busyday 
abc
123abdef
789happy
hjk567
hello123
greptest

# 2、查询 happy 所在的文件
[root@localhost learn_grep]# grep "happy" busyday*
busyday:789happy
busyday1:123happy
busyday2:456happy

# 3、统计 happy 所在的文件内容的出现的次数
[root@localhost learn_grep]# grep -c "happy" busyday*
busyday:1
busyday1:1
busyday2:1

# 4、显示匹配happy的所有行数,都在第三行
[root@localhost learn_grep]# grep -n "happy" busyday*
busyday:3:789happy
busyday1:3:123happy
busyday2:3:456happy

# 5、显示所有不包含happy的行
[root@localhost learn_grep]# grep -v "happy" busyday*
busyday:abc
busyday:123abdef
busyday:hjk567
busyday:hello123
busyday:greptest
busyday:
busyday1:abc
busyday1:4567abdef
busyday1:hjk321
busyday1:hello987
busyday2:abc
busyday2:9876abdef
busyday2:hjk4321
busyday2:hello0980

# 6、精确匹配,找到 123happy 
[root@localhost learn_grep]# grep "123happy" busyday*
busyday1:123happy

# 7、正则匹配,找到所有123开头的
[root@localhost learn_grep]# grep -E "^123*" busyday*
busyday:123abdef
busyday1:123happy

还有很多,自行进行魔法练习!

1、字符处理器-sed

sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。能够完美的配合正则表达式便用,功物能不同凡响。

  • 基本语法
sed  [-参数]  '命令'  文本

参数说明:
- -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
- -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
  • 例子
# 一、sed 's/要被取代的字串/新的字串/g'
# 1、把aflyun用"java编程技术乐园"替换
[root@localhost learn_awk]# echo "aflyun0315" | sed 's/aflyun/java编程技术乐园/' 
java编程技术乐园0315
[root@localhost learn_awk]# echo "aflyun0315" | sed 's*aflyun*java编程技术乐园*'
java编程技术乐园0315
# 二、指定输入流的哪一行被编辑,如果省略,默认是对所有行都进行编辑
# 2、把aflyun用"java编程技术乐园"替换
[root@localhost learn_awk]# cat aflyun 
flyun110
Hello aflyun
aflyun0315
#  替换第2行
[root@localhost learn_awk]# cat aflyun | sed '2s/aflyun/java编程技术乐园/'
aflyun110
Hello java编程技术乐园
aflyun0315
#替换所有行(没有地址,就是默认)
[root@localhost learn_awk]# cat aflyun | sed 's/aflyun/java编程技术乐园/'
java编程技术乐园110
Hello java编程技术乐园
java编程技术乐园0315

# 三、基本编辑命令
[root@localhost learn_awk]# cat aflyun 
aflyun110
Hello aflyun
aflyun0315
# 1、插入命令
[root@localhost learn_awk]# sed '2i java编程技术乐园' aflyun 
aflyun110
java编程技术乐园
Hello aflyun
aflyun0315

# 2、删除命令
[root@localhost learn_awk]# sed '2d' aflyun 
aflyun110
aflyun0315

# 其他类似

# 四、替换文件内容
# sed -i 's/aflyun/java编程技术乐园/g' 文件名    
# 如果没有g标记,则只有每行第一个匹配的aflyun被替换成java编程技术乐园
[root@localhost learn_awk]# cat aflyun 
aflyun110
Hello aflyun
aflyun0315
[root@localhost learn_awk]# sed -i 's/aflyun/java编程技术乐园/g' aflyun 
[root@localhost learn_awk]# cat aflyun 
java编程技术乐园110
Hello java编程技术乐园
java编程技术乐园0315

2、报告生成器-awk

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。它也被称为三剑客的老大,利剑出鞘,必会不同凡响。掌握了 awk将会使你的工作变的高大上。

awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式上分别体现如下 :

BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作

{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令块

END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果

常用 awk 内置变量

变量名 说明
$0 当前记录
n 当前记录的第n个字段
FS 输入字段分隔符,默认为换行符
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始
OFS 输入字段分隔符,默认也是空格
ORS 输出的记录分隔符,默认为换行符
  • 基本用法1
awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
  • 例子
# 新增一个 happy.log ,内容
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
# 每行按空格或TAB分割,输出文本中的2、4项
[root@localhost learn_awk]#  awk '{print $1,$4}' happy.log 
2 a
3 like
This's 
10 orange,apple,mongo
 # 格式化输出
[root@localhost learn_awk]# awk '{printf "%-8s %-10s\n",$1,$4}' happy.log 
2        a         
3        like      
This's             
10       orange,apple,mongo
  • 基本用法2
awk -F  #-F相当于内置变量FS, 指定分割字符
  • 例子
[root@localhost learn_awk]# cat happy.log 
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
# 使用","分割
[root@localhost learn_awk]# awk -F, '{print $1,$2}'   happy.log 
2 this is a test 
3 Are you like awk 
This's a test 
10 There are orange apple # 注意这里逗号没有了

# 或者使用内建变量
[root@localhost learn_awk]# awk 'BEGIN{FS=","} {print $1,$2}'   happy.log 
2 this is a test 
3 Are you like awk 
This's a test 
10 There are orange apple # 注意这里逗号没有了

# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
[root@localhost learn_awk]# awk -F '[ ,]'  '{print $1,$2,$5}'   happy.log 
2 this test
3 Are awk
This's a 
10 There apple

# $1,$2,$5 输出第一个,第二个和第五个,没有则不输出。例如This's a test ,没$5.

awk 很强大功能也很多,这里只能简单介绍,这个命令学习不是一天两天就能学成的。

两个小工具

0、魔法清单备忘录工具-cheat

cheat(作弊)允许在命令行上创建和查看交互式备忘单。它能帮助* nix系统管理员提醒他们经常使用的命令选项,但不经常记住。我们也可以通过cheat构建自己的魔法清单备忘录,下面是安装和使用的过程:

# 1、安装wget
[root@localhost ~]# yum -y install wget
...安装过程日志省略
# 2、 运行命令即可安装pip:
[root@localhost ~]# wget //bootstrap.pypa.io/get-pip.py
...安装过程日志省略
[root@localhost ~]# python get-pip.py
...安装过程日志省略
# 3、使用 pip方式安装 cheat ://github.com/cheat/cheat/wiki/Installing
# 3.1 pip是大多数用户的推荐安装方法。简单地运行:
[root@localhost ~]# pip install cheat
... 安装过程日志省略
Successfully
# 或者 使用 pip install --user cheat 命令

# 3.2 然后添加到PATH包括$HOME/.local/bin:
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# export PATH="root/.local/bin:$PATH"
[root@localhost ~]# echo $PATH
root/.local/bin:/usr/local/java/jdk1.8.0_191/bin:/usr/local/java/jdk1.8.0_191/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 4.使用cheat ,发现不可用,请往下看
[root@localhost ~]# cheat tar
No cheatsheet found for tar
[root@localhost ~]# cheat mv
No cheatsheet found for mv

# 作弊单的价值在于它允许您创建自己的备忘单 - 默认值仅用作起点,并且可以而且应该被修改。
# Cheatsheets存储在〜/.cheat/目录中,并以每个关键字的方式命名。
# 换句话说,tar cheatsheet的内容位于〜/.cheat/tar文件中。 ~:表示家目录!

# 5.添加你的 作弊单 Cheatsheets
[root@localhost ~]# cd .cheat/
[root@localhost .cheat]# ll
总用量 0
[root@localhost .cheat]# touch tar
[root@localhost .cheat]#  vim tar 
# 添加对应的内容,请往下看
[root@localhost .cheat]# ll
-rw-r--r--. 1 root root 770 3月  16 22:50 tar
[root@localhost .cheat]# 以下内容是
# 6. 查看 tar 备忘录
[root@localhost .cheat]# cheat tar 
p或bzip。
#
#从文件创建存档:
   tar -cf target.tar file1 file2 file3
#
#创建一个gzip压缩文件:
   tar -czf target.tar.gz file1 file2 file3
#
#解压缩目标目录中的存档:
   tar -xf source.tar -C目录
#
#解压缩当前目录中的gzip压缩文件:
   tar -xzf source.tar.gz
#
#解压缩当前目录中的bzip压缩文件:
   tar -xjf source.tar.bz2
#
#创建压缩归档,使用归档后缀确定压缩程序:
   tar -caf target.tar.xz file1 file2 file3
#
#列出tar文件的内容:
   tar -tvf source.tar

通过这样的方式,添加你自己的的作弊备忘录清单。其实备忘录还可以加语法高亮,后面有时间在研究了。

cheat github地址://github.com/cheat/cheat

1、文档查询工具-cheat.sh

如果我们想要一个魔法工具,一个理想的备忘单,来想象一下。它应该是什么样的?应该具备哪些功能?

  • 简洁 – 它应该只包含你需要的东西,而不是其他东西。
  • 快 – 应该可以立即使用它。全面 – 它应包含每个可能问题的答案。
  • 通用 – 它应随时随地可用,无需任何准备。不引人注目 – 它不应该分散你的主要任务。
  • 辅导 – 它应该帮助你学习这门课程。
  • 不显眼 – 应该可以完全不被注意地使用它。

下面介绍的 cheat.sh 就是这样一款功能强大的魔法工具,一起看它的特点吧!

特点:

  • 有一个简单的卷曲/浏览器界面。
  • 涵盖55种编程语言,多种DBMS以及1000多种最重要的UNIX / Linux命令。
  • 提供对世界上最好的社区驱动的备忘单存储库的访问,与StackOverflow相同。
  • 随处可用,无需安装。
  • 超快,通常在100毫秒内返回答案。
  • 有一个方便的命令行客户端,cht.sh这是非常有利和有帮助的,虽然不是强制性的。
  • 可以直接在代码编辑器中使用,无需打开浏览器而不切换心理上下文。
  • 支持一种特殊的隐身模式,可以完全无形地使用,无需触摸按键和发出声音。

1、在线网页版

cheat.sh ://cheat.sh/,一个命令行的文档查询网站,如图

举例,在网页上查询grep魔法的使用:

2、服务器客户端

要从命令行获取UNIX / Linux命令的备忘单,请使用curl或在查询中指定命令名称的任何其他HTTP / HTTPS客户端查询服务:

curl cheat.sh/tar
curl cht.sh/curl
curl //cheat.sh/rsync
curl //cht.sh/tr

如上面所示,可以使用HTTPS和HTTP来访问服务,以及long(cheat.sh)和short(cht.sh)服务名称!

如:

# 查看grep 备忘录 和网页一致
[root@localhost ~]# curl cheat.sh/grep
# Search a file for a pattern
grep pattern file
.... 省略其他内容
ps aux | grep -E --color 'bash|$'
[root@localhost ~]#

cheat.sh : github地址: //github.com/chubin/cheat.sh

这两个魔法小工具使用的好,那一定会提升你的工作效率,这里只是简单的一些说明介绍和使用,尤其是cheat.sh 这个魔法工具,功能很多,也很强大!

学以致用

这一块主要是对之前讲解的内容进行回顾,然后通过实际的应用场景,使用这些命令。

在linux下,“一切皆是文件”!

0、磁盘占用

当服务器运行一段时间后,会有数据的堆积。此时我们用使用df魔法去看一下磁盘目前使用的空间情况,如下:

[aflyun@localhost ~]$ df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  2.0G   16G   12% /
devtmpfs                 485M     0  485M    0% /dev
tmpfs                    496M     0  496M    0% /dev/shm
tmpfs                    496M  6.8M  490M    2% /run
tmpfs                    496M     0  496M    0% /sys/fs/cgroup
/dev/sda1               1014M  129M  886M   13% /boot
tmpfs                    100M     0  100M    0% /run/user/0

但是当知道了一个挂载的磁盘下面没有空间时候,怎么知道那个目录下面文件占用磁盘空间最多呢?那就使用du魔法。如下:

# 查看 /home/aflyun 各个目录占用磁盘空间大小
[aflyun@localhost ~]$ du -lh --max-depth=1
193M	./tools
0	./magic
193M	

各参数说明 :
# -h或–human-readable 以K,M,G为单位,提高信息的可读性。
# -l或–count-links 重复计算硬件连接的文件。
# –max-depth=<目录层数> 超过指定层数的目录后,予以忽略。

应用场景: Linux服务器磁盘空间占用,大文件查找。

1、删除文件

删除(rm)魔法,也就是类似使物体消失:消隐无踪咒。这个魔法如果使用不当那就是 一个黑魔法(如阿瓦达索命)。

正常使用:

[aflyun@localhost rmtest]$ touch testrm1 restrm2 
[aflyun@localhost rmtest]$ mkdir -p testrmdir/0317
[aflyun@localhost rmtest]$ mkdir testrmdir1
[aflyun@localhost rmtest]$ cd testrmdir/0317/
[aflyun@localhost 0317]$ touch testrm3
[aflyun@localhost rmtest]$ ll
总用量 0
-rw-rw-r--. 1 aflyun aflyun  0 3月  17 14:48 restrm2
-rw-rw-r--. 1 aflyun aflyun  0 3月  17 14:48 testrm1
drwxrwxr-x. 3 aflyun aflyun 18 3月  17 14:49 testrmdir
drwxrwxr-x. 2 aflyun aflyun  6 3月  17 14:50 testrmdir1
[aflyun@localhost rmtest]$ 
# 1.删除一个文件
[aflyun@localhost rmtest]$ rm  testrm1
# 2.删除文件之前询问
[aflyun@localhost rmtest]$ rm -i restrm2 
rm:是否删除普通空文件 "restrm2"?
# 注:  Enter :删除,ctrl +c :退出

# 3.强制递归删除文件或者目录
[aflyun@localhost rmtest]$ rm -f testrmdir
rm: 无法删除"testrmdir": 是一个目录
[aflyun@localhost rmtest]$ rm -rf testrmdir
[aflyun@localhost rmtest]$ ll
总用量 0
drwxrwxr-x. 1 aflyun aflyun 6 3月  17 14:50 testrmdir1

参数说明:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。

使用不当,可能就要跑路喽!:

# 1.直接敲命令删除日志文件
[aflyun@localhost ~]$ rm -rf / home/aflyun/logs/
# 看出什么 端倪了没有。提示一下:一定不要拷贝这条命令去执行!!!
# 如果你真的好奇,那建议在自己的虚拟机上试试,满足一下你的好奇心。
# 这条命令中 “多了个空格 ”! 

# 2.脚本中使用,删除日志文件
[aflyun@localhost ~]$ vim cleanlog.sh
cd ${log_path}
rm -rf *

# 进入到日志目录,然后把日志都删除。
# 乍看没有任何问题?但是当目录不存在时,那悲剧也就发生了。

注意::在生产环境上,执行rm命令的时候,一定擦亮眼睛,否则一回车,就是“千古恨”!

友情建议:

可以在生产环境把 rm -rf 命令替换为mv,再写个定时shell定期清理。模拟了回收站的功能。

参考:rm -rf * 了咋办,跑路吗?//t.cn/Exyx5f5

2、查找文件

当你忘记文件/目录具体在哪个地方的时候,请使用find魔法。

# 3.1 查找/home/aflyun目录下面的所有文件
[aflyun@localhost ~]$ find /home/aflyun/
/home/aflyun/
/home/aflyun/.bash_logout
/home/aflyun/.bash_profile
/home/aflyun/.bashrc
/home/aflyun/tools
/home/aflyun/tools/apache-tomcat-8.5.38.tar.gz
/home/aflyun/tools/jdk-8u191-linux-x64.tar.gz
/home/aflyun/magic
/home/aflyun/magic/happy.log
/home/aflyun/rmtest
/home/aflyun/rmtest/restrm2
/home/aflyun/rmtest/testrmdir1

# 3.2 查找/home/aflyun 目录中所有大于 10M 的文件并列出来
[aflyun@localhost ~]$ find /home/aflyun -size +5M -exec ls -lh {} \;
-rw-r--r--. 1 root root 9.3M 3月  17 14:35 /home/aflyun/tools/apache-tomcat-8.5.38.tar.gz
-rw-r--r--. 1 root root 183M 3月  17 14:35 /home/aflyun/tools/jdk-8u191-linux-x64.tar.gz

参数说明:
# /home/aflyun 指的是当前目录 你也可以指定目录  /home/happy
# -size 文件大小
# +10M 注意M是大写的 意思大于10M
# -exec ls -lh {} \; 管道 列出来并标明大小
# ls -lh 以 k M G的形式列出来
注: 确保不要在你 Linux 系统的根目录运行该命令,因为这可能导致你的机器 I/O 瓶颈。

# 3.3 查找 /home/aflyun 下面rest 的文件,忽略大小写
[aflyun@localhost ~]$ find /home/aflyun/ -iname rest* -type f
/home/aflyun/rmtest/restrm2
/home/aflyun/rmtest/Restrm
参数说明:
# -i  忽略大小写
# -name  文件名

# 3.4 查找文件或者目录
[aflyun@localhost ~]$ find /home/aflyun -iname rest* -type f
/home/aflyun/rmtest/restrm2
/home/aflyun/rmtest/Restrm
[aflyun@localhost ~]$ find /home/aflyun -iname rest*  -type d
/home/aflyun/rmtest/restrmdir1

# 3.5 find和它的朋友exec组合使用,3.2已经用过
# 忽略大小写 ,查找rest开头的文件,并删除文件
[aflyun@localhost ~]$ ll rmtest/
总用量 0
-rw-rw-r--. 1 aflyun aflyun 0 3月  17 15:33 Restrm
-rw-rw-r--. 1 aflyun aflyun 0 3月  17 14:48 restrm2
drwxrwxr-x. 2 aflyun aflyun 6 3月  17 14:50 restrmdir1
[aflyun@localhost ~]$ 
[aflyun@localhost ~]$ find /home/aflyun -iname rest* -type f -exec rm -f {} \;
[aflyun@localhost ~]$ 
[aflyun@localhost ~]$ ll rmtest/
总用量 0
drwxrwxr-x. 2 aflyun aflyun 6 3月  17 14:50 restrmdir1

3、服务状态

在服务器上我们一般会允许很多的服务,一般公司会有服务器状态检测机制。那我们通过命令怎么查看服务是否启动,以tomcat为例子。

# 4.1 查看tomcat服务启动状态
[aflyun@localhost bin]$ ps -aux | grep tomcat
aflyun    5142  0.0  0.0 113308   688 pts/0    S    15:41   0:00 /bin/sh /home/aflyun/tools/apache-tomcat-8.5.38/bin/catalina.sh start
aflyun    5143  3.4  8.6 2296124 87748 pts/0   Sl   15:41   0:05 /usr/local/java/jdk1.8.0_191/bin/java -Djava.util.logging.config.file=/home/aflyun/tools/apache-tomcat-8.5.38/conf/logging.properties 
.....省略

# 4.1.1 另一种方式看服务状态,输出不是 0 ,代表服务启动状态
[aflyun@localhost bin]$ ps -aux | grep -P "/home/aflyun/tools/apache-tomcat-8.5.38/" | grep -v "\sgrep\s" | wc -l
2
[aflyun@localhost bin]$ 

注: 服务是启动了,但是不代表服务是正常的。有时候tomcat服务查看是正常的,但是接口无法访问,有假死情况等!

# 4.2 再次启动tomcat遇到8080端口被占用
java.net.BindException: 地址已在使用 (Bind failed)
	at java.net.PlainSocketImpl.socketBind(Native Method)
	java.net.BindException: Port already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)

# 查看端口8080的使用情况
[aflyun@localhost bin]$ netstat -alnp | grep 8080
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::8080                 :::*                    LISTEN      5143/java

#查看端口属于哪个程序
lsof -i :8080
[aflyun@localhost bin]$ lsof -i :8080
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    5143 aflyun   49u  IPv6  40442      0t0  TCP *:webcache (LISTEN)
[aflyun@localhost bin]

# 注: 5143 pid 就是上面查看tomat的pid。

4、日志查看

在工作中,经常会遇到线上项目出现问题,需要排查! 然而在茫茫的日志文件中,如何快速的找到报错的地方的日志,以及快速定位和解决问题,这是一种能力,这种能力是可以在平时工作中锻炼出来的。

# 5.1 查看tomcat的日志,滚动输出
[aflyun@localhost logs]$ tail -f catalina.out 
# 5.2 查看tomcat的日志中包含 aflyun 的字符,滚动输出
[aflyun@localhost logs]$ tail -f catalina.out  | grep "阿飞云"

# 5.3 查看tomcat的日志中包含 “地址已在使用” 内容的行数
# cat -n 文件名 | grep 搜索名称
[aflyun@localhost logs]$ cat -n  catalina.out  | grep "地址已在使用"
    83	Caused by: java.net.BindException: 地址已在使用
   117	Caused by: java.net.BindException: 地址已在使用
   145	 java.net.BindException: 地址已在使用 (Bind failed)
[aflyun@localhost logs]$ 

# 5.4 查看tomcat的日志中包含 “地址已在使用” 内容的83行,前后10行日志
# cat -n 文件名|tail -n +起始行数 |head -n +查询多少行数
[aflyun@localhost logs]$ cat -n  catalina.out  | tail -n +73 | head -n +20
    73		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    74		at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    75		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    76		at java.lang.reflect.Method.invoke(Method.java:498)
    77		at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
    78		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
    79	Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    80		at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)
    81		at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    82		... 12 more
    83	Caused by: java.net.BindException: 地址已在使用
    84		at sun.nio.ch.Net.bind0(Native Method)
    85		at sun.nio.ch.Net.bind(Net.java:433)
    86		at sun.nio.ch.Net.bind(Net.java:425)
    87		at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    88		at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    89		at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219)
    90		at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1087)
    91		at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:265)
    92		at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
[aflyun@localhost logs]$

注: 日志相关的东西很多,这里强调一下,关键的地方一定要打日志,要不出了问题,及时你会各种Linux的魔法,日志中没有输出出现问题的内容(当前的请求参数,响应参数等),你也就是一个“巧妇”,因为巧妇难为无米之炊。日志一定要记录好!否则出了问题就苦恼+浪费很多时间排查!重视每个环节!

5、定时任务

crontab命令常见于Unix类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

crontab 命令的参数:

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,
则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

注: linux crontab 命令,最小的执行时间是一分钟。

# 6.1、写一个脚本,使用crontab 执行,每2s执行一次!

[aflyun@localhost crontabtest]$ touch printlog.sh
[aflyun@localhost crontabtest]$ touch print.log
[aflyun@localhost crontabtest]$ vim printlog.sh 
[aflyun@localhost crontabtest]$ cat printlog.sh 
#!/bin/bash
ttime=`date +"%Y-%m-%d %H:%M:%S"`
echo "$ttime,Welcome to Java编程技术乐园" >>/home/aflyun/crontabtest/print.log
#-------------------------
#  1.覆盖   echo "" >文件名
#  2.追加   echo "" >>文件名
[aflyun@localhost crontabtest]$ chmod 755 printlog.sh 
[aflyun@localhost crontabtest]$ ll
总用量 8
-rw-rw-r--. 1 aflyun aflyun 1264 3月  17 16:36 print.log
-rwxr-xr-x. 1 aflyun aflyun  132 3月  17 16:34 printlog.sh
[aflyun@localhost crontabtest]$ 


# 6.2、写一个定时的任务
# crontab -e 输入以下语句,然后 :wq 保存退出。保存后可以使用 crontab -l 查看定时任务。
* * * * * /home/aflyun/crontabtest/printlog.sh
* * * * * sleep 1 && /home/aflyun/crontabtest/printlog.sh
* * * * * sleep 2 && /home/aflyun/crontabtest/printlog.sh
...
* * * * * sleep 59 && /home/aflyun/crontabtest/printlog.sh
# 6.3 查看打印的日志
[aflyun@localhost crontabtest]$ cat print.log 
2019-03-17 16:34:01,Welcome to Java编程技术乐园
2019-03-17 16:34:02,Welcome to Java编程技术乐园
....

备注:crontab命令 的时程表的格式如下

# f1 f2 f3 f4 f5 program
  • f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天
  • program 表示要执行的程序。
  • 当 f1 为 _ 时表示每分钟都要执行 program,f2 为 _ 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 _/n 时表示每 n 分钟个时间间隔执行一次,f2 为 _/n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推

学了后要不断练习才能掌握,重复重复直到你忘记为止,这样这个技能就长在你身上了。

二、它山之石,可以攻玉

Linux中命令有很多,上面也只是简单总结一些常用的命令。如果想了解和学习更多的命令,可以参看下面收集的这些网站,经常少刷刷短视频,有空浏览浏览,查看和回顾一些命令,效果倍棒。

学习资料

如果你是新手,没有真正用过Linux或者没有系统的学习过,那推荐你先学习慕课网上的这个免费的课程:
1、Linux达人养成计划 I://www.imooc.com/learn/175

以CentOS操作系统为例,为你带来Linux的简介、系统安装和常用命令等内容。让您在轻松的氛围中感受到Linux之美。

2、Linux 达人养成计划 II://www.imooc.com/learn/111

介绍Linux系统下操作VI编辑器、创建文本文件、VI的三种操作模式、磁盘分区与格式化、用户及用户组权限的相关操作与管理等,让童鞋们对Linux系统有进一步的理解,对Linux服务器的维护操作更加得心应手。


如果有一定的Linux使用经验或者已经在工作的伙伴,那推荐极客时间的这门收费课程:
Linux 实战技能 100 讲 ://time.geekbang.org/course/intro/193

学完即可轻松应对工作中 85% 以上的 Linux 使用场景;掌握基本的系统操作指令和常见服务搭建,还包含 Vim 的使用、Shell 编程等内容;

698695c7220b08edffdb46e68501ee4.jpg

工具地址

Linux命令大全(手册)//www.linuxcool.com/

真正好用的Linux命令在线查询手册

Linux 常用命令全拼//www.runoob.com/w3cnote/linux-command-full-fight.html

命令大多数简写,知道全拼了,有时候记得更深。比如:

  • pwd: print work directory 打印当前目录 显示出当前工作目录的绝对路径
  • ps: process status(进程状态,类似于windows的任务管理器)

linux-command//github.com/jaywcjlove/linux-command

当前Star 17.8k,Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。有超过 570 多个 Linux 命令。

以上就是全部的内容了,感谢大家的阅读。如果本篇内容中有任何错误,请批评指教,不胜感激 !

如果有收获,帮忙点个赞哇👇👇,感谢你的慷慨~

See you next good day~