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)
评论()
编辑
收藏
举报