Linux学习笔记(持续更新)。。

165 阅读2分钟

vim

  • 移动光标的方法
操作效果
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或 向右箭头键(→)光标向右移动一个字符
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
n那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用)
G移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
nn 为数字。光标向下移动 n 行(常用)
  • 搜寻和取代
操作效果
/word向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
  • 删除复制和粘贴
操作效果
x, X在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd删除游标所在的那一整列(常用)
nddn 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
yy复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
p, Pp 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
u复原前一个动作。(常用)
[Ctrl]+r重做上一个动作。(常用)
.不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

Shell的变量功能

  1. 变量的取用: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}
    
  2. 变量的配置守则

    • 变量与变量内容以一个等于号 = 连接,如图所示:

      『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

  3. 环境变量的功能

    • HOME

      代表用户的家目录

      scutech@ubuntu:~/桌面echoechoHOME /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
双向重导向:tee
字符转换命令:tr,col,join,paste,expand
分割命令:split
参数代换:xargs
减号 - 的用途