vim
-
移动光标的方法
| 操作 | 效果 |
|---|---|
| h 或 向左箭头键(←) | 光标向左移动一个字符 |
| j 或 向下箭头键(↓) | 光标向下移动一个字符 |
| k 或 向上箭头键(↑) | 光标向上移动一个字符 |
| l 或 向右箭头键(→) | 光标向右移动一个字符 |
| [Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
| [Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
| n | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。 |
| 0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
| $ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
| G | 移动到这个档案的最后一行(常用) |
| nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
| gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
| n | n 为数字。光标向下移动 n 行(常用) |
-
搜寻和取代
| 操作 | 效果 |
|---|---|
| /word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) |
-
删除复制和粘贴
| 操作 | 效果 |
|---|---|
| x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
| nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
| dd | 删除游标所在的那一整列(常用) |
| ndd | n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用) |
| yy | 复制游标所在的那一行(常用) |
| nyy | n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用) |
| p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) |
| u | 复原前一个动作。(常用) |
| [Ctrl]+r | 重做上一个动作。(常用) |
| . | 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
Shell的变量功能
-
变量的取用:echo
[root@www ~]# echo $variable [root@www ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@www ~]# echo ${PATH} -
变量的配置守则
-
变量与变量内容以一个等于号
=连接,如图所示:『myname=VBird』 -
等号两边不能直接接空格符
-
变量名称只能是英文字母或者数字,但是开头字符不能是数字
-
变量内容若有空格符可使用双引号
""或者单引号'',不过二者有些区别:双引号内的特殊符号可以保留原来的特性
『var="lang is $LANG"』则『echo $var』可得『lang is en_US』单引号内的特殊符号i就会变成纯文本
『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』 -
可以使用跳脱字符**``**把特殊符号转化成一般字符
-
若该变量需要在其他子程序运行,需要使用export把变量变成环境变量
export PATH -
取消变量的方法使用
unset
-
-
环境变量的功能
-
HOME
代表用户的家目录
scutech@ubuntu:~/桌面HOME /home/scutech
-
SHELL
告诉用户目前环境使用的SHELL是哪个程序
scutech@ubuntu:~/桌面$ echo $SHELL /bin/bash -
HISTSIZE
记录历史命令
scutech@ubuntu:~/桌面$ echo $HISTSIZE 1000 -
MAIL
使用mail命令收信时,系统会去读取邮箱的文件
-
PATH
运行文件的搜寻路径
scutech@ubuntu:~/桌面$ echo $PATH /home/scutech/.nvm/versions/node/v22.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -
LANG
语言系数据
scutech@ubuntu:~/桌面$ echo $LANG zh_CN.UTF-8 -
RANDOM
-
随机随机数变量
scutech@ubuntu:~/桌面$ echo $RANDOM
7303
scutech@ubuntu:~/桌面$ echo $RANDOM
26631
命名别名与历史命令
命令别名配置:alias,unalias
[root@www ~]# alias lm='ls -al | more'
使用 lm 替换 ls -al | more 命令
[root@www ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias列出所有的命令别名
[root@www ~]# unalias lm
unalias取消命令别名
历史命令:history
[root@www ~]# history [n]
[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
选项与参数:
n :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
则默认写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
范例一:列出目前内存内的所有 history 记忆
[root@www ~]# history
# 前面省略
1017 man bash
1018 ll
1019 history
1020 history
Bash shell的操作环境
source:读取环境配置文件的命令
使用source可以直接读取配置文件而不用注销登陆。
[root@www ~]# source 配置文件档名
范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中
[root@www ~]# source ~/.bashrc <==底下这两个命令是一样的!
[root@www ~]# . ~/.bashrc
| 组合按键 | 运行结果 |
|---|---|
| Ctrl + C | 终止目前的命令 |
| Ctrl + D | 输入结束 (EOF),例如邮件结束的时候; |
| Ctrl + M | 就是 Enter 啦! |
| Ctrl + S | 暂停屏幕的输出 |
| Ctrl + Q | 恢复屏幕的输出 |
| Ctrl + U | 在提示字符下,将整列命令删除 |
| Ctrl + Z | 『暂停』目前的命令 |
通配符与特殊符号
| 符号 | 意义 |
|---|---|
| * | 代表『 0 个到无穷多个』任意字符 |
| ? | 代表『一定有一个』任意字符 |
| [ ] | 同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』 |
| [ - ] | 若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的! |
| [^ ] | 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 abc 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。 |
[root@www ~]# LANG=C <==由于与编码有关,先配置语系一下
范例一:找出 /etc/ 底下以 cron 为开头的档名
[root@www ~]# ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已
范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[root@www ~]# ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了
范例三:找出 /etc/ 底下文件名含有数字的文件名
[root@www ~]# ll -d /etc/*[0-9]* <==记得中括号左右两边均需 *
范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]* <==注意中括号左边没有 *
范例五:将范例四找到的文件复制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp
| 符号 | 内容 | |
|---|---|---|
| # | 批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行 | |
| \ | 跳脱符号:将『特殊字符或通配符』还原成一般字符 | |
| 管线 (pipe):分隔两个管线命令的界定(后两节介绍); | ||
| ; | 连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同) | |
| ~ | 用户的家目录 | |
| $ | 取用变量前导符:亦即是变量之前需要加的变量取代值 | |
| & | 工作控制 (job control):将命令变成背景下工作 | |
| ! | 逻辑运算意义上的『非』 not 的意思! | |
| / | 目录符号:路径分隔的符号 | |
| >, >> | 数据流重导向:输出导向,分别是『取代』与『累加』 | |
| <, << | 数据流重导向:输入导向 (这两个留待下节介绍) | |
| ' ' | 单引号,不具有变量置换的功能 | |
| " " | 具有变量置换的功能! | |
| 两个『 ` 』中间为可以先运行的命令,亦可使用 $( ) | |
| ( ) | 在中间为子 shell 的起始与结束 | |
| { } | 在中间为命令区块的组合! |
管道命令(pipe)
撷取命令:cut,grep
cut:主要用于将同一行的数据进行分解
[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
[root@www ~]# cut -c 字符区间 <==用于排列整齐的信息
选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;
scutech@ubuntu:~/桌面$ cat test.txt
John 95 85
Alice 88 92
Bob 92 88
Mary 90 93
scutech@ubuntu:~/桌面$ cut -c 2 test.txt
o
l
o
a
scutech@ubuntu:~/桌面$ cut -c 2-5 test.txt
ohn
lice
ob 9
ary
scutech@ubuntu:~/桌面$ cut -c 2-14 test.txt
ohn 95 85
lice 88 92
ob 92 88
ary 90 93
scutech@ubuntu:~/桌面$ cut -d ' ' -f 2-4 test.txt
95 85
88 92
92 88
90 93
scutech@ubuntu:~/桌面$ cut -d ' ' -f 2-3 test.txt
95 85
88 92
92 88
90 93
scutech@ubuntu:~/桌面$ cut -d ' ' -f 2 test.txt
95
88
92
90
scutech@ubuntu:~/桌面$ cut -d ' ' -f 1 test.txt
John
Alice
Bob
Mary
grep:分析一行信息,若其中有需要的信息,则把该行拿出来
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
scutech@ubuntu:~/桌面$ cat test.txt
John 95 85
Alice 88 92
Bob 92 88
Mary 90 93
scutech@ubuntu:~/桌面$ grep -n 'hn' test.txt
1:John 95 85
排序命令:sort,uniq,wc
sort:依据不同数据形态进行排序
[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
scutech@ubuntu:~/桌面$ cat test.txt
John 95 85
Alice 88 92
Bob 92 88
Mary 90 93
scutech@ubuntu:~/桌面$ sort -f test.txt
Alice 88 92
Bob 92 88
John 95 85
Mary 90 93
scutech@ubuntu:~/桌面$ sort -n -k 2 test.txt
Alice 88 92
Mary 90 93
Bob 92 88
John 95 85
uniq:重复的行删除掉只显示一个
scutech@ubuntu:~/桌面$ sort -n -k 2 test.txt | uniq -c
1 Alice 88 92
1 Mary 90 93
1 Bob 92 88
1 John 95 85