SHELL中常用的一些簡單命令
1.diff
用法:
diff [options] files|directorys
輸出資訊:
[num1,num2][a|c|d][num3,num4]
num1,num2 ##第一個檔案中的行
a ##新增
c ##更改
d ##刪除
< ##第一個檔案中的內容
> ##第二個檔案中的內容
num3,num4 ##第二個檔案中的行
常用引數:
-b ##忽略空格
-B ##忽略空行
-i ##忽略大小寫
-c ##顯示檔案所有內容並標示不同
-r ##對比目錄
-u ##合併輸出
[root@localhost mnt]# cat westos
hello westos
[root@localhost mnt]# cat westos1
hello westos
123
[root@localhost mnt]# diff westos westos1
1a2
> 123
[root@localhost mnt]# vim westos1
[root@localhost mnt]# diff westos westos1
1c1,2
< hello westos
---
> hello westos
> 123
[root@localhost mnt]# diff -b westos westos1
1a2
> 123
[root@localhost mnt]# diff -B westos westos1
[root@localhost mnt]# diff westos westos1
1c1
< hello westos
---
> Hello westos
[root@localhost mnt]# diff -i westos westos1
[root@localhost mnt]# diff -c westos westos1
*** westos 2020-12-14 16:24:43.062000000 +0800
--- westos1 2020-12-14 16:43:06.580000000 +0800
***************
*** 1 ****
--- 1,3 ----
+
hello westos
+ 123
[root@localhost mnt]# mkdir westosdir westosdir1
[root@localhost mnt]# touch westosdir/westosfile
[root@localhost mnt]# diff -r westosdir westosdir1
Only in westosdir: westosfile
[root@localhost mnt]# diff -u westos westos1 > westos.path
[root@localhost mnt]# cat westos.path
--- westos 2020-12-14 16:24:43.062000000 +0800
+++ westos1 2020-12-14 16:43:06.580000000 +0800
@@ -1 +1,3 @@
+
hello westos
+123
2.patch
patch 原檔案 補丁檔案
-b ##備份原檔案
dnf install patch.x86_64 -y
[root@localhost mnt]# diff -u westos westos1 > westos.path
[root@localhost mnt]# patch -b westos westos.path
patching file westos
[root@localhost mnt]# ls
westos westos1 westosdir westosdir1 westos.orig westos.path
[root@localhost mnt]# cat westos.orig #備份的原檔案
hello westos
[root@localhost mnt]# cat westos
hello westos
123
[root@localhost mnt]# cat westos1
hello westos
123
3.cut
cut
-d : ##指定:為分隔符
-f ##指定顯示的列 5第五列| 3,5 3和5列|3-5 3到5列|5- 第五列以後|-5 到第五列
-c ##指定擷取的字元(數字用法同-f)
[root@localhost mnt]# grep bash -v /etc/passwd | cut -d : -f 1
bin
daemon
adm
lp
sync
shutdown
halt
mail
4.sort
sort
-n ##純數字排序
-r ##倒敘
-u ##去掉重複
-o ##輸出到指定檔案
-t ##指定分隔符
-k ##指定排序的列
[root@localhost mnt]# sort -n westos
1
2
5
6
8
8
9
9
12
26
68
68
[root@localhost mnt]# sort -nr westos
68
68
26
12
9
9
8
8
6
5
2
1
[root@localhost mnt]# sort -nr westos -o westos1
[root@localhost mnt]# cat westos1
68
68
26
12
9
9
8
8
6
5
2
1
[root@localhost mnt]# sort -u westos
1
12
2
26
5
6
68
8
9
[root@localhost mnt]# sort -t : -k 2 westos
6:1
2:12
2:2
8:26
5:5
2:6
0:68
8:68
0:8
0:8
0:9
1:9
[root@localhost mnt]# sort -t : -k 1 westos
0:68
0:8
0:8
0:9
1:9
2:12
2:2
2:6
5:5
6:1
8:26
8:68
5.uniq
uniq
-c #合併重複並統計重複個數
-d #顯示重複的行
-u #顯示唯一的行
- 1.ifconfig 網路卡 可以顯示此網路卡的資訊
顯示資訊中包含此網路卡使用的ip地址
請用命令過濾此ip並在輸出時只顯示ip其他資訊不顯示
[root@localhost mnt]# ifconfig enp1s0 | head -n 2 | tail -n 1 | cut -d " " -f 10
1.1.1.88
- 2.找出能登陸系統使用者中UID最大的使用者,並顯示其名稱
[root@d mnt]# grep bash /etc/passwd | sort -t : -k 3 -nr | head -n 1 | cut -d : -f 1
lee
- 3.當前主機為web伺服器,請抓取訪問web伺服器次數排在前5的ip地址
[root@localhost mnt]# cut -d " " -f 1 /etc/httpd/logs/access_log* | sort -n | uniq -c | sort -nr | head -n 5 | cut -d " " -f 7
[root@localhost mnt]# cut -d " " -f 1 /etc/httpd/logs/access_log* | sort -n | uniq -c | sort -nr | head -n 5 | sed 's/^ *//g' | cut -d " " -f 2
172.25.254.12
172.25.254.212
172.25.254.13
6.tr
tr 'a-z' 'A-Z' ##小寫轉大寫
tr 'A-Z' 'a-z' ##大寫轉小寫
[root@localhost mnt]# ifconfig enp1s0 | head -2 | tail -1 | cut -d " " -f 10
1.1.1.88
[root@localhost mnt]# ifconfig enp1s0 | head -2 | tail -1 | cut -d " " -f 10 | tr '1' '*'
*.*.*.88
[root@localhost mnt]# ls
passwd westos
[root@localhost mnt]# ls | tr 'a-z' 'A-Z'
PASSWD
WESTOS
7.test
test = [] ##[] 就相當於test命令
"test $a = $b" = [ "$a" = "$b" ]
test數字對比
=
!=
-eq ##等於
-ne ##不等於
-le ##小於等於
-lt ##小於
-ge ##大於等於
-gt ##大於
test的條件關係
-a ##並且
-o ##或者
test對空的判定
-n ##nozero 判定內容不為空
-z ##zero 判定內容為空
test對於檔案的判定
-ef ##檔案節點號是否一致(硬鏈)
-nt ##檔案1是不是比檔案2新
-ot ##檔案1是不是比檔案2老
-d ##目錄
-S ##套結字
-L ##軟連線
-e ##存在
-f ##普通檔案
-b ##快裝置
-c ##字元裝置
[root@node1 ~]# a=1
[root@node1 ~]# b=1
[root@node1 ~]# test "$a" = "$b" && echo yes || echo no
yes
[root@node1 ~]# [ "$a" -eq "$b" ] && echo yes || echo no ##等於
[root@node1 ~]# [ "$a" -ne "$b" ] && echo yes || echo no ##不等於
[root@node1 ~]# [ "$a" -le "$b" ] && echo yes || echo no ##小於等於
[root@node1 ~]# [ "$a" -ge "$b" ] && echo yes || echo no ##大於等於
[root@node1 ~]# [ "$a" -lt "$b" ] && echo yes || echo no ##小於
[root@node1 ~]# [ "$a" -gt "$b" ] && echo yes || echo no ##大於
[root@node1 ~]# [ "$a" -gt "0" -a "$a" -lt "10" ] && echo yes || echo no ##並且
[root@node1 ~]# [ "$a" -le "0" -o "$a" -ge "1" ] && echo yes || echo no ##或者
[root@node1 ~]# [ "$a" -gt "0" ] && [ "$a" -lt "10" ] && echo yes || echo no
[root@node1 ~]# [ "$a" -gt "0" ] || [ "$a" -lt "1" ] && echo yes || echo no
[root@node1 ~]# [ -z "$c" ] && echo yes || echo no ##zero 判定內容為空
yes
[root@node1 ~]# [ -n "$c" ] && echo yes || echo no ##nozero 判定內容不為空
no
[root@node1 mnt]# [ "/mnt/westos" -ef "/mnt/westos1" ] && echo yes || echo no
no
[root@node1 mnt]# [ "/mnt/westos" -nt "/mnt/westos1" ] && echo yes || echo no
yes
[root@node1 mnt]# [ "/mnt/westos" -ot "/mnt/westos1" ] && echo yes || echo no
no
[root@node1 mnt]# [ -d "/mnt/" ] && echo yes || echo no
yes
[root@node1 mnt]# ln -s /mnt/westos file1
[root@node1 mnt]# ln /mnt/westos /mnt/file
[root@node1 mnt]# [ -L "/mnt/file1" ] && echo yes || echo no
yes
[root@node1 mnt]# [ -S "/mnt/file" ] && echo yes || echo no
no
[root@node1 mnt]# [ -e "/mnt/file" ] && echo yes || echo no
yes
[root@node1 mnt]# [ -c "/dev/vda" ] && echo yes || echo no
no
[root@node1 mnt]# [ -b "/dev/vda" ] && echo yes || echo no
yes
- 執行下列指令碼來判斷使用者型別
user_check.sh 使用者
使用者型別為
super user #uid=0
system user #uid<1000,並且不能用於登陸作業系統
common user #uid>=1000
[root@d mnt]# vim usercheck.sh
1 #!/bin/bash
2 [ -z "$1" ] && {
3 echo "error:please input username following script!"
4 exit
5 }
6 id $1 &> /dev/null || {
7 echo "user $1 is not exist!" #當不能扔進垃圾箱時表示沒有該使用者
8 exit
9 }
10
11 USER_UID=$( id -u $1 )
12 USER_SHELL=$( grep $1 /etc/passwd | cut -d : -f 7 )
13 [ "$USER_UID" -eq "0" ] && {
14 echo $1 is supper user
15 exit
16 }
17 [ "$USER_UID" -lt "1000" ] && [ "$USER_SHELL" != "/bin/bash" ] && {
18 echo $1 is system user
19 exit
20 }
21 [ "$USER_UID" -ge "1000" ] && [ "$USER_SHELL" = "/bin/bash" ] && {
22 echo $1 is common user
23 exit
24 }
25 echo "unknow user type"
測試:
[root@d mnt]# sh usercheck.sh westos
westos is common user
[root@d mnt]# sh usercheck.sh linux
user linux is not exist!
[root@d mnt]# sh usercheck.sh lee
lee is common user
[root@d mnt]# sh usercheck.sh nginx
nginx is system user
[root@d mnt]# sh usercheck.sh root
root is supper user
- 編寫指令碼完成以下條件
file_check.sh 在執行時
如果指令碼後未指定檢測檔案報錯“未指定檢測檔案,請指定”
如果指令碼後指定檔案不存在報錯“此檔案不存在”
當檔案存在時請檢測檔案型別並顯示到輸出中
[root@d mnt]# vim filecheck.sh
1 #!/bin/bash
2 [ -z "$1" ] && {
3 echo error: please input file following script!
4 exit
5 }
6 ls -ld $1 > /dev/null || [ -e "$1" ] || {
7 echo error:not found $1
8 exit
9 }
10 [ -d "$1" ] && {
11 echo $1 is 目錄
12 exit
13 }
14 [ -S "$1" ] && {
15 echo $1 is 套接字
16 exit
17 }
18 [ -L "$1" ] && {
19 echo $1 is 軟連線
20 exit
21 }
22 [ -f "$1" ] && {
23 echo $1 is 普通檔案
24 exit
25 }
26 [ -b "$1" ] && {
27 echo $1 is 快裝置
28 exit
29 }
30 [ -c "$1" ] && {
31 echo $1 is 字元裝置
32 exit
33 }
測試:
[root@node1 mnt]# sh file_check.sh /mnt/westos
/mnt/westos is 普通檔案
[root@westoslinux mnt]# sh file_check.sh /mnt/
/mnt/ is 目錄
8.&& ||
&& 符合條件作動作
|| 不符合條件作動作
補充:$的常見用法
連結: Linux中的$符號的三種常見用法.
相關文章
- shell簡單命令大全。
- Git常用的簡單命令Git
- HP的一些簡單命令
- seliunx的一些簡單命令
- 常用shell 命令
- 一些“簡單”的linux命令Linux
- vi 的一些簡單命令(轉)
- HBase 常用Shell命令
- Mac 下常用的 Shell 命令Mac
- Shell常用命令
- 面試常用的shell命令彙總面試
- 常用的shell命令和使用技巧
- linux簡單常用命令Linux
- Docker簡單使用、常用基礎命令Docker
- 一些簡單的快捷鍵與DOS命令
- 一些重要 Docker 命令的簡單介紹Docker
- Linux的檔案系統與Shell簡單命令Linux
- 一些常用的html、css、js的簡單應用HTMLCSSJS
- centos7 中的一些常用命令CentOS
- 熟悉shell的一些基本命令
- Power Shell 常用命令
- Kafka簡單示例以及常用命令Kafka
- Mysql資料庫一些簡單命令MySql資料庫
- shell script的簡單使用
- 一些常用的linux命令Linux
- 一些常用的LVM命令LVM
- 資料工程師常用的 Shell 命令工程師
- linux中的top命令簡單使用Linux
- Linux中ps命令的簡單使用Linux
- linux中history命令的簡單使用Linux
- HBase 系列(五)——HBase常用 Shell 命令
- Storm系列(二)常用shell命令操作ORM
- git shell常用命令分享Git
- Unix Shell常用命令大全
- Hbase shell 常用命令1
- 簡單介紹Shell中的定時任務 crontab
- 一些常用的命令(持續更新)
- windows下一些常用的dos命令Windows