3

Linux-day03

显示/etc/services文件的第11行到第20行的内容

[root@qls ~]# head  -20  /etc/services  | tail
[root@qls ~]# grep  -n  '.'  /etc/services  | grep  -A 9  '^11:'

文件查找命令

locate		#根据本地数据库进行查找

yum install  mlocate  -y		#下载软件包


[root@qls ~]# updatedb		#需要更新数据库

[root@qls ~]# locate  -r  hostname$			#支持正则,需加-r选项
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname

which		#查找命令的绝对路径

[root@qls ~]# which   hostname
/usr/bin/hostname

whereis		#查找文件

[root@qls ~]# whereis   hostname
hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz

type		#查看命令类型

-a		#查看内置命令的绝对路径

[root@qls ~]# type  hostname
hostname is /usr/bin/hostname
[root@qls ~]# type  cd
cd is a shell builtin
[root@qls ~]# type  -a  cd
cd is a shell builtin
cd is /usr/bin/cd

find	#查找文件

[root@qls ~]# find  /  -type  f  -name "hostname"
/proc/sys/kernel/hostname
/etc/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname

文件上传与下载

#联网下载命令

curl		#通过url的方式进行文件传输

选项:
	-o		#指定下载路径
	
[root@qls ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget		#下载软件包

选项:
	-O		#指定下载路径
	
[root@qls ~]# wget  -O  nginx-1.tar.gz  http://nginx.org/download/nginx-1.14.2.tar.gz


#本地上传与下载命令

yum install -y  lrzsz		#需要下载软件包

rz  		#上传,支持上传4G以下的。

-E		#出现名称相同进行重命名,名称规则整数(0-255)

sz			#下载

[root@qls ~]# sz  services

字符处理命令

sort		#排序

#环境
cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF


选项:
	-t		#指定分隔符,默认以空白字符为分隔符
	-k		#指定列数,默认是第一列
	-n		#以数字的大小方式进行排序
	-r		#倒序
[root@qls ~]# sort  -t ':'  -rnk3  passwd


uniq		#去重,统计,只能去重重复相邻的行

选项:
	-c		#统计次数

cat  >>test.txt<<EOF
egon
tank
egon
tank
oldboy
frank
EOF

[root@qls ~]# sort  test.txt 
egon
egon
frank
oldboy
tank
tank
[root@qls ~]# sort  test.txt  | uniq 
egon
frank
oldboy
tank
[root@qls ~]# sort  test.txt  | uniq  -c
      2 egon
      1 frank
      1 oldboy
      2 tank
[root@qls ~]# sort  test.txt  | uniq  -c | sort  
      1 frank
      1 oldboy
      2 egon
      2 tank
[root@qls ~]# sort  test.txt  | uniq  -c | sort  -rn
      2 tank
      2 egon
      1 oldboy
      1 frank


cut		#取列,默认是以tab键为分隔符

选项:
	-d		#指定分隔符
	-f		#指定取出的列
	-c		#取指定的字符

[root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     16 /sbin/nologin
      1 /sbin/shutdown
[root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c |sort -n
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
      1 /sbin/shutdown
     16 /sbin/nologin
[root@qls ~]# cut -d  ':'  -f7  passwd  | sort    |uniq  -c |sort -rn
     16 /sbin/nologin
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync
      1 /bin/bash
[root@qls ~]# echo   'oldboyfgkhkjg'  |cut  -c  1-2
ol
[root@qls ~]# echo   'oldboyfgkhkjg'  |cut  -c  3-6
dboy

wc		#统计

选项:
	-l		#统计文件的行数
	-c		#统计文件的字节数
	-w		#统计文件的列数
	
tr		#替换

选项
	-d		#删除字符
	
tr	‘a’  'b' < file2.txt

sed和awk

sed		#擅长替换,增删改查

选项
	-i		#替换
	-n		#取消默认输出
	-r		#支持扩展正则
	-i.bak	#先备份在替换
	p		#打印
	d		#删除
	s		#替换
	g		#全局
	a		#追加
	i		#插入
	$		#结尾

查

[root@qls ~]# sed  -n '11,20p'  services 		#取出第11行到20行的内容
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
#       http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Each line describes one service, and is of the form:
#
[root@qls ~]# sed  -n  '11p'  services		#取出单行
# are included, only the more common ones.
[root@qls ~]# sed -n  '11p;20p'    services		#取出不连续的多行
# are included, only the more common ones.
#

[root@qls ~]# sed  -n  '/root/p'  passwd 	#过滤字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@qls ~]# sed  -rn  '/root|halt/p'  passwd 	#过滤多个字符串
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin

删
[root@qls ~]# sed  '5d'  test.txt
egon
tank
egon
tank
frank
[root@qls ~]# sed  '3,5d'  test.txt
egon
tank
frank
[root@qls ~]# sed  '3d;5d'  test.txt
egon
tank
tank
frank
[root@qls ~]# sed  '/oldboy/d'  test.txt
egon
tank
egon
tank
frank

改
[root@qls ~]# sed  's#oldboy#oldgirl#g'  test.txt 
egon
tank
egon
tank
oldgirl
frank
[root@qls ~]# sed -i  's#oldboy#oldgirl#g'  test.txt 
[root@qls ~]# cat test.txt
egon
tank
egon
tank
oldgirl
frank
[root@qls ~]# sed 's#egon#jason#g'  test.txt	#查看修改之后的结果
jason
tank
jason
tank
oldgirl
frank
[root@qls ~]# sed  -i.bak  's#egon#jason#g'  test.txt	#先备份,在修改
[root@qls ~]# cat test.txt
jason
tank
jason
tank
oldgirl
frank
[root@qls ~]# ll
total 676
-rw-r--r--. 1 root root     25 Aug 16 10:35 file2.txt
-rw-r--r--. 1 root root     25 Aug 16 10:01 file.txt
-rw-r--r--. 1 root root    938 Aug 16 10:06 passwd
-rw-r--r--. 1 root root 670293 Aug 16 09:57 services
-rw-r--r--. 1 root root     36 Aug 16 11:16 test.txt
-rw-r--r--. 1 root root     34 Aug 16 11:14 test.txt.bak


[root@qls ~]# sed  '1,3s#jason#egon#g'  test.txt	#按行进行替换	
egon
tank
egon
tank
oldgirl
frank
jason
[root@qls ~]# sed  '1s#jason#egon#g'  test.txt
egon
tank
jason
tank
oldgirl
frank
jason


#临时关闭selinux
[root@qls ~]# getenforce 
Enforcing
[root@qls ~]# setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@qls ~]# setenforce  0
[root@qls ~]# getenforce 
Permissive

#永久关闭selinux
[root@qls ~]# sed '7s#enforcing#disabled#g'  /etc/sysconfig/selinux -i

增
[root@qls ~]# cat test.txt
jason
tank
jason
tank
oldgirl
frank
jason
[root@qls ~]# sed  '2aegon'  test.txt
jason
tank
egon
jason
tank
oldgirl
frank
jason
[root@qls ~]# sed   '3iegon'  test.txt
jason
tank
egon
jason
tank
oldgirl
frank
jason
[root@qls ~]# sed  '$aegon'  test.txt
jason
tank
jason
tank
oldgirl
frank
jason
egon
[root@qls ~]# sed '1iegon'  test.txt
egon
jason
tank
jason
tank
oldgirl
frank
jason

后向引用
[root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#.*t (.*)/.*#\1#g'
10.0.0.100
[root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#\1#g'
    inet 
[root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#\2#g'
10.0.0.100
[root@qls ~]# ip a s eth0 |sed  -n '3p'  |sed  -r 's#(.*t )(.*)(/.*)#\3#g'
/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0  |sed  -rn '3s#(.*t )(.*)(/.*)#\2#gp'
10.0.0.100

awk

选项
	-F		#指定分隔符,默认以空白字符
	NR		#行号
	$n		#取某列
	$NF		#最后一列
	$0		#表示整行内容
	!		#非,取反

取行
[root@qls ~]# awk  'NR==1'  passwd 
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk  'NR==1,NR==3' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk  'NR==1;NR==3'  passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk  'NR>=1'  passwd
[root@qls ~]# awk  'NR>=1 && NR<=3'  passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk  'NR<3 || NR>3' passwd

#过滤
[root@qls ~]# awk  '/root/'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# awk  '/root|halt/'  passwd 
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# awk  '!/\/sbin\/nologin/'  passwd 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

#取列
[root@qls ~]# awk  -F '[:]'  '{print $7}'  passwd
[root@qls ~]# awk  -F '[:]'  '{print $NF}'  passwd 

[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:10:88:2d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::52f8:a673:eea3:dc47/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 |awk  'NR==3'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]'  '{print $2}'

[root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]'  '{print $6}'
10.0.0.100
[root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]*'  '{print $2}'
inet
[root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]*'  '{print $3}'
10.0.0.100
[root@qls ~]# ip a s eth0 |awk  'NR==3'  | awk  -F '[ /]+'  '{print $3}'
10.0.0.100
[root@qls ~]# ip a s eth0 | awk  -F '[ /]+'  'NR==3{print $3}'
10.0.0.100

[root@qls ~]# ifconfig eth0 |  awk  'NR==2{print $2}'
10.0.0.100
[root@qls ~]# ifconfig   eth0 | sed  -nr  '2s#.*t (.*)  n.*#\1#gp'
10.0.0.100


#显示行号
[root@qls ~]# awk  '{print NR,$0}' passwd

文件属性

-rw-r--r--. 1 root root     25 Aug 16 10:01 file.txt

-rw-r--r--.	 #类型和权限	 -	文件类型

1			 #表示硬链接的数量

root		 #属主

root		 #属组

25			 #文件的大小

Aug 16 10:01 #最后修改的修改时间

file.txt		#文件名

文件类型
-		#普通文件
d		#目录
l		#软连接文件
b		#块设备
c		#字符设备
s		#套接字文件
p		#管道文件

[root@qls ~]# find  /  -type  p    -ls

[root@qls ~]# find  /  -type  s    -ls

file		#查看文件的类型

扩展名
	txt
	log
	sh
	py
	html
	php
	conf
	xml
	zip
	tar.gz
	cfg
		

链接文件

用户数据:数据块,数据的真事儿存放位置,block
元数据:文件属性信息,inode。

软链接和硬链接

[root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.17  nginx	#版本升级
[root@qls ~]# rm -f  nginx  &&  ln -s  nginx-1.16  nginx	#版本回退

软连接和源文件属于不同的类型的文件

软连接文件中存放是源文件的路径

软连接可以跨区创建,可以文件目录都可以创建

删除源文件,软连接文件存在,会失效

企业版本升级
代码上线
目录找不到

ln命令默认创建硬链接文件
硬链接文件跟源文件iNode号是相同的
只能对文件创建硬链接,不能对目录创建

软链接和硬链接的区别?

从概念上面回答
	软链接相当于windows上面的快捷方式
	硬链接就是给源文件加个入口
从创建
	ln命令默认创建的是硬链接,只能对文件创建
	ln命令加上选项-s创建软链接,可以跨区创建
从删除方面
	删除软链接文件,对源文件和硬链接文件没有影响
	删除硬链接文件,对源文件和软链接没有影响
	删除源文件,硬链接没有影响,软链接失效,红底白字闪烁状
	只有删除源文件和硬链接文件,文件才会被真正的删除

命令执行过程(扩展)

hash表

hash		#查看命令缓存
hash	-d   name   #删除指定命令缓存
hash	-r		#清空命令缓存表


1) 检查执行的命令是否使用的是绝对路径执行的。
​
2) 检查ping命令是否存在alias别名
​
3) 检查ping命令是内部命令还是外部命令
​
4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取
​
5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置
​
6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

vim文件编辑器

命令模式(普通模式)

编辑模式

末行模式(底行模式)


命令模式

光标移动,删除,复制,粘贴

l		#当前光标向右移动一个字符,nl,移动多个
h		#当前光标向左移动一个字符,nh,移动多个
j		#当前光标向下移动一个字符,nj,移动多个
k		#当前光标向上移动一个字符,nk,移动多个
^		#当前光标移动当前行行首
$		#当前光标移动当前行行尾
G		#移动文件的行尾
gg		#移动到文件的行首  1G
ngg		#n=数字,跳转到某行  nG
dd		#删除当前光标所在行
ndd		#n=数字,删除当前光标所在行向下多少行,包含当前行
dG		#删除当前光标向下的所有内容
p		#在当前行的下一行粘贴,粘贴多次,np
P		#在当前行的上一行粘贴,粘贴多次,np
yy		#复制当前行
nyy		#复制在当前行向下多少行,包含当前行
r		#单个替换当前光标所在位置进行替换
R		#多个替换
u		#撤销
ctrl键+r #回滚,回滚撤销
de/dw	#删除当期光标向后的一组字符串
D		#删除当前所在行光标向后的所有内容
x/delete#当前光标所在位置从前向后删除一个
X	    #当前光标所在位置从后向前删除一个

文件过多
Ctrl键+f		#向下翻页
ctrl键+b		#向上翻页


编辑模式

i		#在当前光标所在字符前插入字符,
I		#在当前光标所在行行首进行插入字符
a		#在当前光标所在字符后插入字符
A		#在当前光标所在行行尾进行插入字符
o		#在当前向下另起一行进行编辑
O		#在当前向上另起一行进行编辑
C		#删除当前光标所在位置向后的当前行内容,并进入编辑模式
ce/cw	#删除当前光标所在行的位置一组字符串,并进入编辑模式
s		#删除当前所在字符,并进入编辑模式
S		#删除当前所在行,并进入编辑模式

退出编辑模式,按esc键


末行模式

:w		#保存
:q		#退出
:wq		#保存退出
:x		#保存退出
ZZ		#保存退出
/		#搜索
	n	#向下查找
	N	#向上查找
:n		#数字,跳转到某行
:nd		#删除某行
:n,md	#删除从n行删除到m行,n<m

:w  /root/test.txt  #把当前文件的内容保存一个新的文件中
:r	 /root/test.txt #从某个文件读入内容进入该文件
:10r	/root/test.txt #从某个文件读入内容进入该文件放在第10行后面

替换
:%s#old#new#g    #全局替换
:1,4s#old#new#g	 #进行某行替换


视图模式

批量添加
		光标移动到要添加内容的第一行或最后一行
		ctrl键+v		进入可视快模式
		使用光标选中要添加的位置
		shift键+i	进入编辑模式
		输入要添加的内容,只输入一行
		按esc键退出
		见证奇迹的时刻
		
批量删除
		光标移动到要删除内容的上面,第一行或最后一行
    	ctrl键+v		进入可视快模式
    	选中要删除的内容
    	按d/x	删除
   
批量删除行(移动,剪切)
		光标移动到要删除行的上面,第一行或最后一行
        shift键+v	进入可视行模式
        选中要删除的行
        d  删除
        
批量复制行
		光标移动到要复制行的上面,第一行或最后一行
		shift键+v	进入可视行模式
		选中要复制的行,
		按yy
		按p粘贴


vim工作方式

vim打开一个文件,进入的是命令模式

在编辑文件的时候,系统会生成一个临时文件

在退出文件之后,系统会自动删除临时文件


vim故障

在编辑文件时,非正常退出,

再次进入时,会提示警告,
E325: ATTENTION
Found a swap file by the name ".services.swp"
          owned by: root   dated: Fri Aug 16 17:46:45 2019
         file name: ~root/services
          modified: YES
         user name: root   host name: qls
        process ID: 33989
While opening file "services"
             dated: Fri Aug 16 09:57:51 2019

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r services"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".services.swp"
    to avoid this message.

Swap file ".services.swp" already exists!

解决:
vim  -r		filename

保存退出

删除临时文件

rm -r  .services.swp


vim变量

:set nu 		#显示行号
:set list		#给每行的结尾加个制表符
:set  ic		#搜索时忽略大小写
:noh			#取消高亮

vim配置文件(个人)
[root@qls ~]# cat  .vimrc 
set nu

全局
/etc/vimrc


文件比对

diff  #不推荐使用
vimdiff		#推荐使用

[root@qls ~]# vimdiff  file.txt  file2.txt


vim打开多个文件

水平分割
[root@qls ~]# vim -o  file.txt  file2.txt

垂直分割
[root@qls ~]#  vim -O  file.txt  file2.txt

切换文件时,使用Ctrl键+ww


posted @ 2019-11-14 01:04  Mrchenwang  阅读(136)  评论(0编辑  收藏  举报