linux的帮助命令

help man info 命令的使用

 

内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在 bash 源码的 builtins 里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin 等等。比如:ls、vi 等。

lizejun@ubuntu:~$ type exit
exit is a shell builtin
lizejun@ubuntu:~$ type vim
vim is /usr/bin/vim
lizejun@ubuntu:~$

lizejun@ubuntu:~$ help ls
bash: help: no help topics match `ls'. Try `help help' or `man -k ls' or `info ls'.

 

help 命令仅仅用于shell内建命令

可以使用--help参数获取命令帮助

izejun@ubuntu:~$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author

 

man命令没有内建命令和外部命令的区分。

章节数说明
1 Standard commands (标准命令)
2 System calls (系统调用)
3 Library functions (库函数)
4 Special devices (设备说明)
5 File formats (文件格式)
6 Games and toys (游戏和娱乐)
7 Miscellaneous (杂项)
8 Administrative Commands (管理员命令)
9

其他(Linux 特定的), 用来存放内核例行程序的文档。

 

 

info命令

lizejun@ubuntu:~$ sudo apt -y install info

lizejun@ubuntu:~$ info ls

 

得到的信息是不是比 man 还要多了,info 来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。所以得到的信息当然更多

man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的  GNU  工具信息。若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。

 

计划任务crontab

 crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。

 通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

 

lizejun@ubuntu:~$ sudo apt -y install rsyslog
[sudo] password for lizejun:
Reading package lists... Done
Building dependency tree
Reading state information... Done
rsyslog is already the newest version (8.32.0-1ubuntu5).
0 upgraded, 0 newly installed, 0 to remove and 90 not upgraded.
lizejun@ubuntu:~$ sudo service rsyslog start
lizejun@ubuntu:~$ sudo service rsyslog status

 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它

sudo cron -f &

ps -ef|grep cron 

izejun@ubuntu:~$ crontab -e
no crontab for lizejun - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /bin/ed

Choose 1-3 [1]: 2

 

lizejun@ubuntu:~$ crontab -e
no crontab for lizejun - using an empty one

 


crontab: installing new crontab
lizejun@ubuntu:~$ crontab -l

*/1 * * * * touch /home/lizejun/$(date +\%Y\%m\%d\%H\%M\%S)

\% 符号转义

lizejun@ubuntu:~$ ps -ef|grep cron
root 658 1 0 Feb02 ? 00:00:00 /usr/sbin/cron -f
lizejun 26733 3772 0 05:56 pts/0 00:00:00 grep --color=auto cron
lizejun@ubuntu:~$ pgrep cron
658

 

查看日志

lizejun@ubuntu:~$ tail -f /var/log/syslog
Feb 3 05:51:43 ubuntu crontab[26568]: (lizejun) BEGIN EDIT (lizejun)
Feb 3 05:52:29 ubuntu fcitx-ui-sogou-qimpanel.desktop[3440]: libpng warning: iCCP: known incorrect sRGB profile
Feb 3 05:52:40 ubuntu gnome-terminal-[3766]: g_object_set_data: assertion 'G_IS_OBJECT (object)' failed
Feb 3 05:53:36 ubuntu crontab[26568]: (lizejun) REPLACE (lizejun)
Feb 3 05:53:36 ubuntu crontab[26568]: (lizejun) END EDIT (lizejun)
Feb 3 05:53:40 ubuntu crontab[26672]: (lizejun) LIST (lizejun)
Feb 3 05:54:01 ubuntu CRON[26682]: (lizejun) CMD (touch /home/lizejun/$(date +%Y%m%d%H%M%S))
Feb 3 05:55:01 ubuntu CRON[26709]: (lizejun) CMD (touch /home/lizejun/$(date +%Y%m%d%H%M%S))
Feb 3 05:56:01 ubuntu CRON[26725]: (lizejun) CMD (touch /home/lizejun/$(date +%Y%m%d%H%M%S))
Feb 3 05:57:01 ubuntu CRON[26744]: (lizejun) CMD (touch /home/lizejun/$(date +%Y%m%d%H%M%S))

 删除任务

crontab -r 

lizejun@ubuntu:~$ crontab -r
lizejun@ubuntu:~$ crontab -l
no crontab for lizejun
lizejun@ubuntu:~$ cronta

 

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

 

如果是系统级别的定时任务,需要 root 权限执行的任务应该怎么处理?

 

 

只需要使用 sudo 编辑 /etc/crontab 文件就可以。

cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。

 

lizejun@ubuntu:~$ ls /etc/|grep cron
anacrontab
cron.d
cron.daily
cron.hourly
cron.monthly
crontab
cron.weekly

 

每个目录的作用:

  1. /etc/cron.daily,目录下的脚本会每天执行一次,在每天的 6 点 25 分时运行;
  2. /etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的 17 分钟时运行;
  3. /etc/cron.monthly,目录下的脚本会每月执行一次,在每月 1 号的 6 点 52 分时运行;
  4. /etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的 6 点 47 分时运行;

 

备份日志

 

  1. 用户添加计划任务
  2. 每天凌晨 3 点的时候定时备份 alternatives.log 到 /home/lizejun/tmp/ 目录
  3. 命名格式为 年-月-日,比如今天是 2017 年 4 月 1 日,那么文件名为 2017-04-01

 

mkdir tmp 

*/1 * * * * cp -r /var/log/syslog.1 ~/tmp/$(date +\%Y-\%m-\%d-\%H-\%M-\%S)

* 3 * * * cp -r /var/log/syslog.1 ~/tmp/$(date +\%Y-\%m-\%d-\%H-\%M-\%S)

 

 

命令执行顺序控制与管道

cut , grep wc , sort 

 

cut 

查看文件,以: 为分隔符,获取第一,第5字段

cut /etc/passwd -d ":" -f 1,5

cut /etc/passwd -d ":" -f 1,5,6

-c 

获取每一行的前几个字符

cut /etc/passwd -c -10

获取每一行前5个字符之后的字符,包括第5个

cut /etc/passwd  -c 5-

获取每一行第5个字符

cut /etc/passwd -c 5

获取每一行2-5之间的字符,包括第5个

 cut /etc/passwd  -c 2-5 

 

grep

lizejun@ubuntu:~$ export |grep "lizejun"
declare -x HOME="/home/lizejun"
declare -x LOGNAME="lizejun"
declare -x PATH="/home/lizejun/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
declare -x PWD="/home/lizejun"
declare -x USER="lizejun"
declare -x USERNAME="lizejun"
declare -x VIRTUALENVWRAPPER_HOOK_DIR="/home/lizejun/Desktop/venv"
declare -x WORKON_HOME="/home/lizejun/Desktop/venv"

 

wc 用于统计并输出一个文件中行,单词和字节

lizejun@ubuntu:~$ wc -l /etc/passwd 行
49 /etc/passwd
lizejun@ubuntu:~$ wc -w /etc/passwd 单词
85 /etc/passwd
lizejun@ubuntu:~$ wc -c /etc/passwd 字节
2924 /etc/passwd
lizejun@ubuntu:~$ wc -m /etc/passwd 字符
2918 /etc/passwd
lizejun@ubuntu:~$ wc -L /etc/passwd 最长行的字节数
98 /etc/passwd

 

lizejun@ubuntu:~$ ls -dl /etc/*/|wc -l 统计一个文件夹下有多少文件
133

 

sort排序

cat /etc/passwd|sort 默认排序,字典
1227 cat /etc/passwd|sort -r 反转排序
1228 cat /etc/passwd|sort -t":" -k 3 按字段排序
1229 cat /etc/passwd|sort -t":" -k 3 -n 按照数字排序

 

uniq去重

 

history|cut -c 8- |cut -d ' ' -f 1 |sort|uniq 

history|cut -c 8- |cut -d ' ' -f 1 |sort -u

获取8个字符以后的字符串

以空格为分隔符取第一个字段

排序

去重

history|cut -c 8- |cut -d ' ' -f 1 |sort |uniq -dc

history|cut -c 8- |cut -d ' ' -f 1 |sort |uniq -D

输出重复行以及对应的次数

简单的文本处理

 

tr col join paste 

 

tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换

 

-d 删除和set1匹配的字符

-s去除set1指定的在输入文本中连续并重复的字符

 

lizejun@ubuntu:~$ echo "hello world shiyanlou"|tr -d "olu" 去除所有的o l u 字符
he wrd shiyan
lizejun@ubuntu:~$ echo "hello world shiyanlou"|tr -s 'l' 去除一个l
helo world shiyanlou
lizejun@ubuntu:~$ echo "hello world shiyanlou"|tr '[:lower:]' '[:upper:]' 把所有的字符大写
HELLO WORLD SHIYANLOU

 

col 命令可以将Tab换成对等数量的空格键,或反转这个操作

-x 将tab转为空格

-h 将空格转为tab

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

cat /etc/protocols |col -x |cat -A

学过数据库的用户对这个应该不会陌生,这个命令就是用于将两个文件中包含相同内容的那一行合并在一起。

 

-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1 指明第一个文件要用哪个字段来对比,默认对比第一个字段
-2

指明第二个文件要用哪个字段来对比,默认对比第一个字段