大家好,又见面了,我是全栈君。
阿飞云:一枚拧螺丝的Java程序员,分享技术和生活,大千世界,各有精彩。
开始上班了,新一年的奋斗的之路启程了,要继续【奔赴山海,奔赴热爱】。
汪国真在《热爱生命》这首诗中写到:既然选择了远方,便只顾风雨兼程。技术上还是持续精进和学习,远方虽远,要迈开脚步,一步步抵达远方的目标。
这次整理了常用的Linux的命令,这里面很多命令都是高频使用。作为程序员,离不开和Linux服务器打交道,部署项目,排查问题等。正确掌握这些命令后,好处多多。比如能极大的提高工作的效率,遇到线上出现问题需要排查,能更快的通过命令定位问题,找到原因,解决问题,获得领导和同事的认可和赞赏,岂不美哉!
温馨提示:本文内容较多,建议收藏食用!(收藏后一定要看啊,不要放到收藏夹吃土)
一、工欲善其事,必先利其器
基本功练习
0、登录服务器SSH命令
简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最基本的用法:
常用格式:ssh [-l login_name] [-p port] [user@]hostname
例子:
代码语言:javascript复制ssh 192.168.1.110
ssh -l root 192.168.0.11
# 比较常用
ssh root@192.168.0.11
图解:
1、传输文件scp命令
scp命令用于Linux服务器之间复制文件和目录。scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
最基本的用法:
常用格式:scp [可选参数] file_source remote_username@remote_ip:remote_folder
例子:
代码语言:javascript复制scp /home/test.log root@192.168.1.110:/home/happy/
注意: 使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。
2、查看系统状态 top、free、df
top命令用于实时显示 process 的动态。可以配合用来查询vm的一些问题!具体参数不做介绍。
代码语言:javascript复制# 表示更新两次后终止更新显示
top -n 2
#表示更新周期为3秒
top -d 3
# 显示进程号为2586的进程信息,CPU、内存占用率等
top -p 2586
更新显示二次的结果输入到名称为 top.log 的档案里
top -n 2 -b < top.log
free命令用于显示内存状态。
代码语言:javascript复制# 显示内存使用信息 , -h 选项为根据大小适当显示(人类可以读懂的方式)
free -h
# 每10s 执行一次命令
free -hs 10
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
代码语言:javascript复制# 查看磁盘信息, -h 选项为根据大小适当显示
df -h
du会显示指定的目录或文件所占用的磁盘空间。用于查看当前目录的总大小。
代码语言:javascript复制 # 通过排序的方式显示前十条
[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。
代码语言:javascript复制# 创建一个文件
[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
代码语言:javascript复制[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
代码语言:javascript复制[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。
一般情况,赋值 命令
代码语言:javascript复制chmod 755 file
此外chmod也可以用字母来表示权限,这里就不进行说明。
5、查找文件find命令
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
代码语言:javascript复制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指令会把含有范本样式的那一列显示出来。
代码语言:javascript复制# 显示所有以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系统的网络情况。
代码语言:javascript复制# 查看端口1212的使用情况
netstat -tln | grep 1212
查看端口属于哪个程序
lsof -i :1212
8、查看文件内容 tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
真实使用:
代码语言:javascript复制# 查看日志
tail -f xxxx.out
# 查看 100行日志
tail -n100 xxxx.out
# 查看带有'test'的日志
tail -f | grep 'test' 这样可以只显示
9、杀死进程kill命令
kill命令用于删除执行中的程序或工作。查找tomcat服务,并彻底杀死进程。
代码语言:javascript复制# 查找tomcat服务器
ps aux | grep tomcat
root 25689
# 杀掉进程 -9 强制杀,一枪爆头
kill -9 25689
# 杀掉进程 -15 温柔杀,安乐死
kill -15 25689
10、切换目录 cd | 显示当前路径 pwd
代码语言:javascript复制# 登录酷炫的服务器
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指令可立刻得知您目前所在的工作目录的绝对路径名称。
代码语言:javascript复制# 进入 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文本编辑器学习:https://blog.csdn.net/u010648555/article/details/73719039
代码语言:javascript复制# 打开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
代码语言:javascript复制 --vim 打开(创建)文件
默认进入的命令模式,输入I 转换到输入模式,
到底行模式--esc :wq
13、显示文件内容 cat | more | less
cat 命令
用于连接文件并打印到标准输出设备上。
more 命令
类似 cat
,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)。
less
与 more
类似,但使用 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 | 当前记录 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IifXVwUo-1644368977614)(https://g.yuque.com/gr/latex?1#card=math&code=1&id=kj7Rw)]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 %-10sn",$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构建自己的魔法清单备忘录,下面是安装和使用的过程:
代码语言:javascript复制# 1、安装wget
[root@localhost ~]# yum -y install wget
...安装过程日志省略
# 2、 运行命令即可安装pip:
[root@localhost ~]# wget https://bootstrap.pypa.io/get-pip.py
...安装过程日志省略
[root@localhost ~]# python get-pip.py
...安装过程日志省略
# 3、使用 pip方式安装 cheat :https://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地址:https://github.com/cheat/cheat
1、文档查询工具-cheat.sh
如果我们想要一个魔法工具,一个理想的备忘单,来想象一下。它应该是什么样的?应该具备哪些功能?
- 简洁 – 它应该只包含你需要的东西,而不是其他东西。
- 快 – 应该可以立即使用它。全面 – 它应包含每个可能问题的答案。
- 通用 – 它应随时随地可用,无需任何准备。不引人注目 – 它不应该分散你的主要任务。
- 辅导 – 它应该帮助你学习这门课程。
- 不显眼 – 应该可以完全不被注意地使用它。
下面介绍的 cheat.sh 就是这样一款功能强大的魔法工具,一起看它的特点吧!
特点:
- 有一个简单的卷曲/浏览器界面。
- 涵盖55种编程语言,多种DBMS以及1000多种最重要的UNIX / Linux命令。
- 提供对世界上最好的社区驱动的备忘单存储库的访问,与StackOverflow相同。
- 随处可用,无需安装。
- 超快,通常在100毫秒内返回答案。
- 有一个方便的命令行客户端,
cht.sh
这是非常有利和有帮助的,虽然不是强制性的。 - 可以直接在代码编辑器中使用,无需打开浏览器而不切换心理上下文。
- 支持一种特殊的隐身模式,可以完全无形地使用,无需触摸按键和发出声音。
1、在线网页版
cheat.sh :https://cheat.sh/,一个命令行的文档查询网站,如图
举例,在网页上查询grep魔法的使用:
2、服务器客户端
要从命令行获取UNIX / Linux命令的备忘单,请使用curl或在查询中指定命令名称的任何其他HTTP / HTTPS客户端查询服务:
代码语言:javascript复制curl cheat.sh/tar
curl cht.sh/curl
curl https://cheat.sh/rsync
curl https://cht.sh/tr
如上面所示,可以使用HTTPS和HTTP来访问服务,以及long(cheat.sh)和short(cht.sh)服务名称!
如:
代码语言:javascript复制# 查看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地址: https://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)魔法,也就是类似使物体消失:消隐无踪咒。这个魔法如果使用不当那就是 一个黑魔法(如阿瓦达索命)。
正常使用:
代码语言:javascript复制[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 将目录及以下之档案亦逐一删除。
使用不当,可能就要跑路喽!:
代码语言:javascript复制# 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 * 了咋办,跑路吗?http://t.cn/Exyx5f5
2、查找文件
当你忘记文件/目录具体在哪个地方的时候,请使用find魔法。
代码语言:javascript复制# 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为例子。
代码语言:javascript复制# 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 "sgreps" | 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、日志查看
在工作中,经常会遇到线上项目出现问题,需要排查! 然而在茫茫的日志文件中,如何快速的找到报错的地方的日志,以及快速定位和解决问题,这是一种能力,这种能力是可以在平时工作中锻炼出来的。
代码语言:javascript复制# 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 命令的参数:
代码语言:javascript复制-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,
则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
注: linux crontab 命令,最小的执行时间是一分钟。
代码语言:javascript复制# 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命令 的时程表的格式如下
代码语言:javascript复制# 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:https://www.imooc.com/learn/175
以CentOS操作系统为例,为你带来Linux的简介、系统安装和常用命令等内容。让您在轻松的氛围中感受到Linux之美。
2、Linux 达人养成计划 II:https://www.imooc.com/learn/111
介绍Linux系统下操作VI编辑器、创建文本文件、VI的三种操作模式、磁盘分区与格式化、用户及用户组权限的相关操作与管理等,让童鞋们对Linux系统有进一步的理解,对Linux服务器的维护操作更加得心应手。
如果有一定的Linux使用经验或者已经在工作的伙伴,那推荐极客时间的这门收费课程: Linux 实战技能 100 讲 :https://time.geekbang.org/course/intro/193
学完即可轻松应对工作中 85% 以上的 Linux 使用场景;掌握基本的系统操作指令和常见服务搭建,还包含 Vim 的使用、Shell 编程等内容;
![698695c7220b08edffdb46e68501ee4.jpg](https://img-blog.csdnimg.cn/img_convert/2dcb18fcc1b4dd2aee720e8f9f3610da.png#clientId=u7f2cd3d4-7e80-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=329&id=P3MM4&margin=[object Object]&name=698695c7220b08edffdb46e68501ee4.jpg&originHeight=1635&originWidth=1080&originalType=binary&ratio=1&rotation=0&showTitle=false&size=398342&status=done&style=none&taskId=ud78993ca-ded1-4bdb-9b2d-86e18c3a317&title=&width=217)
工具地址
Linux命令大全(手册) : https://www.linuxcool.com/
真正好用的Linux命令在线查询手册
Linux 常用命令全拼:https://www.runoob.com/w3cnote/linux-command-full-fight.html
命令大多数简写,知道全拼了,有时候记得更深。比如:
- pwd: print work directory 打印当前目录 显示出当前工作目录的绝对路径
- ps: process status(进程状态,类似于windows的任务管理器)
linux-command: https://github.com/jaywcjlove/linux-command
当前Star 17.8k,Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。有超过 570 多个 Linux 命令。
以上就是全部的内容了,感谢大家的阅读。如果本篇内容中有任何错误,请批评指教,不胜感激 !
See you next good day~
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120950.html原文链接:https://javaforall.cn