Linux及Linux三剑客和管道

shell可以与linux内核进行操作,常见的shell有Bourne Shell、Bourne Again Shell(bin/bash)(最常用)、K shell、Shell for Root等。

linux和mac电脑可通过打开终端进行linux命令练习

windows可通过Git bash进行练习

常用命令:

mkdir:创建文件夹

ls:查看文件目录

rm:删除文件,如:rm -rf test.txt

rmdir:删除文件夹,如:rmdir zdhtest

clear:清空屏幕

vim:创建一个文件,如:vim test.sh

:wq:保存文件

./test.sh:执行文件(用bash执行)  /bin/sh test.sh:执行文件(用sh执行)

chmod +x test.sh:增加文件执行权限

chmod 777 test 修改test目录的属性,所有组可读可写可执行

cat:查看文件

文件操作命令:

ls(列出目录) 

ls -l(查看文件属性)

ls -ld(查看指定文件的属性) 如:ls -ld file.txt

cd(切换目录)

pwd(显示目前的目录)

mkdir(创建一个新的目录)

rmdir(删除一个空的目录)

cp(复制文件或目录)

rm(移除文件或目录)

mv(移动文件与目录,或修改文件与目录的名称) 如:mv file.txt ~/zdhtest

目录:d开头,

文件:-开头

连接文件:l开头:

设备文件:b开头

设备文件中的串行端口设备,如鼠标 键盘:c开头

网络操作命令

ping -c 次数 -l 时间间隔

netstat:打印linux网络系统的状态信息

-t 列出所有的tcp

-u 列出所有的udp

-l 只显示监听端口

-n 以数字形式显示地址和端口号

-p 显示进程的pid和名字

性能查看命令

top:持续监视系统性能

ps:查看进程信息,-aux 显示所有进程,包括用户,分组情况

管道与linux三剑客

Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入

如:echo "hello1234" | grep "hello"

正则演练环境:https://tool.oschina.net/regex

grep

选项:

-v 显示不被pattern匹配到的行

-i 忽略字符大小写

-n 显示匹配的行号

-c 统计匹配的行数

-o 仅显示匹配到的字符串

-E 使用ERE,相当于egrep

列如:

查找文件内容包含root的行数:grep -n root test.txt

查找文件内容不包含root的行:grep -nv root test.txt

查找文件内容以‘s’开头的(grep与正则组合使用):grep ^s test.txt

sed:

sed是流处理器,一次处理一行内容

选项:

-h 显示帮助

-n 仅显示script处理后的结果

-e<script>以选项中指定的script来处理输入的文本文件

-f<script文件>以选项中指定的script文件来处理输入的文本文件

脚本中常见的动作

a:新增  如:sed -e '4 a newline' 在脚本的第四行后面新增一行‘newline’

c:取代 如:sed -e '2,5c No 2-5 number'用c后面的内容取代2-5行的内容

d:删除 如:sed -e '2,5d' 删除2-5行

i:插入 sed -e '2i newline' 在2行前面插入新行‘newline’

p:打印 sed -n '/root/p'打印匹配到‘root’的内容

s:取代 sed -e 's/old/new/g'用new替换old  /g表示全局

查看帮助文档:man sed

比如:sed 's/hello/root/g' test.txt   表示将文件中所有的hello替换成root

注意:上面的操作不是对源文件进行的操作,是对模式空间中的文件做的操作,要保存对文件的操作需要这样写,加一个-i:sed -i 's/hello/root/g' test.txt

awk

把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

选项:

-pattern 正则表达式

-action 对匹配到的内容执行的命令(默认为输出每行内容)

常用参数:

FILENAME awk浏览的文件名

BEGIN 处理文本之前要执行的操作

END 处理文本之后要执行的操作

FS 设置输入域分隔符,等价域命令行-F选项

NF 浏览记录的域的个数(列数)

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

$0 整体记录

$1 表示当前行的第一个域......以此类推

列如:

1.awk -F : '/root/{print $0}' /rtc/passwd

表示读取etc/passwd脚本所有记录中以‘:’分隔后,包含root的行

实际结果输出:root:x:0:0:root:/root:/bin/bash

2.awk -F : 'root/{print $7}' /etc/passwd

表示读取etc/passwd脚本‘/bin/bash’

实际结果输出:/bin/bash

3.awk -F : 'NR==2{print $0}' /etc/passwd

表示读取etc/passwd脚本第二行的内容

4.awk -F : 'BEGIN{print "BEGIN,BEGIN"}'

表示文本之前输出"BEGIN,BEGIN"

5.awk -F : 'BEGIN{print "BEGIN,BEGIN"}{print $1,$2}' /etc/passwd

表示先输出"BEGIN,BEGIN",然后输出脚本/etc/passwd的第一列和第二列之前

6.echo "123|456|789|" | awk 'BEGIN{RS="|"}{print $0}'

表示换行输出以'|'分隔后的内容('|'是管道分隔符,左侧输出是右侧的输入)

总结:grep命令主要用于查找过滤,awk主要用于行列之间的操作,分隔等,sed主要用于替换。

ping test.com | grep --line-buffered '11' | awk '{print $0}'

管道前面的输出是一个动态的时,管道后面再接收其他命令,结果返回会需要很久,使用--line-buffered可以让它实时输出

ping test.com | grep --line-buffered '11' | awk '{print $NF}' 拿到最后面的一个字段

ping test.com | grep --line-buffered '11' | awk '{print $(NF-1)}' 拿到最后面的前面一个值

echo 'ping test.com' | awk 'BEGIN{var=1}/test/{print $0}END{print var}'

表示在匹配包含‘test’的内容前,定义了一个变量var=1,匹配完后,输出var的值

实际输出:

test.com

1

 echo '1234abcd5678efgh' | sed -E 's#([0-9]*)([a-z]*).*#mv \1 \2#'

表示使用正则将'1234abcd5678efgh' 中的值取出来,\1 \2表示取匹配到的值

结果输出为:mv abcd 1234

echo '1234abcd5678efgh' | sed -E 's#([0-9]*)([a-z]*).*#mv \1 \2#'  后面加个bash,执行将文件abcd重命名为1234

重命名文件:

ls | sed  -E 's#(.*)#mv \1 1234#'
表示将ls下的文件,重命名为1234

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值