shell与shell script
vim程序编辑器
基本概念
vim与vi
vim是vi的高级版本,vim有语法高亮等
vi/vim的使用
编辑模式
打开即是默认模式(一般模式),输入i/o/r/a任意一个字母会进入编辑模式,不限制大小写,i/o/a是插入,r是替换
替换模式:直接键入字符,替换光标所在字符
在vi里,tab键得到结果和空格符得到的结果不一样
命令行模式
一般模式中,输入:
/
?
3个中的一个就可以进入命令行模式
返回一般模式
Esc + :wq
强制写入
:wq!
前提是可以改权限
- w 写入 (也可以w[filename]表示为另存为)
- q 离开
- ZZ 没改动就不保存离开,改动就保存后离开
移动光标
在一般模式下,除长按外,可以先写次数再按键(30->
为光标向右移动30个字符)
直接输,输入不会回显在屏幕上
1 | [Ctrl] + [f] 屏幕“向下”移动一页,相当于 [Page Down]按键 (常用) |
块选择–visual block模式
在一般模式中按下v或V进入
此时光标经过位置会被选中,可以进行以下具体操作
1 | y 将选中的地方复制起来 |
复制的内容只在当前vim窗口生效,没有进入电脑剪切板
多文件编辑
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim的打开的所有文件
vim后面可以跟多个文件名,如果有文件内容相同的文件,只会读取第一个,后面重复的会直接跳过
多窗口
:sp[filename]
filename可有可无,如果想在新窗口启动另一个文件,就加filename,否则默认在使当前文件出现在两个窗口
ctrl+w+j 移到下面的窗口
ctrl+w+k 移到上面的窗口
ctrl+w+q 退出
vim环境设置
~/.viminfo
主动记录操作
~/.vimrc 环境设置参数
set nu
set nonu
设置行号
set hlsearch
set noglsear
hlsearch(=high light search 高亮度查找),设置是否将查找的字符串 反白的设置值
set autoindent
set noautoindent
表示是否自动缩排
set backup
set nobackup
表示自动保存备份文件,一般设置为 nobackup ,如果设置为backup的话,当你改动任何一个文件时,原文件会被保存成一个文件名为 filename~ 的文件。
set ruler
设置右下角的状态栏说明
set showmode
显示 insert 之类的字
set backspace=(0 1 2)
设置 2 表示进入编辑模式后可以删除任意字符, 设置 0 或 1 表示进入编辑模式后只能删除刚才输入的字符,不能删除原本就存在的字符了
set all
显示目前所有的环境参数设置值
set
显示与系统默认值不同的设置参数,就是用户自己变动过的设置参数
syntax on
syntax off
是否根据程序相关语法显示不同颜色。
set bg=dark
set bg=light
显示不同的底色色调
注意事项
中文编码
一般都为utf8,但若vim打开big5编码,会有乱码,此时可以设置LANG属性
1 | ➜ test LANG=zh_CN.big5 |
语系编码转换
1 | iconv [options] |
bash
基本功能
命令记忆能力 history
可以查看之前用过的命令
命令与文件补全功能(Tab键)
c[Tab][Tab]
回显所有c开头命令
一串命令的第一个字后加Tab则为命令补全
第二个字后加Tab为文件补齐
命令设置别名 alias
alias lm='ls -al'
相当于给ls -al
命令加了个缩写标识符,输入lm则会执行该命令
控制
ctrl+c 中断进程
shell script
可以批量处理文件
通配符
type命令
1 | type [-tpa] name |
命令执行
可支持多行执行,这也有利于ctf题目中的绕过waf
主要利用反斜杠\
,原理为将功能为命令执行的回车符转义了,使得命令可以在下一行继续输入(终端中会以>开头提示输入)
1 | ➜ test cp 1 2 \ |
shell变量
一般大写的是系统默认变量(PATH、SHELL、HOME等),小写是命令
如果要
echo
内置变量,要在变量名前加$
变量的显示与设置
打印
echo $变量名
/echo ${变量名}
设置
变量名=值
设置规则
- 等号两边不能有空格,赋值及变量名中也不能有空格(如果值被双引号或单引号包裹时可以有空格符)
- 单双引号包裹内容区别:双引号包裹的$字符可以解析变量,因此可以插入变量,单引号就是纯文本
- 可以用转义字符转义特殊字符
- 变量名只能是数字字母,不能数字开头
- 变量赋值双引号中可以插入命令
$(命令)
,将命令执行的结果插入赋值中 - 当要在子进程中使用该变量时,
export 变量名
使其变成环境变量- 但是重启当前父shell窗口后又会被清空,若要永久使用,要在配置文件中加export或alias语句(zsh配置文件为
~/.zshrc
或~/.zprofile
),设置为记得source一下配置文件
- 但是重启当前父shell窗口后又会被清空,若要永久使用,要在配置文件中加export或alias语句(zsh配置文件为
取消变量
unset 变量名
exit 离开当前子进程
在当前shell下,另开一个shell就相当于子进程,父进程的自定义变量无法在子进程中使用,但是export变成环境变量后就可以在子进程中使用
环境变量功能
env
查看当前shell环境变量,即export的变量,alias不包括其中
常见环境变量
1 | HOME ~的路径 |
set命令可以查看所有变量(环境变量与自定义变量)
变量的测试与替换
语法:new_var=${old_var-content} :一般new_var与old_var都写成同一个变量,这样相当于测试变量是否存在
username=${username-root}
:如果变量没有设置(即没有这个变量),就赋值root,如果设置就不改
如果变量是空字符串,那直接echo和echo一个不存在变量的内容是一样的,因此直接echo不能判断变量是不是存在
如果一定要给空字符串设置
1 | new_var=${old_var:-content} |
加
:
后,变量为空或是未设置都能被替换
设置别名
alias
unalias
通配符与特殊符号
配置
配置文件
读取
source 配置文件名
环境设置
stty [-a]
列出所有按键和其对应内容
stty erase [按键内容] 设置删除字符键的快捷键
数据流重定向
>
命令 > 文件 :将命令输出结果输入到文件(但是会覆盖)
>>
命令 >> 文件 :将命令输出结果追加到文件末尾
>
与>>
都会在文件不存在时自动创建
输出与错误输出
- 1> 以覆盖到方法将正确的数据输出到指定的文件或设备上
- 1>> 以累加的方法将正确的数据输出到指定的文件或设备上
- 2> 以覆盖到方法将错误的数据输出到指定的文件或设备上
- 2>> 以累加到方法将错误的数据输出到指定的文件或设备上
错误的数据输出就相当于报错信息
e.g.将错误信息丢弃
1 | find /home -name .bashrc 2> /dev/null |
/dev/null垃圾桶黑道,可以吃掉任何传入信息
e.g.将错误和正确信息都写到同一个文件中
1 | find /home -name test > list 2>&1 |
<
接收文件 < 输入文件 :用输入文件的内容来代替键盘输入
<<
结束输入
1 | ➜ desktop cat > catfile << "eof" |
<<后跟结束输入关键字,这样就不用ctrl+d来结束
单纯的输入
cat > catfile
来编写catfile需要ctrl+d来结束
管道命令
连接符
- ; 连续命令执行,
cmd;cmd
- cmd1 && cmd2 1成功执行且为正确才执行2,否则2不执行
- cmd1 || cmd2 1成功执行且正确,2不执行,否则执行2
管道符
cmd1 | cmd2 cmd1的输出作为cmd2的输入,管道符会忽略报错输出
选取命令
- cut 选取信息中的部分
- cut -d ‘分隔字符’ -f 输出行数(多行的话逗号连接)
- cut -c 字符范围
- cut -c 12- 取得第12字符以后的内容
- grep :查找单位为行
- 可搭配管道符
cmd | grep '查找字符串'
将cmd输出结果中含查找字符的都显示出来- -a 将二进制文件以text文件方式查找数据
- -c 计算找到查找字符串的次数
- -i 大小写不敏感
- -n 输出时加上行号
- -v 反向选择,找不含查找字符串的行
- –color=auto 找到的关键字部分加上颜色
- 可搭配管道符
排序命令
sort
uniq 重复数据只出现一个
wc 统计文件字符数行数,-l 列出行数 -w 列出字数(英文单字) -m 字符数
双向重定向
tee 同时将数据流传给文件与屏幕
1 | tee [-a] file |
e.g. 将执行结果转存一份,同时屏幕上也可以看到
last | tee last.list | cut -d " " -f 1
字符转换命令
tr 删除或替换
col 常用于将man page转存为纯文本文件方便查询
join 合并两个文件(可选操作多)
paste 直接拼接两个文件,[tab]隔开
expand 将tab转空格
- 标题: shell与shell script
- 作者: Sl0th
- 创建于 : 2021-12-03 23:33:31
- 更新于 : 2024-11-11 18:23:06
- 链接: http://sl0th.top/2021/12/03/shell与shell-script/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。