《鸟哥的Linux私房菜 基础篇》中

vim程序编辑器

  • 三种模式:一般指令模式/编辑模式/指令命令模式
  • 一般指令模式,简称一般模式,是默认模式,输入Esc即可进入该模式,可进行光标移动、删除、复制、黏贴等操作
  • 编辑模式,输入[i|I|o|O|a|A|r|R]进入,可进行编辑
  • 指令命令模式,输入[😐/|?]进入
  • {n}hjkl←↓↑→ 光标上下左右移动,前面加上数字表示移动的次数
  • [ctrl]+[e] 向下滚屏
  • [ctrl]+[y] 向上滚屏
  • [ctrl]+[f] 向下翻页
  • [ctrl]+[b] 向上翻页
  • [ctrl]+[d] 向下翻半页
  • [ctrl]+[u] 向上翻半页
  • [+] 光标移动到非空格符的下一列
  • [-] 光标移动到非空格符的上一列
  • n 光标向后移动n个字符距离
  • [0|Home] 光标移动到当前行第一列
  • [$|End] 光标移动到当前行最后一列
  • H 光标移动到当前屏幕的最上方那一行的第一个字符
  • M 光标移动到当前屏幕的中央那一行的第一个字符
  • L 光标移动到挡墙屏幕的最下方那一行的第一个字符
  • G 光标移动到这个文件的最后一行
  • nG 光标移动到第n行
  • gg 光标移动到第一行
  • n 光标向下移动n行
  • /word 向光标之下寻找一个字符串word
  • ?word 向光标之上寻找一个字符串word
  • n 重复前一个搜寻动作,比如执行/word搜索后,按下n即向下继续搜索word字符串
  • N 与n相反,反向进行前一个搜寻动作
  • :n1,n2s/word1/word2/g[c] 替换n1行到n2行中的word1为word2,如果需要替换到最后一行用$,最后的c为是否提示用户确认,如::100,$s/hello.world/gc,替换100行到最后一行中的hello为world并提示用户确认
  • x,X 删除一个字符,x向后删除 X向前删除
  • nx 向后删除n个字符
  • dd 删除光标所在行
  • dw 删除下一个单词
  • de 删除当前单词
  • ndd 向下删除n行
  • dnG 删除光标所在行到第n行的数据,没有n则为删除到最后一行的所有数据
  • d$ 删除光标所在到该行的最后一个字符
  • d0 与d$相反,删除光标所在到该行第一个字符
  • yy 复制光标所在行
  • nyy 向下复制n行
  • ynG 同dnG,操作变成复制
  • y$和y0同d$和d0,操作变成复制
  • p 粘贴已经复制的数据在下一行
  • P 粘贴已经复制的数据在上一行
  • J 合并光标所在行和下一行
  • c 重复删除多个数据,10cj 向下删除10行
  • u 复原前一个动作
  • [ctrl]+[r] 重做上一个动作
  • . 重复前一个动作
  • i|I 进入编辑模式,I为所在行的第一个非空格符处开始插入
  • a|A 进入插入模式,a为光标下一个字符开始插入,A为光标所在行的最后一个字符开始插入
  • o|O 进入插入模式,o为光标所在的下一行处插入新一行,O为光标所在的上一行处插入新一行
  • r|R 进入替换模式,r只会取代光标所在的字符一次,R会一直取代光标所在的字符,知道按下Esc
  • :w 将编辑的内容写入硬盘
  • :w! 强制写入
  • :q 离开vim
  • :q! 强制离开vim
  • :wq 保存后离开
  • ZZ 文件没有改动则直接离开,否则保存后离开
  • :w file 另存为文件
  • :r file 将filename文件内容追加到光标所在行后面
  • :n1,n2 w file 将n1行到n2行之间的内容存储到filename文件
  • :! command 暂时离开vim执行command命令
  • :set [nu|nonu] 是否显示行号
  • 区块选择:v字符选择,光标经过的地方被选;V行选择,光标经过的行被选;[ctrl]+v区块选择,可用长方形方式选择字符;y复制已选择;d删除已选择;p粘贴已复制的
  • 多文件编辑::n编辑下一个文件;:N编辑上一个文件;:files列出当前开启的文件
  • 多窗口模式::sp file 如果是当前文件不用加file,[ctrl]+[w]+[j|k]在上下窗口中移动,[ctrl]+[w]+[q]关闭窗口
  • [ctrl]+x->[ctrl]+n 根据当前文件内容作为关键字,予以补全
  • [ctrl]+x->[ctrl]+o 根据文件扩展名作为语法,予以补全
  • iconv -f [原编码] -t [新编码] file [-o newfile]

认识和学习BASH

  • linux系统中所有合法的shell都在/etc/shells中记录
  • /etc/passwd中记录用户登录时取得的shell进行工作
  • ~/.bash_history中记录了曾经执行过的命令
  • alias vi="vim" 重命名命令
  • type [-atp] command 查询命令是否为bash内建
  • 变量 hello=world name="hello world",等号两边不能有空格,字符串中有空格需要用"或',双引号可以包邮原本的特性与PHP语法相似
  • $(指令) 或 `指令` 得到的是执行指令返回的信息
  • export PATH 使变量变成环境变量
  • 大写字符为系统默认变量,小写为用户自定义设定的变量
  • unset 可以取消变量
  • 在当前shell下启用一个新的shell就是子程序
  • env 查看环境变量
  • read [-pt] [variable] 读取输入为变量的值
  • ${variable#keyword} 从头匹配,删除变量中的关键字
  • ${variable##keyword} 同上,keyword有*时生效,贪婪模式
  • ${variable%keyword} 从尾匹配,删除变量中的关键字
  • %{variable%%keyword} 同上,keyword有*时生效,贪婪模式
  • ${variable/old/new} 替换第一个符合的old word
  • ${variable//old/new} 替换所有符合的old word
  • var1=${var2[:]-default} 如果没有[:]则判断根据是var2是否定义,加上[:]如果var2是空字符串也会被默认值替换
表达式 str没定义 str为空 str非空
var=$ var=exp var='' var=$str
var=$ var=exp var=exp var=$str
var=$ var='' var=exp var=exp
var=$ var='' var='' var=exp
var=$ str=var=exp var='' var=$str
var=$ str=var=exp str=var=exp var=$str
var=$ exp>>stderr var='' var=$str
var=$ exp>>stderr exp>>stderr var=$str
  • alias|unalias 命令别名和删除别名
  • history 查询命令历史
  • !n|![command]|!! 执行之前的命令n代表历史第几个命令,command指以此开头的第一个命令,!!是上一个命令
  • history 命令显示时间需要export HISTTIMEFORMAT='%F %T '
  • 指令执行优先级:
    • 以绝对/相对路径执行
    • 由alias找到指令来执行
    • 由bash内建的指令执行
    • 通过$PATH搜索的第一个指令来执行
  • login shell 取得bash时需要完整的登入流程
  • non-login shell 取得bash不需要重复登入举动,比如在GUI下使用Terminal或子程序
  • login shell会读取/etc/profile /.bash_profile或/.bash_login或~/.profile
  • /etc/profile 会获取/etc/profile.d/.sh /etc/locale.conf /usr/share/bash-completion/completions/
  • source|. conf-file 使配置文件在当前会话中生效
  • 标准输入<或<<;标准输出>或>>;标准错误输出2>或2>>,一个符号时覆盖,两个是追加
  • /dev/null 垃圾桶黑洞装置,可以吃掉任何输入这个装置的数据
  • find / -name .bashsr > log 2> &1 标准输出和错误输出同一个文件使用$1,不能写两个log
  • cat > catfile < ~/.bashrc 将~/.bashrc输入到catfile中
  • << 代表的是结束的输入字符,常见<< "EOF"
  • ;,&&,|| 指令之间的相关性
  • | 管道,后面第一个必定是指定,且必须能接受标准输出内容的指令
  • cut -[dfc] 取出一行数据中我们需要的,df一般一起使用,c为字符截取
  • grep [-acinv] 搜索一行数据中是否有我们需要的,有则输出整行数据
  • sort [-fbMnrutk] 排序,接受文件或者标准输入
  • uniq [-ic] 去重并统计
  • wc [-lwm] 统计行数、单词书、字符数
  • tee 将数据流多重导向
  • tr [-ds] 删除数据流中的字符串或进行字符串替换
  • col [-xb] 将tab转换成空格
  • join [-ti12] file1 file2 例:join -t ':' /etc/passwd /etc/shadow | head -n 3
  • paste [-d] file1 file2
  • expand [-t] tab转空格
  • split [-bl] file [PREFIX] 将大文件切分成小文件,如没有文件是标准输入流是用'-'
  • xargs [-Oepn] [command] 参数替换 redis-cli keys [pattern] | xargs redis-cli del; cut -d ':' -f 1 /etc/passwd |head -n 3 | xargs -p -n 1 id
  • 在管道命令中,stdin和stdout都可以用'-'来替代

正则表达式与文件格式化处理

特殊字符 代表意义
[:alnum:] 0-9,a-z,A-Z
[:alpha:] a-z,A-Z
[:blank:] space,tab
[:cntrl:] CR,LF,Tab,Del等控制键
[:digit:] 0-9
[:graph:] 除space,tab外所有
[:lower:] a-z
[:print:] 可以被打印出来的字符
[:punct:] 标点符号
[:upper:] A-Z
[:space:] 空白字符
[:xdigit:] 0-9,a-f,A-F,16进制数
  • sed [-nefri] [n1,n2][acdips] 管道命令,可以将stdin数据进行取代删除新增截取,最后一行可用$表示
  • egrep是grep的扩展,支持正则
  • printf 格式化输出
  • awk 处理每次词,last -n 5 | awk '{print $1 "\t" $3}'
  • diff [-bBi] file1 file2 对比两个文件
  • cmp [-l] file1 file2 对比两个文件的字节

学习Shell Scripts

  • !/bin/bash 当前shell script使用的bash

  • sh file.sh 启用一个子程序来执行
  • source file.sh 在当前程序中执行
  • test 测试文件类型、权限等
  • [ "${name}" == "VBird" -o "${sex}" == "male" ]
  • shell script 默认参数$0,$1,$2... $0表示script name, $#=参数个数,$@=["$1" "$2"...],$*="$1 $2 ..."
  • shift n 删除shell脚本中的n个参数
  • if [ cond ]; then ... fi 逻辑运算符&&和||
  • [ cond1 -o cond2 ] == [ cond1 ] || [ cond2 ]
  • if [ cond ]; then ... else ... fi
  • if [ cond1 ]; then ... elif [ cond2 ]; then ... else ... fi
  • netstat 查询网络端口
  • echo -e 开启转义
  • printf 同C语言的printf,格式化输出
  • case $var in "cond1") ... ;; "cond2") ... ;; *) ... ;; esac
  • function fname() { ... } 函数
  • fname param1 param2 ...
  • while [ cond ] do ... done while循环
  • until [ cond ] do ... done until循环
  • for var in con1 con2 ... do ... done foreach循环
  • for ((初始值; 限制值; 布阶)) do ... done for循环

Linux账号管理与ACL权限设定

  • /etc/passwd 系统所有用户
  • /etc/shadow 用户密码文件
  • /etc/group 系统用户组
  • useradd [-u uid] [-g group] $user 新增用户
  • useradd -r 新建系统用户
  • passwd [--stdin] $user 修改密码
  • usermod [-...] $user 修改用户
  • userdel $user 删除用户
  • chage 强制使用者第一次登录后修改密码
  • id $user 查询用户UID,GID等
  • groupadd [-g gid] [-r] $group 新增分组
  • groupmod 修改分组
  • groupdel 删除分组
  • gpasswd [-adArR] $user $group 将user加入|移除group群组
  • getfacl 取得某个文件/目录的ACL设定项目
  • setfacl 设定某个文件/目录的ACL规范
  • su [-lm] [-c command] $user 切换用户,su和su -效果不一样,su不会使用login-shell来登录系统
  • exit 离开su的环境
  • sudo -u $user 使用另一个用户去执行命令
  • visudo 可以编辑/etc/sudoers
  • w|who 查看系统当前已登录的用户
  • last|lastlog 查看登录历史记录

磁盘配额与进阶文件系统管理

例行性工作排程(crontab)

  • at 仅执行一次的定时任务
  • cron 可重复执行的定时任务
  • at [-mldv] $time 定时执行
  • atq 查询任务
  • atrm n 删除第n个任务
  • crontab [-u $user] [-l|-e|-r] 查询|编辑|清空cron定时任务

进程管理与SELinux初探

  • 不同用户执行程序,系统给予的权限也不同
  • kill -signal PID 给进程传递一个信号
  • ps aux 观察系统所有的进程
  • ps -lA 同上
  • ps axjf 进程树
  • top 动态观察进程的变化
  • pstree 进程树
  • 进程信号
代码 英文 说明
1 SIGHUP 重启
2 SIGINT 中断[ctrl]+[c]
9 SIGKILL 强制中断
15 SIGTERM 正常终止
19 SIGSTOP 暂停[ctrl]+[z]
  • PRI = PRI(old)+nice 程序优先级,nice可由用户调整,范围-20~19
  • free [-b|-k|-m|-g|-h] [-t] [-s N -c N] 查看内存资源
  • uname [-asrmpi] 查看系统与核心相关信息
  • uptime 查看系统启动时间和工作负载,top第一行信息
  • netstat [-atunlp] 查看网络监控
  • lsof [-aUu] [+d] 列出被进程开启的文件
  • pidof [-sx] $program 查看程序的进程PID
posted @ 2020-11-24 09:44  無花無酒鋤作田  阅读(128)  评论(0编辑  收藏  举报