Linux系统简介(下)

九、Linux任务计划crontab
crontab命令用于设置周期性被执行的命令,该命令从输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。
1)crontab使用
1.1. 通过下面命令来添加一个计划任务
$crontab -e

1.2. 第一次启动时会出现选择画面,这是让我们选择编辑的工具,选择第一个基本的vim就可以了

1.3. 进入添加计划页面后,在文档的最后一排输入下列命令
*/ 1 * * * * touch /home/shiyanlou/$(date + \%Y\%m\%d\%H\%M\%s)
#该任务为每分钟在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件
$crontab -l #查看添加了哪些任务
$pgrep cron #启动cron进程
$sudo tail -f /var/log/syslog #查看执行任务后在日志中的信息
#crontab -r #删除任务

2)crontab深入
每个用户使用crontab -e添加计划任务后,都会在/var/spool/cron/crontabs中添加一个该用户自己的任务文档,这样的目的是为了隔离

在/etc目录下,cron相关的目录有下面几个:
2.1. /etc/cron.daily 目录下的脚本会每天执行一次,在每天的6点25分时运行;
2.2. /etc/cron.hourly 目录下的脚本会每小时执行一次,在每小时的17分钟运行;
2.3. /etc/cron.monthly 目录下的脚本会每月执行一次,在每月1号的6点52分运行;
2.4. /etc/cron.weekly 目录下的脚本会每周执行一次,在每周第7天的6点47分运行;

$crontab -e 表示为当前用户添加计划任务
$sudo crontab -e 表示为root用户添加计划任务

$sudo service rsyslog start 启动日志
$sudo cron -f & 启动crontab

基本格式:
 *  *  *  *  * command
分 时 日 月 周 命令

第1列表示分钟1-59 每分钟用*或者*/1表示
第2列表示小时1-23 (0表示0点)
第3列表示日期1-31
第4列表示月份1-12
第5列表示星期0-6 (0表示星期天)

30 21 * * * 每晚的21:30
45 4 1,10,22 * * 每月1,10,22日的4:45
10 1 * * 6.0 每周六、日的1:10
0,30 (8-2) * * * 每天18:00至23:00之间每隔30分钟
0 23 * * 6 每周六的23:00
0 */1 * * * 每一小时
0 23-7/1 * * * 晚上11点到早上7点之间
0 11 4 * mon-wed 每月的4号与每周一到周五的11点
0 4 1 jan * 1月1日的4点

十、命令执行顺序控制与管道
1)顺序执行多条命令
简单的顺序执行可以使用;来完成:
$sudo apt-get update;sudo apt-get install some-tod;some-tool

2)有选择的执行命令
$which cowsay > /dev/null && cowsay -f head-in ohch~
shell中&&与||除了表示逻辑与和逻辑或外,还可以实现命令执行顺序的简单控制

3)管道
管道是一种通信机制,通常用于进程间的通信,也可以通过socket进行网络通信,它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)
3.1. 试用
先试用下管道,比如查看/etc目录下有哪些文件和目录
$ls -al /etc
$ls -al /etc | less #使用管道,将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行的看

3.2. cut命令,打印每一行的某一字段
打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段,分别表示用户名和其家目录
$cut /etc/passwd -d ':' -f 1,6
打印/etc/passwd文件中每一行的前N个字符
$cut /etc/passwd -c -5 #前5个(包含第5个)
$cut /etc/passwd -c 5- #前5个之后的(包含第5个)
$cut /etc/passwd -c 5 #第5个
$cut /etc/passwd -c 2-5 #2到5之间(包含第5个)

3.3. grep命令,在文本中或stdin中查找匹配字符串
grep[命令选项]...用于匹配的表达式[文件]...
$grep -rnI "shiyanlou" ~ #搜索/home/shiyanlou目录下包含"shiyanlou"的所有文本文件并显示在文本中的行号

-r 参数表示递归搜索子目录中的文件
-n 参数表示打印匹配项行号
-I 参数表示忽略二进制文件

3.4. wc命令
wc命令用于统计并输出一个文件中行、单词和字节的数目
$wc /etc/passwd
输出 28    35    1370  /etc/passwd
       行数 单词数  字节数

$wc -l /etc/passwd #只输出行数
$wc -w /etc/passwd #只输出单词数
$wc -c /etc/passwd #只输出字节数
$wc -m /etc/passwd #只输出字符数
$wc -L /ect/passwd #只输出最长字节数

4)sort排序命令
默认为字典排序 $cat /etc/passwd | sort
反转排序 $cat /etc/passwd | sort -r
按特定字段排序 $cat /etc/passwd | sort -t ',' -k 3

-t 参数用于指定字段的分隔符,这里是以‘:’作为分隔符
-k 字段号 参数用于指定对哪一个字段进行排序
这里/etc/passwd文件的第三个字段为数字,默认情况下是以字典序排序的
如果要按照数字排序就要加上-n参数

5)uniq去重命令
$history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq #过滤重复项
#输出重复过的行(重复的只输出一个)及重复次数
$history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc
#输出所有重复的行
$history | cut -c 8- | cut -d ' ' -f 1 | sort | unqi -D

十一、简单的文本处理
1)tr命令
可以用来删除一段文本信息中的某些文字,或者将其进行转换
tr [option]...SET1 [SET2]
-d 参数用于删除和set1匹配的字符
-s 参数用于去除set1指定的在输入文本中连续并重复的字符

#删除“hello shiyanlou”中所有的'o'、'l'、'h'
$echo 'hello shiyanlou' | tr -d 'olh'

#将'hello'中的ll,去重为一个l
$echo 'hello' | tr -s 'l'

#将输入文本,全部转换为大写或小写输出
$echo 'inptu some text here' | tr '[:lower:]' '[:upper:]'
注: '[:lower:]' '[:upper:]'也可简单写为'[a-z]''[A-Z]',反过来将大写变为小写也是可以的

2)col命令
可以将Tab换成对等数量的空格键
col [option]

-x 参数将Tab转换为空格
-h 参数将空格转换为Tab(默认选项)

#查看 /etc/protocols中的不可见字符,可以看到很多^I,这其实就是Tab转义成可见字符的符号
$cat -A /etc/protocols

#使用col -x 将 /etc/protocols中的Tab转换为空格,然后再使用cat查看,你发现^I不见了
$cat /etc/protocols | col -x | cat -A

3)join命令
join [option]...file1 file2
-t 参数指定分隔符,默认为空格
-i 参数忽略大小写的差异
-1 参数指明第一个文件要用哪个字段来对比,默认对比第一个字段
-2 参数指明第二个文件要用哪个字段来对比,默认对比第一个字段

#创建2个文件
$echo '1 hello' > file1
$echo '2 shiyanou' > file2
$join file1 file2

#将/etc/passwd与/etc/shadow两个文件合并,并指定以‘:’作为分隔符
$sudo join -t ':' /etc/passwd /etc/shadow

4)paste命令
paste命令与join命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab分隔
paste [option] file...

-d 参数指定合并分隔符,默认为Tab
-s 参数不合并到一列,每个文件为一行

$echo 'hello' > file1
$echo 'shiyanlou' > file2
$echo 'www.shiyanlou.com' > file3
$paste -d ':' file1 file2 file3
输出 hello:shiyanlou:www.shiyanlou.com

$paste -s file1 file2 file3
输出
hello
shiyanlou
www.shiyanlou.com

十二、数据流重定向
1)数据流重定向
$echo 'hello shiyanlou' > redirect
$echo 'www.shiyanlou.com' >> redirect
$cat redirect
输出
hello shiyanlou
www.shiyanlou.com

2)简单的重定向
文件描述符 设备文件 说明
    0       /etc/stdin       标准输入
    1       /etc/stdout      标准输出
    2          /etc/stderr 标准错误

3)标准错误重定向
4)使用tee命令同时重定向到多个文件
$echo 'hello shiyanlou' | tee hello
$cat hello

5)永久重定位
#先开启一个子shell
$zsh

#使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$exec 1 > somefile

#后面执行的命令的输出都将重定向到文件中,直到退出当前子shell,或取消exec的重定向
$ls
$exit
$cat somefile

输出
code
Desktop
somefile
somefilehell

6)创建输出文件描述符
7)关闭文件描述符
8)完全屏蔽命令的输出
在类UNIX系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用丢弃不需要的输出流,或作为用于输入流的空文件夹。

9)使用xargs分割参数列表
作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
$cut -d: -f 1 < /etc/passwd | sort | xargs echo
#命令用于将/etc/passwd文件按:分割取第一个字段排序后,使用echo命令生成一个列表。

十三、Linux下软件安装
1)apt-get
工具 说明
install 其后加上软件包名,用于安装一个软件包
update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表
upgrade 升级本地可更新的全部软件包
remove 移除已安装的包
autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包
purge(重点) 与remove相同,但它会完全移除软件包,包含其配置文件
clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/
autoclean 移除已安装的软件的旧版本软件包

apt-get常用的参数:
-y 自动回应是否安装软件包的选项
-s 模拟安排
-g 静默安装方式
-f 修复损坏的依赖关系
-d 只下载不安装
--reinstall 重新安装已经安装但可能存在问题的软件包
--install-suggests 同时安装apt给出的建议安装的软件包

2)软件搜索
知道了一个软件,想下载使用,需要确认软件仓库里有没有,就需要用到搜索功能
$sudo apt-cache search softname1 softname2 softname3...

3)使用dpkg从本地磁盘安装deb软件包

十四、Linux进程概念
1)top工具的使用
内容 解释
top 表示当前程序的名称
11:05:18 表示当前的系统的时间
up 8 days,17:12 表示该机器已经启动了多长时间
1 user 表示当前系统中只有一个用户
load average 分别对应1、5、15分钟内CPU的平均负载

#查看物理CPU的个数
$cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -c

#查看CPU的核心数
$cat  /proc/cpuinfo | grep 'physical id' | grep '0' | wc -c

2)kill命令

十五、Linux日志系统
1)常见的日志
一般存放在 /var/log 中

2)配置的日志
syslog是一个系统日志记录程序(较新的Ubuntu默认使用rsyslog)

猜你喜欢

转载自blog.csdn.net/zhaocen_1230/article/details/80748292