Linux 常用操作命令

本文详细介绍Linux环境下文件操作、编辑、管道及字符串处理等核心命令的使用方法与技巧,包括cd、ls、vim编辑器、awk和sed等,帮助读者快速掌握Linux命令行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录结构           
          1、 文件操作篇
          2、 文件编辑篇
          3、 管道操作篇
          4、 字符串处理篇

          5、 综合校验篇

1、文件操作篇
序号
作用描述
相应命令
1
改变目录
命令为:cd(change directory),
回到家目录:cd ~,进入/usr/bin的命令为cd /usr/bin
2
查看当前目录
命令为:pwd
返回当前所在的绝对目录
3
查看目录下的文件的详细信息
命令:ls -l
显示根目录文件详情:ls -l /
4
创建目录
命令:mkdir
在家目录中创建test文件夹:mkdir ~/test
5
创建文件
命令:touch
在家目录中创建input.txt文件:touch ~/input.txt
6
删除文件
命令:rm
在家目录中删除input.txt文件:rm ~/input.txt
7
删除文件夹
命令:rm -r
删除家目录的test文件夹:rm -r ~/test
其中"-r"为recursive,递归删除文件夹下所有数据的意思
加"-f"参数则无提示,直接删除掉
8
复制文件
命令:cp
复制家目录下的input.txt到家目录上的test目录中:cp ~/input.txt ~/test/
或者复制后重命名:cp ~/input.txt ~/test/input.txt.bak
9
复制文件夹和文件夹中的内容
命令:cp
复制家目录下的test文件夹到/tmp目录中:cp -r ~/test /tmp

10
移动文件
命令:mv
移动/tmp/test目录到家目录中: mv /tmp/test ~/
11
查找
命令: find [路径] [参数]
查找当前路径下名为"input.txt"的文件:find . -name input.txt
查找当前路径下名为"input.*"的文件:find . -name "input.*"
查找当前路径下文件拥有者为tianliang的文件:find . -user tianliang
12
查看文件内容
命令: cat 文件路径
查看input.txt文件中的内容  cat input.txt
输出input.txt文件中的内容,并添加行号:cat -n input.txt
命令:tail
从尾部往前看 tail -30 input.txt,即为查看input.txt的倒数30行
命令: head
从头部往后看:head -30 input.txt,即为查看input.txt的前30行
命令:more
从前往后一屏一屏的看文件内容:more input.txt,输入空格为向后翻屏,适用于文本内容一屏显示不小,但又全部要看一下的情况
13
管道
命令:”|“
即:就是把前一个命令的结果当成后一个命令的输入
查看input.txt后查看是否包含某个字符串:cat input.txt |grep 123
14
重定向
命令:
>               输出重定向到一个文件或设备 覆盖原来的文件
                     如:将文件目录列表输出到文件filelist.txt中:
                     ls -l > filelist.txt
>!              输出重定向到一个文件或设备 强制覆盖原来的文件
>>             输出重定向到一个文件或设备 追加原来的文件
<               输入重定向到一个程序 
                    标准格式:command-line [n] < file或文件描述符&设备
                    如: cat < filelist.txt
                           cat > 1.txt < filelist.txt
2、 文件编辑篇
2.1 文件编辑器选择
  linux文件编辑器,主要是vi和vim,其中vim是vi的升级版,升级点如下:
1、多级撤消
      我们知道在vi里,按u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
      vi只能运行于unix类中,而vim不仅可以运行于unix,windows ,mac等多操作平台。
3、语法加亮
      vim可以用不同的颜色来加亮你的代码。
4、可视化操作
      就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
5、对vi的完全兼容
     因此建议使用vim,如果没有以上特殊要求,直接使用vi亦可。以个人习惯为主

2.2 vim/vi的三种模式

1、命令行模式 (command mode/一般模式)
   任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
   在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
测试一下:vi input.txt,移动光标,双击dd删除一行
 
2、文本输入模式 (input mode/编辑模式)
   在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。
测试一下:vi input.txt后,单击键盘中的a键,进入文本输入模式,此时随意输入均为文件正文

3、末行模式 (last line mode/指令列命令模式)
   末行模式也称ex转义模式。
   Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。
测试一下:vi input.txt后,按shift+":"键,则进入末行模式。输入wq,则为保存修改后退出vi命令。

2.3 vim/vi常用命令

1〉光标移动命令
0 移动到光标所在列的最前面[Home]
$ 移动到光标所在列的最后面[End]
[CTRL][d] 向下半页
[CTRL][f] 向下一页[PageDown]
[CTRL][u] 向上半页
[CTRL][b] 向上一页[PageUp]
H移动到视窗的第一列
M移动到视窗的中间列
L移动到视窗的最后列
G移动到文件最后列
nG直接用数字 n 加上大写 G 移动到第 n 行 (等同于命令“:n”)
fx往右移动到 x 字符上
tx往右移动到 x 字符前
shift +g 跳到文件尾 (等同于G)
gg 跳到文件头

2〉删除操作命令
x 删除光标所在的字符【delete】
dw 删除光标所在的单词
d $ 删除光标至行尾的所有字符
/d d 同/d d $
dd 删除当前行
dnd 删除当前n行
dG  删除当前行到最后一行
可在删除命令前加上数字,如<5x表示删除5行

 3〉改变与替换操作命令
r 替换光标所在的字符
/rr 替换字符序列
c $ 替换自光标位置至行尾的所有字符
cl 修改当前字符
cc 修改当前行
c$ 修改到行尾的内容
:%s#abc#123#g 将文中的所有abc都替换为123
ddp  上下两行交换(其实是先dd,然后执行p)

 4〉查询命令
/string 往前搜索string【支持正则】
n 查找下一个
?string  往后搜索string
/+上下箭头 搜索历史
:+上下箭头 :命令的历史
* 往前查找当前word,前提是光标移动到要查找的word
# 往后查找当前word,前提是光标移动到要查找的word
/\<word\> 只匹配word,不匹配wordstr等等
%  查找匹配的括号,前提是光标要在一边的括号上
fx  在当前行移动到下一个字符x

5〉拷贝与粘贴命令
yw 将光标所在单词拷入剪贴板
y$ 将光标至行尾的字符拷入剪贴板
yy 将当前行拷入剪贴板
yny  将当前n行拷入剪贴板
p 将剪贴板中的内容粘贴在光标后
P 将剪贴板中的内容粘贴在光标前

 6〉文件编辑、保存及退出vi命令
:q 不保存退出
:q! 不保存强制性退出
:w 保存编辑
:w filename 存入文件filename中
:w! filename 强制性存入文件filename中
:wq / :x / ZZ 保存退出
:wq!  强制保存然后退出


3、 管道操作篇
3.1 定义与形式化
在Linux中进行稍复杂的操作,通常需要借助管道命令"|"多个命令的组合,形式如下:
command 1 |  command 2 |  command 3 ……
管道命令必须,能够接受来自前一个命令的standard output作为该命令的standard input来处理

3.2 管道操作示例与常用问题
1、cat input.txt | grep “tianliang”
   在文本input.txt中查找tianliang存在的行,并输出出来

2、cat notExist.txt input.txt | grep "tianliang"
  notExist.txt不存在,则此执行失败命令的标准错误不会通过管道传递。
  管道只能处理标准输出,除此之外均不会处理,但不会因为错误的产生而影响真实标准输出的执行

3、cat input.txt | grep "ad" | head -1
   管道可以连环使用,但要求管道的右边必须能接受标准输出
  但:cat input.txt | grep "ad" | head -1 | ls -l
   由于管道的最右侧的"ls -l"命令不能接受标准输入,所以管道前边的标准输出是无效的,即管道输出失败。但命令是可以正常执行,只是预想的管道输出没有任何作用。

4、find -name "input*txt" | xargs cat 或者 find -name "input*txt" | xargs rm -rf
   如上即为解决第3问题中某些命令无法管道传递的问题
         xargs从标准输入(stdin)中读取数据进行处理
- 数据以空格进行分隔
- 可以根据参数进行一次或多次处理,默认的处理命令是/bin/echo
- 空行不进行处理,会被忽略
- 遇到命令状态为255时,xargs会立刻停止,譬如发生错误时.
         通过xargs将不可接受管理输出的命令通过间接变换,转换成可以接受的执行。
         即将之前的标准输入通过空格分格转化成一个一个的argument参数,传递给后边的命令接授执行

  4、 字符串处理篇
  4.1 awk命令
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
'  '          引用代码块
BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
//           匹配代码块,可以是字符串或正则表达式
{}           命令代码块,包含一条或多条命令
;          多条命令使用分号分隔
END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

特殊要点:
$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符


awk '{print "a"}' /etc/passwd      //输出相同个数的a行,一行只有一个a字母
awk -F":" '{print $1}'  /etc/passwd
awk -F: '{print $1; print $2}'   /etc/passwd             //将每一行的前二个字段,分行输出
awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd        //输出字段1,3,6,以制表符作为分隔符

-F指定分隔符
awk -F":" '{print $1}'  /etc/passwd
awk -F":" '{print $1 $3}'  /etc/passwd                     //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}'  /etc/passwd                     //多了一个逗号,$1与$3使用空格分隔
awk -F: '{print NF}' /etc/passwd                           //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd                          //将每行第NF个字段的值打印出来
awk -F: 'NF==4 {print }' /etc/passwd                       //显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd                       //显示每行字段数量大于2的行
awk '{print NR,$0}' /etc/passwd                                 //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd      //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5{print}'  /etc/passwd                         //显示第5行
awk -F: 'NR==5 || NR==6{print}'  /etc/passwd       //显示第5行和第6行
route -n|awk 'NR!=1{print}'                                       //不显示第一行


//匹配代码块
//纯字符匹配   !//纯字符不匹配   ~//字段值匹配    !~//字段值不匹配   ~/a1|a2/字段值匹配a1或a2
awk '/mysql/' /etc/passwd
awk '/mysql/{print }' /etc/passwd
awk '/mysql/{print $0}' /etc/passwd                   //三条指令结果一样
awk '!/mysql/{print $0}' /etc/passwd                  //输出不匹配mysql的行
awk '/mysql|mail/{print}' /etc/passwd
awk '!/mysql|mail/{print}' /etc/passwd
awk -F: '/mail/,/mysql/{print}' /etc/passwd         //区间匹配---典型讲解
awk '/[2][7][7]*/{print $0}' /etc/passwd               //匹配包含27为数字开头的行,如27,277,2777...
awk -F: '$1~/mail/{print $1}' /etc/passwd           //$1匹配指定内容才显示
awk -F: '{if($1~/mail/) print $1}' /etc/passwd     //与上面相同
awk -F: '$1!~/mail/{print $1}' /etc/passwd          //不匹配
awk -F: '$1!~/mail|mysql/{print $1}' /etc/passwd

IF语句
必须用在{}中,且比较内容用()扩起来
awk -F: '{if($1~/mail/) print $1}' /etc/passwd                                       //简写
awk -F: '{if($1~/mail/) {print $1}}'  /etc/passwd                                   //全写
awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd            //if...else...

输出分隔符OFS
awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
//输出字段6匹配WAIT的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段

while语句
awk -F: 'BEGIN{i=1} {while(i<NF) print NF,$i,i++}' /etc/passwd

  4.2 sed命令
管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作
命令行格式为:
         sed [-nefri] ‘command’ 输入文本
常用选项:
        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕 上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
        -e∶直接在指令列模式上进行 sed 的动作编辑;
        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
        -i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
        a  ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
        c  ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
        d  ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
        i  ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
        p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
        s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

示例:
       //以行为单位删除
       删除指定行:cat -n input.txt | sed '1d'
       删除指定行区间的数据 cat -n input.txt |sed '1,4d'
       删除第m到最后行的数据:cat -n input.txt |sed '1,$d'
       
       //以行为单位添加
       在第2行后插入指定字符串:cat -n input.txt | sed '1a 第2行后插入数据'
       在第2行前插入指定字符串:cat -n input.txt | sed '1i 第2行后插入数据'
       在第2行后插入两行或多行字符串:cat -n index.html |sed '2a dkkkkk \
                                   > sdaklaf'
       
        //以行为单位替换与显示
        将第1,2行的内容替换成为'新内容’:cat -n input.txt | sed '1,2c 新内容'
        只显示文档的第3到第5行: cat -n input.txt | sed -n '3,5p'  
        
        //数据的搜寻并显示、删除、替换
        搜索正则表达式,只输出命中正则表达式的行:cat -n input.txt | sed -n '/html/p'  
                            如果不-n,则会原样输出和命中行输行,会造成命中行的重要
        搜索正则表达式,删除掉命中的行:cat -n input.txt | sed '/html/d' > newOutput.txt
        替换表达式:   sed 's/要被取代的字串/新的字串/g'
                 如将字符串html替换成jsp,   cat -n input.txt | sed 's/html/jsp/g'     

4.3 sort命令

sort命令,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
语法: sort(选项)(参数)
选项:
      -b:忽略每行前面开始出的空格字符;
      -c:检查文件是否已经按照顺序排序;
      -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
      -f:排序时,将小写字母视为大写字母;
      -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
      -m:将几个排序号的文件进行合并;
      -M:将前面3个字母依照月份的缩写进行排序;
      -n:依照数值的大小排序;
      -o<输出文件>:将排序后的结果存入制定的文件;
      -r:以相反的顺序来排序;
      -t<分隔字符>:指定排序时所用的栏位分隔字符;
      +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

参数:
      文件:指定待排序的文件列表。 

示例:
      1、sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
         sort input.txt
      2、忽略相同行使用-u选项,等同于管道符+uniq命令:
         sort -u input.txt   等同于 sort input.txt | uniq
      3、按指定分隔符切分行、指定列、指定列类型、指定排序升降
         需要:-n、-r、-k、-t选项的配合使用:
         -n指待按数字类型, -r逆序,-k为分隔字段,后跟数字代表取第几个字段
         sort -t: -nrk2 input.txt
         意为对input.txt按":"分隔每一行,对第2个字段按数值排序、降序
      4、多字段联合排序
  • 数据样本 
姓名    数学成绩    英语成绩
张三               90                               80
张四              100                              90
张五               80                               70
张六               60                               90
张七               80                               60
张八               80                               65
张九               90                               98
  • 先按数学成绩排序,相同成绩的情况按英语成绩排序
         cat input.txt | tail -n +2 | sort -k2nr -k3nr
  • 联合排序结果
              

4.4 其它常用小命令
cut: 按行处理,按分隔符将行切割成若干字段
    cat input.txt | cut -d ':' -f 1,3   
    将文本input.txt按":"分隔后, 取出第1和第3个字段

uniq:如果排序完成了,将重复的行仅显示一次。注意,若文件未排序,该命令失效。
格式:uniq [-ic] file_path
参数说明:
-i:忽略大小写;
-c:统计每行重复的次数;
     
      sort input.txt | uniq -ic 
      将input.txt升序排列后,忽略大小写去重,并输出重复的行数

wc:   统计文本文件中有多少字,多少行,多少字符。
格式:wc [-lwm] file_path    
参数说明:
-l:仅显示行数;
-w:仅显示字数(英文单词个数);
-m:字符数;
      查看一个文件中有多少行:wc -l input.txt


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值