Skip to content

Linux

终端快捷键

光标移动

快捷键作用
crtl+a移动到开头
crtl+e移动到结尾
alt+b向左移动一个单词
alt+f向右移动一个单词
crtl+b向左移动一个字符
crtl+f向右移动一个字符
esc+b向左移动一个单词
esc+f向右移动一个单词
ctrl+XX在上次光标和当前光标所在字符间跳转
esc+t交换光标位置钱的两个单词

删除

快捷键作用
ctrl+k删除光标后所有字符
ctrl+u删除光标前所有字符
ctrl+w删除光标前一个单词
ctrl+d删除光标所在字符(右侧)
ctrl+h删除光标前字符(左侧)

撤销

快捷键作用
ctrl+_撤销操作
ctrl+y粘贴ctrl+u/k剪切的内容
ctrl+?撤销前一次输入
alt+r撤销前一次动作

替换

快捷键作用
ctrl+t将光标当前字符与前一个字符替换

历史命令编辑

快捷键作用
ctrl+p上一条历史命令
ctrl+n下一条历史命令
alt+>上一次执行的命令的最后一个单词
ctrl+r搜索历史命令

控制命令

快捷键作用
ctrl+l清除屏幕
ctrl+s锁住终端,阻止屏幕输出
ctrl+q解锁终端,允许屏幕输出
ctrl+c终止命令
ctrl+i补全,相当于tab
ctrl+o重复执行命令
alt+<数字>操作的次数
ctrl+z挂起

!命令

快捷作用
!!执行上条命令
!-n执行前n条命令

shell中的 $ 用法

特殊符号含义
$#传给脚本的参数个数
$0shell脚本文件的名字
$1传递给该shell脚本的第一个参数
$2传递给该shell脚本的第二个参数
$@传给脚本的所有参数的列表
$*以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$脚本运行的当前进程ID号,Shell本身的PID
$?显示最后命令的退出状态,0表示没有错误,其他表示有错误
$!Shell最后运行的后台Process的PID
$-使用Set命令设定的Flag一览
$()相当于``,括号中放的是命令
${}括号中放的是变量。例如echo P A T H 取 P A T H 变 量 的 值 并 打 印 , 也 可 以 不 加 括 号 比 如 {PATH}取PATH变 量的值并打印,也可以不加括号比如PATH取PATH变量的值并打印,也可以不加括号比如PATH。
$1~n添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

判断/比较

语法(用例)

shell
if [ $SYSTEM = "Linux" ] ; then # 如果是linux话输出linux字符串
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ] ; then
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi # 判断结束,以fi结尾

字符串判断

语法含义
str1 = str2当两个串有相同内容、长度时为真
str1 != str2当串str1和str2不等时为真
-n str1当串的长度大于0时为真(串非空)
-z str1当串的长度为0时为真(空串)
str1当串str1为非空时为真

数字的判断

语法含义
int1 -eq int2两数相等为真
int1 -ne int2两数不等为真
int1 -gt int2int1大于int2为真
int1 -ge int2int1大于等于int2为真
int1 -lt int2int1小于int2为真
int1 -le int2int1小于等于int2为真

文件相关的if判断条件语句

语法含义
-r file用户可读为真
-w file用户可写为真
-x file用户可执行为真
-f file文件为正规文件为真
-d file文件为目录为真
-c file文件为字符特殊文件为真
-b file文件为块特殊文件为真
-s file文件大小非0时为真
-t file当文件描述符(默认为1)指定的设备为终端时为真

复杂逻辑判断

语法含义
-a
-o
!

[] 和 [[]] 的区别

if [[]] 要求括号里的表达式前后必须有一个空格,格式如 if [[ xxx ]]。 当 if [[]] 用于字符串常量或变量比较时,表达式本身的运算符,如 <、>、==、!= ,其前后可以不加空格; 但当 if [[]] 用于数值比较时,表达式本身的运算符前后必须加空格,否则会得到相反的结果。

如:

shell
if [[ $1 != "start"  &&  $1 != "stop" ]]

在if之后要用空格,[[ 之后要有一个空格,]]之前要有空格,不然会出错.

elif [[ $1 == "stop" ]] 

双等号两边要有空格不然后会出错.

在shell中查看每条指令实际执行的结果

set +x表示开始记录,set -x表示停止记录。

例子:

shell
set +x
name="test"
echo $name
set -x

实用小技巧

查找包含某个字符串的所有文件,可以用于后续的自动处理:

shell
# 指令
grep -r "desktop\." | awk '{print $1}' | sed 's/://g' | uniq
# 用途
for script_name in `grep -r "desktop\." | awk '{print $1}' | sed 's/://g' | uniq`
do
	echo y | edopkg pull $script_name
done

日志管理

dmesg命令可以查看系统的整个启动日志

VIM

替换

语法为[addr]s/源字符串/目的字符串/[option], 全局替换:%s/源字符串/目的字符串/g

[addr]:表示检索范围,省略时表示当前行。如:1,20:表示从第1行到20行;%:表示整个文件,同1,$. ,$:从当前行到文件尾;s:表示替换操作 [option] :表示操作类型,g表示全局替换;c表示进行确认;p表示替代结果逐行显示(Ctrl + L恢复屏幕);省略option时仅对每行第一个匹配串进行替换;如果在源字符串和目的字符串中出现特殊字符,需要用\转义

基本的替换

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky (n 为数字,若 n 为 .,表示从当前行开始到最后一行) :%s/vivian/sky/(等同于 :g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ :%s+/oradata/apras/+/user01/apras1+ (使用+ 来替换 / ): /oradata/apras/替换成/user01/apras1/

设置缩进

set autoindent设置自动缩进 set shiftwidth=4设置自动缩进空格数 set tabstop=4设置一个tab等于多少个空格的宽度 set softtabstop=4设置软制表符,软制表符表示在Insert模式的时候按退格键时退回缩进的长度,当使用expandtab 时特别有用。 set expandtab将tab变成空格 :%retab!将文件中现有的tab变成空格

鼠标功能

set mouse=a启用鼠标功能 set mouse-=a停用鼠标功能

鼠标模式:

  • n:普通模式
  • v:可视模式
  • i:插入模式
  • c:命令行模式
  • h:在帮助文件里,以上所有模式
  • a:以上所有模式
  • r:跳过|lit-enter|提示
  • A:在可视模式下自动选择

解决鼠标模式右键不能粘贴问题 用鼠标和可视模式复制/粘贴 ('mouse' 选项必须设置,见上):

  1. 在文本的第一个字符上按鼠标左键,移动鼠标到文本的最后一个字母,然后释放左 键。这会启动可视模式并高亮选择区域。
  2. 按 "y" 抽出可视文本到无名寄存器里。
  3. 在要插入的位置上按鼠标左键。
  4. 按鼠标中键(滚轮)。

折叠代码

用心去做高质量的内容网站,欢迎 star ⭐ 让更多人发现