2024-03-11
Linux
00
请注意,本文编写于 118 天前,最后修改于 100 天前,其中某些信息可能已经过时。

目录

文件和目录操作
touch
ls
mv
cp
rm
mkdir
cd
pwd
history
/
cat
head
tail
快捷键
管道
文件内容过滤
wc
grep
语法
常用选项:
更多参数说明
sed
语法
参数说明
动作说明
简单理解
示例
以行为单位的新增/删除
以行为单位的替换与显示
数据的搜索并显示
数据的搜索并删除
数据的搜索并执行命令
数据的查找与替换
小测试
直接修改文件内容(危险动作)
awk
语法
选项参数说明
基本用法
用法一
用法二
用法三
用法四

文件和目录操作

linux 下的指令可以通过 tab 键进行自动补全。 关于复制文本 windows/linux 下:Ctrl + insert,mac 下:command + c;粘贴文本:windows/linux 下:Ctrl + insert,mac 下:command + v。

touch

新建文件

示例1:touch 1.txt # 创建单个文件

示例2:touch test{1..10}.txt # 批量创建文件 touch test{a..f}.txt

示例3:touch /root/4.txt # 在指定的 /root 目录下,创建文件 4.txt

如果 touch 的文件名称重复了,不会覆盖原文件

ls

查看目录下的文件

ls 全称 list

ls:显示当前目录下的内容

示例1:ls test.txt # 查看 test.txt 文件是否存在,有会显示文件名称,没有会报错

示例2:ls *.txt # 查看以 txt 结尾的所有文件,类似 windows 下的 *. 后缀名搜索

示例3:ls -1 # 以一行一个文件的方式显示,注意这是-1,是数字1,不是l昂

示例4:ls -a # 查看所有文件,包括隐藏文件,touch .文件名,.开头的就是隐藏文件

示例5:ls -a -1 # 查看所有文件,以一行一个来显示

示例6:ls -l # 类似于windows的详细列表,这个-l不是数字1

以 . 开头的文件是隐藏文件,默认不显示

mv

移动、也可以重命名

mv 全称 move

示例1:mv 222.txt 123.txt # 将 222.txt 文件重命名为 123.txt

示例2:mv 123.txt /opt # 将 当前目录下的 123.txt 移动到 /opt 目录下

示例3:mv rrx Rrx # 将 rrx 目录改名为 Rrx

cp

复制

cp 全称 copy,复制有个特点,就是如果复制到的文件夹中有同名的文件,会帮我们改名字并加上副本两个字, linux不会帮我们改名字,我们需要自己指定名字,后缀名尽量不要改。

示例1:cp test01.txt /opt/ # 将当前目录下的 test01.txt 复制到 /opt 目录下

示例2:cp -a dev04 /opt/ # 将目录 dev04 复制到 /opt 下,注意 dev04 的上一级目录来复制它,在它内部是不能复制这个文件夹的

rm

删除,注意 linux 和 windows 不同,没有回收站,删了就是删了

示例1:rm /opt/123.txt # 将 /opt 目录下的 123.txt 文件删除,需要回复 y 确认删除

示例2:rm -f /opt/test01.txt # 将 /opt 目录下的 test01.txt 文件删除,不需要回复,强制删除,很多指令都有自己的参数,而且有好多,-f就是强制删除的意思

示例3:rm 文件1 文件2 文件3 # 删除多个文件

删除一个目录,linux的参数大部分没有先后顺序

直接删除文件夹,比如 rm dev,这是不行的,会报错,需要带上 r 参数

mkdir

创建文件夹 创建目录 directory,这里说的目录就是文件夹,默认显示是蓝色的字体,文件显示是白色的字 体

mkdir 全称 make directory

示例1:mkdir dev # 创建一个 dev 目录

示例2:mkdir dev{01..10} # 批量创建多个目录

示例3:mkdir -p 1/2/3/4/5/6 # 一次性创建多级子目录

cd

切换目录

cd 全称 change directoy

示例1:cd local # 切换到 local 目录中

示例2:cd .. # 切换到上一级目录

示例3:cd / # 切换到根目录

pwd

print work directory

pwd : 打印当前工作目录

history

历史指令查询

可以使用 ! 调用历史命令

!n 调用第 n 条历史命令

!xx会自动找最近一次执行的 xx 开头的指令

清除历史记录:history -c # 这是清除内存中的历史指令

删除主文件夹下面 .bash_history # 这是清除硬盘中的历史指令,内存中的指令会自动备份到.bash_history中,但是有个延迟,退出登录之后,才会将历史指令同步到硬盘文件中

每个用户家目录下都有一个 .bash_history,记录的是自己用户的历史指令

.bash_history 默认记录最近的1000条指令,通过 echo $HISTSIZE 可以查看,可以配置的更大或者更小一 些,vi /etc/profile

/

目录分隔符: windows:C:\Users|ls198\Desktop # 微软故意用 \ ,其他 unix 分支系统都是 / 来分割

linux:/root/Rrx/xx

linux 只有一个盘符,不像 Windows,可以设置 c 盘,d 盘...

/ 是根目录

/root 根目录下面的 root 目录

cat

从上往下顺序查看文本内容:cat

从下往上倒着查看文本内容:tac

head

查看文件头几行

示例1:head test.txt # 查看文件前 10 行,默认

示例2:head -n 5 test.txt # 查看文件前 5 行

示例3:head -5 test.txt # 查看文件前 5 行

tail

查看文件倒数几行

示例1:tail test.txt # 查看文件的倒数 10 行,默认

示例2:tail -n 5 test.txt # 查看文件的倒数 5 行

示例3:tail -5 test.txt # 查看文件的倒数5 行

快捷键

  • Ctrl + a : 光标跳转至正在输入的命令行的首部
  • Ctrl + e : 光标跳转至正在输入的命令行的尾部
  • Ctrl + c : 终止前台运行的程序,比如 ping 指令
  • Ctrl + d : 在 shell 中,ctrl-d 表示推出当前 shell
  • Ctrl + z : 将任务暂停,挂至后台, 执行fg命令继续运行
  • Ctrl + l : 清屏,和 clear 命令等效
  • Ctrl + k : 删除从光标到行末的所有字符
  • Ctrl + u : 删除从光标到行首的所有字符
  • Ctrl + r : 搜索历史命令, 利用关键字搜索
  • ctrl + w : 光标往前删除一个参数,以空格为分割

管道

管道符号:|,可以将前面指令的执行结果,作为后面指令的操作内容。

示例:比如我们通过管道来过滤出ip地址:

bash
[root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:83:e4:d9 brd ff:ff:ff:ff:ff:ff inet 10.0.0.128/24 brd 10.0.0.255 scope global noprefixroute dynamic ens33 valid_lft 1253sec preferred_lft 1253sec inet6 fe80::ffe1:31ed:56dc:d9aa/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# ip addr|tail -4 inet 10.0.0.128/24 brd 10.0.0.255 scope global noprefixroute dynamic ens33 valid_lft 1224sec preferred_lft 1224sec inet6 fe80::ffe1:31ed:56dc:d9aa/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# ip addr|tail -4|head -1 inet 10.0.0.128/24 brd 10.0.0.255 scope global noprefixroute dynamic ens33 [root@localhost ~]# ip addr|tail -4|head -1|cut -c 10-24 # cut -c 10-19表示从第10个字符显示到第19个字符,这个指令可以忽略,大致了解一下即可,因为字符长度不固定,切的时候有可能切不准确 10.0.0.128

文件内容过滤

wc

统计,wc 全称 word Count,计数

示例1:wc -l Rrx.txt # 统计文件中有多少行

示例2:wc -c Rrx.txt # 统计文件中有多少字符

grep

linux grep(global regular expression) 命名用于查找文件里符合条件的字符串或正则表达式。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一行显示出来,若不指定如何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

语法

bash
grep [options] pattern [files] grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>[-f<范本文件>][--help][范本样式][文件或目录...]
  • pattern :表示要查找的字符串或正则表达式。
  • files :表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。

常用选项:

  • -n 显示匹配行的行号
  • -c 只打印匹配的行数
  • -i 不区分大小写
  • -v 反向搜索,取反
  • -r:递归查找子目录中的文件
  • -l:只打印匹配的文件名
  • -w 精准匹配
  • -o 只显示匹配的结果
  • -A1 同时打印搜索结果行的后一行
  • -B3 同时打印搜索结果行的前三行
  • -C2 同时打印搜索结果行的上下各俩行
  • -E 扩展正则表达式
  • -P 使用 perl 正则

更多参数说明

  • -a 或 --text : 不要忽略二进制的数据。
  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的容。
  • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c 或 --count : 计算符合样式的列数。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后内容。
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指将回报信息并停止动作。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --invert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。
  • -y : 此参数的效果和指定"-i"参数相同。

sed

linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理,编辑文本文件。sed 主要用来自动编辑一个或多个、简化对文件的反复操作、编写转换程序。

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e <script>--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h--help 显示帮助。
  • -n--quiet--silent 仅显示 script处理后的结果。
  • -V--version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!

简单理解

  • -n : 使用安静(silent)模式。在一般的 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
  • -r : sed 的动作支持的是延申型正则表达式的语法。
  • -i : 直接修改读取的文件内容,而不是输出到终端。

示例

我们先创建一个 test.txt 文件,内容如下:

HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test Google Taobao Runoob Tesetfile Wiki

test.txt 文件的第四行后面添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

bash
sed -e 4a\newLine test.txt

在使用 sed 命令后,输出结果如下:

HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test newLine Google Taobao Runoob Tesetfile Wiki

以行为单位的新增/删除

test.txt 的内容列出来并且列印行号,同时,请将第 2 ~ 5 行删除!

bash
nl test.txt | sed '2,5d'
bash
1 HELLO LINUX! 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki

sed 的动作为 2,5d,那个 d 是删除的意思,因为删除了 2-5 行,所以显示的数据就没有 2-5 行了, 另外,原本应该是要下达 sed -e 才对,但没有 -e 也是可以的,同时也要注意的是, sed 后面接的动作,请务必以 '...' 两个单引号括住喔!

只要删除第 2 行:

bash
nl test.txt | sed '2d'

要删除第 3 行到最后一行:

bash
nl test.txt | sed '3,$d'

在第二行后(即第 3 行)加上 drink tea 字样:

bash
nl test.txt | sed '2a drink tea'

如果是要在第 2 行前:

bash
nl test.txt | sed '2i drink tea'

如果是要增加俩行以上,在第 2 行后面加入俩行字,例如 Drink tea or ... 与 drink beer:

bash
nl test.txt | sed '2a Drink tea or ... \ drink beer'

每一行之间都必须要以反斜杠 \ 来进行新行标记。上面的例子中,我们可以发现在第一行的最后面就有 \存在。

以行为单位的替换与显示

将第 2-5 行的内容取代为 No 2-5 number 呢:

bash
nl test.txt | sed '2,5c No 2-5 number'

通过这个方法我们就能够将数据整行取代了。

仅列出第 5-7 行:

bash
nl test.txt | sed -n '5,7p'

可以通过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。

数据的搜索并显示

搜索 test.txtoo 关键字的行:

bash
nl test.txt | sed -n '/oo/p'

如果 root 找到,除了输出所有行,还会输出匹配行。

数据的搜索并删除

删除 test.txtoo 关键字的行,并输出其他行:

bash
nl test.txt | sed '/oo/d'

数据的搜索并执行命令

搜索 test.txt,找到 oo 对应的行,执行后面花括号中的一组命令,每个命令之间用分号隔离,这里把 oo 替换为 kk,再输出这行

bash
nl test.txt | sed -n '/oo/{s/oo/kk/;p;q}'

最后的 q 是退出

数据的查找与替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的查找与替换。

sed 的查找与替换的与 vi 命令类似,语法格式如下:

bash
sed 's/要被取代的字串/新的字串/g'

test.txt 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准输出:

bash
sed -e 's/oo/kk/' test.txt

g 标识符表示全局查找替换,使 sed 对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件。

选项 i 使 sed 修改文件:

bash
sed -i 's/oo/kk/g' test.txt

批量操作当前目录下以 test 开头的文件:

bash
sed -i 's/oo/kk/g' ./test*

小测试

/sbin/ifconfig 标准输出准确提取 ip

直接修改文件内容(危险动作)

sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由于这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!

sed-i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!通过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

bash
awk [选项参数] 'script' var=value file(s) awk [选项参数] -f scriptfile var=value file(s)

选项参数说明

  • v var=value or --asign var=value:赋值一个用户定义变量。
  • -f scripfile or --file scriptfile:从脚本文件中读取 awk 命令。
  • -mf nnn and -mr nnn:对 nnn 值设置内在限制,-mf 选项限制分配给 nnn 的最大块数目;-mr 选项限制记录的最大数目。这两个功能是 Bell实验室版awk 的扩展功能,在 标准awk 中不适用。
  • -W compact or --compat, -W traditional or --traditional:在兼容模式下运行 awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
  • -W copyleft or --copyleft, -W copyright or --copyright:打印简短的版权信息。
  • -W help or --help, -W usage or --usage:打印全部 awk 选项和每个选项的简短说明。
  • -W lint or --lint:打印不能向传统 unix 平台移植的结构的警告。
  • -W lint-old or --lint-old:打印关于不能向传统unix平台移植的结构的警告。
  • -W posix:打开兼容模式。但有以下限制,不识别:/x函数关键字func换码序列以及 当fs是一个空格时,将新行作为一个域分隔符 ;操作符 ****= 不能代替 ^^=fflush 无效。
  • -W re-interval or --re-inerval:允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式 [[:alpha:]]
  • -W source program-text or --source program-text:使用 program-text 作为源代码,可与 -f 命令混用。
  • -W version or --version:打印 bug 报告信息的版本。

基本用法

log.txt 文本内容如下:

bash
2 this is a test 3 Do you like awk This's a test 10 There are orange,apple,mongo

用法一

bash
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号

示例:

bash
# 每行按空格或TAB分割,输出文本中的1、4项 $ awk '{print $1,$4}' log.txt --------------------------------------------- 2 a 3 like This's 10 orange,apple,mongo # 格式化输出 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt --------------------------------------------- 2 a 3 like This's 10 orange,apple,mongo

用法二

bash
awk -F #-F相当于内置变量FS, 指定分割字符

示例:

bash
# 使用","分割 $ awk -F, '{print $1,$2}' log.txt --------------------------------------------- 2 this is a test 3 Do you like awk This's a test 10 There are orange apple # 或者使用内建变量 $ awk 'BEGIN{FS=","} {print $1,$2}' log.txt --------------------------------------------- 2 this is a test 3 Do you like awk This's a test 10 There are orange apple # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割 $ awk -F '[ ,]' '{print $1,$2,$5}' log.txt --------------------------------------------- 2 this test 3 Are awk This's a 10 There apple

用法三

bash
awk -v # 设置变量

示例:

bash
$ awk -va=1 '{print $1,$1+a}' log.txt --------------------------------------------- 2 3 3 4 This's 1 10 11 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt --------------------------------------------- 2 3 2s 3 4 3s This's 1 This'ss 10 11 10s

用法四

bash
awk -f {awk脚本} {文件名}

示例:

bash
$ awk -f cal.awk log.txt
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:@Rrx

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!