linux 下的指令可以通过 tab 键进行自动补全。 关于复制文本 windows/linux 下:Ctrl + insert,mac 下:command + c;粘贴文本:windows/linux 下:Ctrl + insert,mac 下:command + v。
新建文件
示例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 全称 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 全称 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 全称 copy,复制有个特点,就是如果复制到的文件夹中有同名的文件,会帮我们改名字并加上副本两个字, linux不会帮我们改名字,我们需要自己指定名字,后缀名尽量不要改。
示例1:cp test01.txt /opt/
# 将当前目录下的 test01.txt 复制到 /opt 目录下
示例2:cp -a dev04 /opt/
# 将目录 dev04 复制到 /opt 下,注意 dev04 的上一级目录来复制它,在它内部是不能复制这个文件夹的
删除,注意 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 参数
创建文件夹 创建目录 directory,这里说的目录就是文件夹,默认显示是蓝色的字体,文件显示是白色的字 体
mkdir 全称 make directory
示例1:mkdir dev
# 创建一个 dev 目录
示例2:mkdir dev{01..10}
# 批量创建多个目录
示例3:mkdir -p 1/2/3/4/5/6
# 一次性创建多级子目录
切换目录
cd 全称 change directoy
示例1:cd local
# 切换到 local 目录中
示例2:cd ..
# 切换到上一级目录
示例3:cd /
# 切换到根目录
print work directory
pwd
: 打印当前工作目录
历史指令查询
可以使用 !
调用历史命令
!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
从下往上倒着查看文本内容:tac
查看文件头几行
示例1:head test.txt
# 查看文件前 10 行,默认
示例2:head -n 5 test.txt
# 查看文件前 5 行
示例3:head -5 test.txt
# 查看文件前 5 行
查看文件倒数几行
示例1:tail test.txt
# 查看文件的倒数 10 行,默认
示例2:tail -n 5 test.txt
# 查看文件的倒数 5 行
示例3:tail -5 test.txt
# 查看文件的倒数5 行
管道符号:
|
,可以将前面指令的执行结果,作为后面指令的操作内容。
示例:比如我们通过管道来过滤出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 全称 word Count,计数
示例1:wc -l Rrx.txt
# 统计文件中有多少行
示例2:wc -c Rrx.txt
# 统计文件中有多少字符
linux grep(global regular expression) 命名用于查找文件里符合条件的字符串或正则表达式。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一行显示出来,若不指定如何文件名称,或是所给予的文件名为
-
,则 grep 指令会从标准输入设备读取数据。
bashgrep [options] pattern [files]
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>[-f<范本文件>][--help][范本样式][文件或目录...]
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
显示版本信息。-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
文件的第四行后面添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:
bashsed -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 行删除!
bashnl test.txt | sed '2,5d'
bash1 HELLO LINUX! 6 Taobao 7 Runoob 8 Tesetfile 9 Wiki
sed
的动作为 2,5d
,那个 d
是删除的意思,因为删除了 2-5 行,所以显示的数据就没有 2-5 行了, 另外,原本应该是要下达 sed -e
才对,但没有 -e
也是可以的,同时也要注意的是, sed
后面接的动作,请务必以 '...' 两个单引号括住喔!
只要删除第 2 行:
bashnl test.txt | sed '2d'
要删除第 3 行到最后一行:
bashnl test.txt | sed '3,$d'
在第二行后(即第 3 行)加上 drink tea
字样:
bashnl test.txt | sed '2a drink tea'
如果是要在第 2 行前:
bashnl test.txt | sed '2i drink tea'
如果是要增加俩行以上,在第 2 行后面加入俩行字,例如 Drink tea or
... 与 drink beer
:
bashnl test.txt | sed '2a Drink tea or ... \ drink beer'
每一行之间都必须要以反斜杠 \
来进行新行标记。上面的例子中,我们可以发现在第一行的最后面就有 \
存在。
将第 2-5 行的内容取代为 No 2-5 number
呢:
bashnl test.txt | sed '2,5c No 2-5 number'
通过这个方法我们就能够将数据整行取代了。
仅列出第 5-7 行:
bashnl test.txt | sed -n '5,7p'
可以通过这个 sed
的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。
搜索 test.txt
有 oo
关键字的行:
bashnl test.txt | sed -n '/oo/p'
如果 root
找到,除了输出所有行,还会输出匹配行。
删除 test.txt
有 oo
关键字的行,并输出其他行:
bashnl test.txt | sed '/oo/d'
搜索 test.txt
,找到 oo
对应的行,执行后面花括号中的一组命令,每个命令之间用分号隔离,这里把 oo
替换为 kk
,再输出这行
bashnl test.txt | sed -n '/oo/{s/oo/kk/;p;q}'
最后的 q
是退出
除了整行的处理模式之外, sed
还可以用行为单位进行部分数据的查找与替换。
sed
的查找与替换的与 vi
命令类似,语法格式如下:
bashsed 's/要被取代的字串/新的字串/g'
将 test.txt
文件中每行第一次出现的 oo
用字符串 kk
替换,然后将该文件内容输出到标准输出:
bashsed -e 's/oo/kk/' test.txt
g
标识符表示全局查找替换,使 sed
对文件中所有符合的字符串都被替换,修改后内容会到标准输出,不会修改原文件。
选项 i
使 sed
修改文件:
bashsed -i 's/oo/kk/g' test.txt
批量操作当前目录下以 test
开头的文件:
bashsed -i 's/oo/kk/g' ./test*
从
/sbin/ifconfig
标准输出准确提取ip
sed
可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由于这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!
sed
的 -i
选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim
可能会疯掉!因为文件太大了!那怎办?就利用 sed
啊!通过 sed
直接修改/取代的功能,你甚至不需要使用 vim
去修订!
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
bashawk [选项参数] '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 文本内容如下:
bash2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo
bashawk '{[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
bashawk -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
bashawk -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
bashawk -f {awk脚本} {文件名}
示例:
bash$ awk -f cal.awk log.txt
本文作者:@Rrx
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!