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