[Linux] Linux 学习笔记
帮助命令
- 在只记得部分关键字命令的时候,可以使用
man -k
来搜索 - 需要知道某个命令的简要说明,可以使用
whatis
,更详细的介绍可以使用info
命令 - 查看命令在哪个位置可以使用
which
命令 - 对于命令的具体参数及使用方法,需要用到强大的
man
使用命令
whatis
- 功能: 简要说明指定命令的作用
- 使用方式:
tangzixiang@dev-lyy-web4:~$ whatis -h
Usage: whatis [OPTION...] KEYWORD...
-d, --debug emit debugging messages
-v, --verbose print verbose warning messages
-r, --regex interpret each keyword as a regex
-w, --wildcard the keyword(s) contain wildcards
-l, --long do not trim output to terminal width
-C, --config-file=FILE use this user configuration file
-L, --locale=LOCALE define the locale for this search
-m, --systems=SYSTEM use manual pages from other systems
-M, --manpath=PATH set search path for manual pages to PATH
-s, --sections=LIST, --section=LIST
search only these sections (colon-separated)
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
- 举例:
tangzixiang@dev-lyy-web4:~$ whatis which
which (1) - locate a command
# 简要说明 whi 开头的命令
tangzixiang@dev-lyy-web4:~$ whatis -w "whi*"
which (1) - locate a command
whiptail (1) - display dialog boxes from shell scripts
# 使用正则解析 `whi*`
tangzixiang@dev-lyy-web4:~$ whatis -r "whi*"
git-whatchanged (1) - Show logs with difference each commit introduces
pam_pwhistory (8) - PAM module to remember last passwords
pam_wheel (8) - Only permit root access to members of group wheel
whatis (1) - display one-line manual page descriptions
whereis (1) - locate the binary, source, and manual page files for a command
which (1) - locate a command
whiptail (1) - display dialog boxes from shell scripts
who (1) - show who is logged on
whoami (1) - print effective userid
info
- 功能:更加详细的说明命令的作用
- 使用方式:
tangzixiang@dev-lyy-web4:~$ info -h
Usage: info [OPTION]... [MENU-ITEM...]
Read documentation in Info format.
Options:
-a, --all use all matching manuals.
-k, --apropos=STRING look up STRING in all indices of all manuals.
-d, --directory=DIR add DIR to INFOPATH.
--dribble=FILE remember user keystrokes in FILENAME.
-f, --file=MANUAL specify Info manual to visit.
-h, --help display this help and exit.
--index-search=STRING go to node pointed by index entry STRING.
-n, --node=NODENAME specify nodes in first visited Info file.
-o, --output=FILE output selected nodes to FILE.
-R, --raw-escapes output "raw" ANSI escapes (default).
--no-raw-escapes output escapes as literal text.
--restore=FILE read initial keystrokes from FILE.
-O, --show-options, --usage go to command-line options node.
--strict-node-location (for debugging) use Info file pointers as-is.
--subnodes recursively output menu items.
-v, --variable VAR=VALUE assign VALUE to Info variable VAR.
--vi-keys use vi-like and less-like key bindings.
--version display version information and exit.
-w, --where, --location print physical location of Info file.
-x, --debug=NUMBER set debugging level (-1 for all).
man
- 功能:查询命令的说明文档
- 使用方式:
tangzixiang@dev-lyy-web4:~$ man -h
Usage: man [OPTION...] [SECTION] PAGE...
-C, --config-file=FILE use this user configuration file
-d, --debug emit debugging messages
-D, --default reset all options to their default values
--warnings[=WARNINGS] enable warnings from groff
Main modes of operation:
-f, --whatis equivalent to whatis
-k, --apropos equivalent to apropos
-K, --global-apropos search for text in all pages
-l, --local-file interpret PAGE argument(s) as local filename(s)
-w, --where, --path, --location
print physical location of man page(s)
-W, --where-cat, --location-cat
print physical location of cat file(s)
-c, --catman used by catman to reformat out of date cat pages
-R, --recode=ENCODING output source page encoded in ENCODING
Finding manual pages:
-L, --locale=LOCALE define the locale for this particular man search
-m, --systems=SYSTEM use manual pages from other systems
-M, --manpath=PATH set search path for manual pages to PATH
-S, -s, --sections=LIST use colon separated section list
-e, --extension=EXTENSION limit search to extension type EXTENSION
-i, --ignore-case look for pages case-insensitively (default)
-I, --match-case look for pages case-sensitively
--regex show all pages matching regex
--wildcard show all pages matching wildcard
--names-only make --regex and --wildcard match page names only,
not descriptions
-a, --all find all matching manual pages
-u, --update force a cache consistency check
--no-subpages don't try subpages, e.g. 'man foo bar' => 'man
foo-bar'
Controlling formatted output:
-P, --pager=PAGER use program PAGER to display output
-r, --prompt=STRING provide the `less' pager with a prompt
-7, --ascii display ASCII translation of certain latin1 chars
-E, --encoding=ENCODING use selected output encoding
--no-hyphenation, --nh turn off hyphenation
--no-justification, --nj turn off justification
-p, --preprocessor=STRING STRING indicates which preprocessors to run:
e - [n]eqn, p - pic, t - tbl,
g - grap, r - refer, v - vgrind
-t, --troff use groff to format pages
-T, --troff-device[=DEVICE] use groff with selected device
-H, --html[=BROWSER] use www-browser or BROWSER to display HTML output
-X, --gxditview[=RESOLUTION] use groff and display through gxditview
(X11):
-X = -TX75, -X100 = -TX100, -X100-12 = -TX100-12
-Z, --ditroff use groff and force it to produce ditroff
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
which
- 功能:查询命令的存放路径
- 使用方式:
tangzixiang@dev-lyy-web5:~$ which make
/usr/bin/make
whereis
- 功能:查询命令的搜索路径,当系统中安装了同一个软件的多个版本,不确定使用那个版本时,这个命令就能派上用场
- 使用方式:
tangzixiang@dev-lyy-web5:~$ whereis python
python: /usr/bin/python3.5 /usr/bin/python /usr/bin/python3.5m /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python3.5 /usr/lib/python2.7 /etc/python3.5 /etc/python /etc/python2.7 /usr/local/lib/python3.5 /usr/local/lib/python2.7 /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz
文件及目录管理命令
- 文件查询是重点,可以使用
find
或则locate
来进行,find
的参数丰富,也非常强大 - 给文件创建别名或链接可以使用
ln
列出目录项
- 查看当前目录下文件个数
tangzixiang@dev-lyy-web5:~$ find ./ | wc -l
74
- 按时间排序,以列表的方式显示
tangzixiang@dev-lyy-web5:~$ ls -lrt --full-time -h
total 34M
drwxr-xr-x 5 tangzixiang tangzixiang 4.0K 2018-10-29 10:04:44.000000000 +0800 mawar_deploy
-rw-r--r-- 1 tangzixiang tangzixiang 12M 2018-11-29 10:25:53.000000000 +0800 mawar_deploy-v3.2.7-20181129.tar.gz
drwxr-xr-x 5 tangzixiang tangzixiang 4.0K 2019-02-19 19:09:50.240419974 +0800 test
-rw-rw-r-- 1 tangzixiang tangzixiang 62K 2019-02-20 16:21:31.528091951 +0800 output.txt
-rw-rw-r-- 1 tangzixiang tangzixiang 1.6M 2019-02-20 16:32:45.064693140 +0800 readelf_out.txt
-rwxr-xr-x 1 tangzixiang tangzixiang 20M 2019-02-21 14:52:29.000000000 +0800 mawar-linux-amd64
- 给每项文件前面加编号
tangzixiang@dev-lyy-web5:~$ ls -lrt -h |cat -n
1 total 34M
2 drwxr-xr-x 5 tangzixiang tangzixiang 4.0K Oct 29 10:04 mawar_deploy
3 -rw-r--r-- 1 tangzixiang tangzixiang 12M Nov 29 10:25 mawar_deploy-v3.2.7-20181129.tar.gz
4 drwxr-xr-x 5 tangzixiang tangzixiang 4.0K Feb 19 19:09 test
5 -rw-rw-r-- 1 tangzixiang tangzixiang 62K Feb 20 16:21 output.txt
6 -rw-rw-r-- 1 tangzixiang tangzixiang 1.6M Feb 20 16:32 readelf_out.txt
7 -rwxr-xr-x 1 tangzixiang tangzixiang 20M Feb 21 14:52 mawar-linux-amd64
查找目录及文件
find
是实时查找,如果需要更快的查找可以试下 locate
,locate
会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引数据库
- 搜寻文件或目录
tangzixiang@dev-lyy-web5:~$ find ./ -name "*.md"
./test/README.md
./test/._README.md
./mawar_deploy/README.md
./mawar_deploy/._README.md
tangzixiang@dev-lyy-web5:~$ find ./ -name "*.md" | xargs file
./test/README.md: UTF-8 Unicode text, with very long lines
./test/._README.md: AppleDouble encoded Macintosh file
./mawar_deploy/README.md: UTF-8 Unicode text, with very long lines
./mawar_deploy/._README.md: AppleDouble encoded Macintosh file
- 递归当前目录及子目录删除所有 txt 文件
tangzixiang@dev-lyy-web5:~$ ls
mawar_deploy readelf_out.txt test
tangzixiang@dev-lyy-web5:~$ find ./ -name "*.txt" -exec rm {} \;
tangzixiang@dev-lyy-web5:~$ ls
mawar_deploy test
- 寻找包含有
superv
的路径
tangzixiang@dev-lyy-web5:~$ locate supervisord
/etc/supervisor/supervisord.conf
/usr/local/bin/echo_supervisord_conf
/usr/local/bin/supervisord
- 更新
locate
的索引数据库
tangzixiang@dev-lyy-web5:~$ sudo updatedb
查看文件内容
- 显示文件内容加行号
tangzixiang@dev-lyy-web5:~$ cat -n test.txt
- 分页查看列表项
tangzixiang@dev-lyy-web5:~$ ls -al |more
tangzixiang@dev-lyy-web5:~$ ls -al |less
- 查看文件前 10 行
tangzixiang@dev-lyy-web5:~$head 10 test.txt
- 查看文件最后 10 行
tangzixiang@dev-lyy-web5:~$tail 10 test.txt
- 查看文件的区别
tangzixiang@dev-lyy-web5:~/test$ date >> b.txt
tangzixiang@dev-lyy-web5:~$diff a.txt b.txt
230a231
> Thu Feb 21 19:51:25 CST 2019
- 动态展示文件最新内容
tangzixiang@dev-lyy-web5:~$ tail -f /data/log/supervisor/mawar/supervisor_stdout.log
[REQUEST] 0c1f57b5-fffa-498c-9420-e318dce68a4a
tangzixiang@dev-lyy-web5:~$ tailf /data/log/supervisor/mawar/supervisor_stdout.log
[REQUEST] 0c1f57b5-fffa-498c-9420-e318dce68a4a
查找文件内容
tangzixiang@dev-lyy-web5:~$ egrep logCamerasChangeGroupMsg /data/log/supervisor_stdout.log -C5
[REQUEST] 40ab5634-366d-41d9-9a03-66d8df986898
[GIN] 2019/02/20 - 02:15:56 | 200 | 5.262809ms | 192.168.100.238 | POST
[logCamerasChangeGroupMsg] log api request error: The dotted field 'config.inte_face_min_size' in 'properties.last_data.config.inte_face_min_size' is not valid for storage.
[REQUEST] 6cdebd11-aebb-4756-84c6-26347be152a0
文件与目录权限修改
- 改变文件的拥有者
chown
- 改变文件读、写、执行等权限
chmod
- 递归子目录修改
chown -R user dir/
- 增加脚本可执行权限
chmod a+x myscript
给文件增加别名
创建符号链接/硬链接
ln cc ccAgain
硬链接;删除源仍然能找到,cc 是源ln -s cc ccTo
软链接;符号链接(软链接) ,删除源另一个无法使用,cc 是源
管道和重定向
- 批处理命令连接执行,使用
|
- 串联使用
;
- 前面成功则执行后面一条,否则不执行
&&
- 前面失败则后面执行
||
- 清空文件
:> a.txt
tangzixiang@dev-lyy-web5:~$ ls ./ && echo suss! || echo failed
mawar_deploy mawar_deploy-v3.2.7-20181129.tar.gz mawar-linux-amd64 test
suss!
tangzixiang@dev-lyy-web5:~$ if true ;then echo success;else echo failed;fi
success
tangzixiang@dev-lyy-web5:~$ if false ;then echo success;else echo failed;fi
failed
Bash 快捷键 输入或删除
CTRL-U
删除全行CTRL-W
删除当前光标到前面一个空格的内容CTRL-H
删除光标前面的字符CTRL-R
刷屏(iterm2)
综合应用
tangzixiang@dev-lyy-web4:~$ cat -b /var/www/mawar.yaml |egrep app_id
34 app_id: "devt"
103 app_id: "mawa"
tangzixiang@dev-lyy-web4:~$ cat -b /var/www/mawar.yaml |egrep app_id | egrep -v devt
103 app_id: "mawa"
tangzixiang@dev-lyy-web4:~$ cat -b /var/www/mawar.yaml |egrep app_id | egrep -v devt |wc -l
1
文本处理
基础查找
- 查找 text 文件和 md 文件
tangzixiang@dev-lyy-web4:~$ find . -name "*.md" -o -name "*.txt"
./mawar_deploy/README.md
./mawar_deploy/._README.md
./a.txt
- 正则方式查找
tangzixiang@dev-lyy-web4:~$ find . -regex ".*\(\.txt\|\.md\)$"
./a.txt
./mawar_deploy/README.md
./mawar_deploy/._README.md
- 取反,否定参数
!
tangzixiang@dev-lyy-web4:~$ find . ! -regex ".*\(\.txt\|\.md\)$"
.
./.lesshst
./.bashrc
./.cache
- 指定深度,查找指定类型为文件的
tangzixiang@dev-lyy-web4:~$ find . -maxdepth 1 -type f
./.lesshst
./.bashrc
./a.txt
定制搜索
-
d
代表目录f
代表文件l
代码链接 -
find
支持的文件类型检索可以区分普通文件或是符号链接文件,目录等,但无法区分是二进制文件还是普通文本文件。
- 查找指定类型
tangzixiang@dev-lyy-web4:~$ find . -type d
.
./.cache
./mawar_deploy
./mawar_deploy/bin
file
命令可以检查文件的具体类型 二静止或则文本文件等
tangzixiang@dev-lyy-web4:~$ file .profile
.profile: ASCII text
tangzixiang@dev-lyy-web4:~$ file mawar-linux-amd64
mawar-linux-amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
- 查询空文件
tangzixiang@dev-lyy-web4:~$ find . -empty
./.cache/motd.legal-displayed
./a.txt
按时间搜索
- atime 访问时间单位是天
- amin 访问时间单位是分钟
- mtime 修改时间(内容被修改)
- ctime 变化时间(元数据或权限变化)
- 最近 7 天内被访问过的文件
tangzixiang@dev-lyy-web4:~$ find -atime -7 -type f
./.lesshst
./.bashrc
./.cache/motd.legal-displayed
./a.txt
- 最近第 7 天被访问过的文件
tangzixiang@dev-lyy-web4:~$ find -atime -7 -type f
- 查询 7天前被访问过的文件
tangzixiang@dev-lyy-web4:~$ find -atime +7 -type f
./.viminfo
按大小搜索
-size n[cwbkMG]
File uses n units of space, rounding up. The following suffixes can be used:
`b' for 512-byte blocks (this is the default if no suffix is used)
`c' for bytes
`w' for two-byte words
`k' for Kilobytes (units of 1024 bytes)
`M' for Megabytes (units of 1048576 bytes)
`G' for Gigabytes (units of 1073741824 bytes)
- 寻找大于 18M 的文件
tangzixiang@dev-lyy-web4:~$ find . -type f -size +18M
./mawar-linux-amd64
按权限查找
- 查找具有可执行权限的文件
tangzixiang@dev-lyy-web4:~$ find . -perm 644
./.bashrc
./mawar_deploy-v3.2.7-20181129.tar.gz
按用户查找
- 查找用户 x 所拥有的文件
tangzixiang@dev-lyy-web4:~$ find . -type f -user tangzixiang
./.lesshst
./.bashrc
查找完成后续动作
- 删除当前目录下的所有 swp 文件
tangzixiang@dev-lyy-web4:~$ find . -type f -name "*.swp" -delete
tangzixiang@dev-lyy-web4:~$ find . -type f -name "*.swp" | xargs rm
- 变更所有权为 weber
tangzixiang@dev-lyy-web4:~$ find . -type f -user root -exec chown weber {} \;
{}
是一个特殊字符串,对于每一个匹配的文件,{}
会被替换成相应的文件名
- 将找到的文件拷贝到另一个目录
tangzixiang@dev-lyy-web4:~$ find . -type f -mtime +10 -name "*.txt" -exec cp {} newdir \;
- 结合多个命令
tangzixiang@dev-lyy-web4:~$ find . -type f -exec ./commands.sh {} \;
- 如果需要后续执行多个命令,可以将多个命令写成一个脚本,然后
-exec
调用时执行脚本即可
grep 文本搜索
grep match_patten file
默认访问匹配行
常用参数
-
-o
只输出匹配的文本行,-v
只输出没有匹配的文本行 -
-c
统计文件中包含文本的次数 -
-n
搜索并打印行号 -
-i
搜索时忽略大小写 -
-l
只打印搜索到的文件名,适用于目录搜索-R
时使用
- 在多级目录中对文本进行搜索
tangzixiang@dev-lyy-web4:~$ sudo grep pack -R -n .
./mawar_deploy/Makefile:55:pack
- 符合多条件之一
tangzixiang@dev-lyy-web4:~$ grep -e "pack" -e "PHONY" -R ./
./mawar_deploy/Makefile:pack:
./mawar_deploy/Makefile:.PHONY: pack
- 将
sql
中的where
查询出来
tangzixiang@dev-lyy-web4:~$ cat xxx.Log | tr a-z A-Z |grep "FROM" | grep "WHERE"
awk