[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

列出目录项

  1. 查看当前目录下文件个数
tangzixiang@dev-lyy-web5:~$ find ./ | wc -l
74
  1. 按时间排序,以列表的方式显示
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
  1. 给每项文件前面加编号
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 是实时查找,如果需要更快的查找可以试下 locatelocate 会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引数据库

  1. 搜寻文件或目录
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
  1. 递归当前目录及子目录删除所有 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
  1. 寻找包含有 superv 的路径
tangzixiang@dev-lyy-web5:~$ locate supervisord
/etc/supervisor/supervisord.conf
/usr/local/bin/echo_supervisord_conf
/usr/local/bin/supervisord
  1. 更新 locate 的索引数据库
tangzixiang@dev-lyy-web5:~$ sudo updatedb

查看文件内容

  1. 显示文件内容加行号
tangzixiang@dev-lyy-web5:~$ cat -n test.txt
  1. 分页查看列表项
tangzixiang@dev-lyy-web5:~$ ls -al |more
tangzixiang@dev-lyy-web5:~$ ls -al |less
  1. 查看文件前 10 行
tangzixiang@dev-lyy-web5:~$head 10 test.txt
  1. 查看文件最后 10 行
tangzixiang@dev-lyy-web5:~$tail 10 test.txt
  1. 查看文件的区别
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
  1. 动态展示文件最新内容
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

文本处理

基础查找

  1. 查找 text 文件和 md 文件
tangzixiang@dev-lyy-web4:~$ find . -name "*.md" -o -name "*.txt"
./mawar_deploy/README.md
./mawar_deploy/._README.md
./a.txt
  1. 正则方式查找
tangzixiang@dev-lyy-web4:~$ find . -regex ".*\(\.txt\|\.md\)$"
./a.txt
./mawar_deploy/README.md
./mawar_deploy/._README.md
  1. 取反,否定参数 !
tangzixiang@dev-lyy-web4:~$ find . ! -regex ".*\(\.txt\|\.md\)$"
.
./.lesshst
./.bashrc
./.cache
  1. 指定深度,查找指定类型为文件的
tangzixiang@dev-lyy-web4:~$ find . -maxdepth 1 -type f
./.lesshst
./.bashrc
./a.txt

定制搜索

  • d 代表目录 f 代表文件 l 代码链接

  • find 支持的文件类型检索可以区分普通文件或是符号链接文件,目录等,但无法区分是二进制文件还是普通文本文件。

  1. 查找指定类型
tangzixiang@dev-lyy-web4:~$ find . -type d
.
./.cache
./mawar_deploy
./mawar_deploy/bin
  1. 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
  1. 查询空文件
tangzixiang@dev-lyy-web4:~$ find . -empty
./.cache/motd.legal-displayed
./a.txt

按时间搜索

  • atime 访问时间单位是天
  • amin 访问时间单位是分钟
  • mtime 修改时间(内容被修改)
  • ctime 变化时间(元数据或权限变化)
  1. 最近 7 天内被访问过的文件
tangzixiang@dev-lyy-web4:~$ find -atime -7 -type f
./.lesshst
./.bashrc
./.cache/motd.legal-displayed
./a.txt
  1. 最近第 7 天被访问过的文件
tangzixiang@dev-lyy-web4:~$ find -atime -7 -type f
  1. 查询 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)
  1. 寻找大于 18M 的文件
tangzixiang@dev-lyy-web4:~$ find . -type f -size +18M
./mawar-linux-amd64

按权限查找

  1. 查找具有可执行权限的文件
tangzixiang@dev-lyy-web4:~$ find . -perm 644
./.bashrc
./mawar_deploy-v3.2.7-20181129.tar.gz

按用户查找

  1. 查找用户 x 所拥有的文件
tangzixiang@dev-lyy-web4:~$ find . -type f -user tangzixiang
./.lesshst
./.bashrc

查找完成后续动作

  1. 删除当前目录下的所有 swp 文件
tangzixiang@dev-lyy-web4:~$ find . -type f -name "*.swp" -delete
tangzixiang@dev-lyy-web4:~$ find . -type f -name "*.swp" | xargs rm
  1. 变更所有权为 weber
tangzixiang@dev-lyy-web4:~$ find . -type f -user root -exec chown weber {} \;
  • {} 是一个特殊字符串,对于每一个匹配的文件,{} 会被替换成相应的文件名
  1. 将找到的文件拷贝到另一个目录
tangzixiang@dev-lyy-web4:~$ find . -type f -mtime +10 -name "*.txt" -exec cp {} newdir \;
  1. 结合多个命令
tangzixiang@dev-lyy-web4:~$ find . -type f -exec ./commands.sh {} \;
  • 如果需要后续执行多个命令,可以将多个命令写成一个脚本,然后 -exec 调用时执行脚本即可

grep 文本搜索

grep match_patten file 默认访问匹配行

常用参数

  • -o 只输出匹配的文本行,-v 只输出没有匹配的文本行

  • -c 统计文件中包含文本的次数

  • -n 搜索并打印行号

  • -i 搜索时忽略大小写

  • -l 只打印搜索到的文件名,适用于目录搜索 -R 时使用

  1. 在多级目录中对文本进行搜索
tangzixiang@dev-lyy-web4:~$ sudo grep pack  -R -n .
./mawar_deploy/Makefile:55:pack
  1. 符合多条件之一
tangzixiang@dev-lyy-web4:~$ grep -e "pack" -e "PHONY" -R ./
./mawar_deploy/Makefile:pack:
./mawar_deploy/Makefile:.PHONY: pack
  1. sql 中的 where 查询出来
tangzixiang@dev-lyy-web4:~$ cat xxx.Log | tr a-z A-Z |grep "FROM" | grep "WHERE"

awk



tangzixiang