Linux常用命令詳解(week1_day1_3)--技術流ken


 

本節內容

 

pidof
ps
top
ip
uptime
wget
curl
tr
dd
tar
grep
find

 

命令詳解

 

1.pidof

獲取正在運行程序的PID

實例1:

[root@ken ~]# pidof sshd
24342 23786 3026

 

2.ps

查看系統中的進程狀態

常用組合選項:

aux:是用BSD的格式來顯示

   顯示的項目有:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND

-ef:是用標准的格式顯示

   顯示的項目有:UID , PID , PPID , C , STIME , TTY , TIME , CMD

實例1:

[root@ken ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 125576  4072 ?        Ss   Jan11   0:55 /usr/lib/systemd/systemd --switched-root --system --dese
root         2  0.0  0.0      0     0 ?        S    Jan11   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Jan11   0:05 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Jan11   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    Jan11   0:05 [kworker/u2:0]
root         7  0.0  0.0      0     0 ?        S    Jan11   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Jan11   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        R    Jan11   0:17 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   Jan11   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S    Jan11   0:02 [watchdog/0]
root        13  0.0  0.0      0     0 ?        S    Jan11   0:00 [kdevtmpfs]

實例2;

[root@ken ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan11 ?        00:00:55 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Jan11 ?        00:00:00 [kthreadd]
root         3     2  0 Jan11 ?        00:00:05 [ksoftirqd/0]
root         5     2  0 Jan11 ?        00:00:00 [kworker/0:0H]
root         6     2  0 Jan11 ?        00:00:05 [kworker/u2:0]
root         7     2  0 Jan11 ?        00:00:00 [migration/0]
root         8     2  0 Jan11 ?        00:00:00 [rcu_bh]
root         9     2  0 Jan11 ?        00:00:17 [rcu_sched]
root        10     2  0 Jan11 ?        00:00:00 [lru-add-drain]
root        11     2  0 Jan11 ?        00:00:02 [watchdog/0]
root        13     2  0 Jan11 ?        00:00:00 [kdevtmpfs]
root        14     2  0 Jan11 ?        00:00:00 [netns]

 

3.top

顯示linux中的進程

實例1:

[root@ken ~]# top
top - 17:03:06 up 2 days,  9:07,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 108 total,   2 running, 106 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1015828 total,    95592 free,   326988 used,   593248 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   481564 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                              
 2796 root      20   0  298716   6124   4792 S  0.3  0.6   5:47.31 vmtoolsd                                             
 8151 root      20   0  161840   2180   1548 R  0.3  0.2   0:00.05 top                                                  
    1 root      20   0  125576   4072   2636 S  0.0  0.4   0:56.00 systemd                                              
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.04 kthreadd                                             
    3 root      20   0       0      0      0 S  0.0  0.0   0:05.85 ksoftirqd/0                                          
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                         
    6 root      20   0       0      0      0 S  0.0  0.0   0:05.05 kworker/u2:0                                         
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                          
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                               
    9 root      20   0       0      0      0 R  0.0  0.0   0:17.41 rcu_sched   

第1行:系統時間、運行時間、登錄終端數、系統負載(三個數值分別為1分鍾、5分鍾、15分鍾內的平均值,數值越小意味着負載越低)。

第2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。

第3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。其中數據均為CPU數據並以百分比格式顯示,例如“97.1 id”意味着有97.1%的CPU處理器資源處於空閑。

第4行:物理內存總量、內存使用量、內存空閑量、作為內核緩存的內存量。

第5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閑量、已被提前加載的內存量。

 

4.ip

查看和設置網絡相關的內容

實例1:查看ip

支持省略,如下的內容可以簡寫為ip a

[root@ken ~]# ip addr show
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:99:ea:a6 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.6/24 brd 172.20.10.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 2408:84f4:48:32ed:20c:29ff:fe99:eaa6/64 scope global mngtmpaddr dynamic 
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe99:eaa6/64 scope link 
       valid_lft forever preferred_lft forever

 

5.uptime

告知系統運行了多久時間

實例1:

[root@ken ~]# uptime 
 17:07:49 up 2 days,  7:33,  3 users,  load average: 0.00, 0.03, 0.05

 

6.wget

 

-P: 大寫的P指定下載路徑

[root@ken-master ~]# wget -P /tmp https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm--2019-05-06 10:58:45--  https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
Resolving repo.zabbix.com (repo.zabbix.com)... 162.243.159.138, 2604:a880:1:20::b82:1001
Connecting to repo.zabbix.com (repo.zabbix.com)|162.243.159.138|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13712 (13K) [application/x-redhat-package-manager]
Saving to: ‘/tmp/zabbix-release-4.0-1.el7.noarch.rpm’

100%[============================================================================>] 13,712      --.-K/s   in 0s      

2019-05-06 10:58:46 (185 MB/s) - ‘/tmp/zabbix-release-4.0-1.el7.noarch.rpm’ saved [13712/13712]

[root@ken-master ~]# ls /tmp
tmpp6ayT2  vmware-root  zabbix-release-4.0-1.el7.noarch.rpm

 

用於在終端中下載網絡文件

[root@ken ~]# wget www.baidu.com
--2019-01-13 17:09:49--  http://www.baidu.com/
Resolving www.baidu.com (www.baidu.com)... 163.177.151.110, 163.177.151.109
Connecting to www.baidu.com (www.baidu.com)|163.177.151.110|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2381 (2.3K) [text/html]
Saving to: ‘index.html.1100%[===============================================================================>] 2,381       --.-K/s   in 0s      

2019-01-13 17:09:49 (75.0 MB/s) - ‘index.html.1’ saved [2381/2381]

 

7.curl

傳送或者下載數據從服務器

[root@ken ~]# curl www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidde

 

8.tr

轉換或者刪除字符

實例1:

[root@ken ~]# echo "this is ken" | tr [a-z] [A-Z]
THIS IS KEN

實例2:

[root@ken ~]# cat /etc/passwd | tr [a-z] [A-Z]
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN

 

9.dd

轉換和拷貝文件

if=file
從 file 中讀而不是標准輸入。

of=file
寫到 file 里去而不是標准輸出

bs=bytes
一次讀和寫 bytes 字節

count=blocks
只拷貝輸入文件的前 blocks 塊

實例1:

[root@ken ~]# dd if=/dev/zero of=test.sh count=100 bs=1M
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.805793 s, 130 MB/s
[root@ken ~]# ls -lh test.sh
-rw-r--r-- 1 root root 100M Jan 13 17:23 test.sh

 

10.tar

用於對文件進行打包壓縮或解壓

常用選項:

-c                                 

創建壓縮文件                                                  

-x

解開壓縮文件

-t

查看壓縮包內有哪些文件

-z

用Gzip壓縮或解壓

-j

用bzip2壓縮或解壓

-v

顯示壓縮或解壓的過程
-f

目標文件名

-p

保留原始的權限與屬性

-P

使用絕對路徑來壓縮

-C

指定解壓到的目錄

常用組合:

czvf:創建壓縮文件

xzvf: 解壓縮

實例1:創建壓縮文件

[root@ken ~]# tar czcf keys.sh.tar.gz keys.sh 
[root@ken ~]# ls -l keys.sh.tar.gz 
-rw-r--r-- 1 root root 618 Jan 13 17:26 keys.sh.tar.gz

實例2:解壓縮

[root@ken ~]# tar xzvf keys.sh.tar.gz 
keys.sh

 

11.grep

用於在文本中執行關鍵詞搜索,並顯示匹配的結果

        選項             

                  描述                                     

-E,--extended-regexp

模式是擴展正則表達式(ERE)

 -i,--ignore-case

忽略大小寫

 -n,--line-number

打印行號

 -o,--only-matching

只打印匹配的內容

 -c,--count

只打印每個文件匹配的行數

 -B,--before-context=NUM

打印匹配的前幾行

 -A,--after-context=NUM

打印匹配的后幾行

-C,--context=NUM

打印匹配的前后幾行

--color[=WHEN],

 匹配的字體顏色

-v,--invert-match

 打印不匹配的行

實例1:忽略大小寫

[root@ken ~]# echo "this is ken THIS IS KEN" | grep -i 'ken'
this is ken THIS IS KEN
[root@ken ~]# echo "this is ken THIS IS KEN" | grep  'ken'
this is ken THIS IS KEN

實例2:只打印匹配的內容

[root@ken ~]# echo "this is ken THIS IS KEN" | grep -o 'ken'
ken
[root@ken ~]# echo "this is ken THIS IS KEN" | grep  'ken'
this is ken THIS IS KEN

實例3:打印文件匹配的行數

[root@ken ~]# grep  -c 'root' /etc/passwd
2
[root@ken ~]# grep  'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

實例4:打印不匹配的行

[root@ken ~]# echo -e "hi\nthis is ken\nncie to meet you\nbye " | grep -v 'ken'
hi
ncie to meet you
bye 

 

12.find

用於按照指定條件來查找文件

參數

作用

-name

匹配名稱

-perm

匹配權限(mode為完全匹配,-mode為包含即可)

-user

匹配所有者

-group

匹配所有組

-mtime -n +n

匹配修改內容的時間(-n指n天以內,+n指n天以前)

-atime -n +n

匹配訪問文件的時間(-n指n天以內,+n指n天以前)

-ctime -n +n

匹配修改文件權限的時間(-n指n天以內,+n指n天以前)

-nouser

匹配無所有者的文件
-nogroup

匹配無所有組的文件

-type b/d/c/p/l/f

匹配文件類型(后面的字幕字母依次表示塊設備、目錄、字符設備、管道、鏈接文件、文本文件)

-size

匹配文件的大小(+50KB為查找超過50KB的文件,而-50KB為查找小於50KB的文件)

-exec …… {} \;

后面可跟用於進一步處理搜索結果的命令(下文會有演示)

 

實例1:當前位置下找出后綴是txt的文件和目錄

[root@ken ~]# find ./ -name "*.txt"

實例2:找文件大小是1M的文件

[root@ken ~]# find / -size 1M

實例3:找一般文件

[root@ken ~]# find / -type f

實例4:從/tmp下找出后綴是wps 或doc 或exel的文件

如果出現如下的報錯信息,需要在文件名前加上單引號例如:‘ken*’

find: paths must precede expression Usage: find [-H] [-L] [-P] [path...] [expression]

[root@ken ~]# ind /tmp/ -name *.doc -o -name *.exel -o -name *.wps

實例5:將tmp下有執行權限的文件中的執行權限去除

[root@ken ~]#  find /tmp -perm /111 -exec chmod a-x {} \;

 

命令行的通配符

 

*

[0-9]

[a-z]

[A-Z]

 

作為Linux運維人員,我們有時候也會遇到明明一個文件的名稱就在嘴邊但就是想不起來的情況。如果就記得一個文件的開頭幾個字母,想遍歷查找出所有以這個關鍵詞開頭的文

件,該怎么操作呢?

顧名思義,通配符就是通用的匹配信息的符號,比如星號(*)代表匹配零個或多個字符,問號(?)代表匹配單個字符,中括號內加上數字[0-9]代表匹配0~9之間的單個數字的字

符,而中括號內加上字母[abc]則是代表匹配a、b、c三個字符中的任意一個字符。下面我們就來匹配所有在/dev目錄中且以sda開頭的文件:

[root@ken ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2

 

如果只想查看文件名為sd開頭,但是后面還緊跟其他某一個字符的文件的相關信息,該怎么操作呢?這時就需要用到問號來進行通配了。

[root@ken ~]# ls /dev/sd?
/dev/sda

 

除了使用[0-9]來匹配0~9之間的單個數字,也可以用[135]這樣的方式僅匹配這三個指定數字中的一個,若沒有匹配到,則不會顯示出來:

[root@ken ~]# ls /dev/sda[0-9]
/dev/sda1  /dev/sda2
[root@ken ~]# ls /dev/sda[a-z]
ls: cannot access /dev/sda[a-z]: No such file or directory

 

 

一切從“/”開始

 

在Linux系統中,目錄、字符設備、塊設備、套接字、打印機等都被抽象成了文件,即劉遄老師所一直強調的“Linux系統中一切都是文件”。既然平時我們打交道的都是文件,那么又

應該如何找到它們呢?在Windows操作系統中,想要找到一個文件,我們要依次進入該文件所在的磁盤分區(假設這里是D盤),然后在進入該分區下的具體目錄,最終找到這個文

件。但是在Linux系統中並不存在C/D/E/F等盤符,Linux系統中的一切文件都是從“根(/)”目錄開始的,並按照文件系統層次化標准(FHS)采用樹形結構來存放文件,以及定義了常

見目錄的用途。另外,Linux系統中的文件和目錄名稱是嚴格區分大小寫的。例如,root、rOOt、Root、rooT均代表不同的目錄,並且文件名稱中不得包含斜杠(/)。Linux系統中的

文件存儲結構如圖6-1所示。

第6章 存儲結構與磁盤划分。第6章 存儲結構與磁盤划分。

圖6-1  Linux系統中的文件存儲結構

前文提到的FHS是根據以往無數Linux系統用戶和開發者的經驗而總結出來的,是用戶在Linux系統中存儲文件時需要遵守的規則,用於指導我們應該把文件保存到什么位置,以及告

訴用戶應該在何處找到所需的文件。但是,FHS對於用戶來講只能算是一種道德上的約束,有些用戶就是懶得遵守,依然會把文件到處亂放,有些甚至從來沒有聽說過它。這里並不

是號召各位讀者去譴責他們,而是建議大家要靈活運用所學的知識,千萬不要認准這個FHS協定只講死道理,不然吃虧的可就是自己了。在Linux系統中,最常見的目錄以及所對應

的存放內容如表6-1所示。

表6-1                                  Linux系統中常見的目錄名稱以及相應內容

目錄名稱

應放置文件的內容

/boot

開機所需文件—內核、開機菜單以及所需配置文件等

/dev

以文件形式存放任何設備與接口

/etc

配置文件

/home

用戶主目錄

/bin

存放單用戶模式下還可以操作的命令

/lib

開機時用到的函數庫,以及/bin與/sbin下面的命令要調用的函數

/sbin

開機過程中需要的命令

/media                                         

用於掛載設備文件的目錄                                                                                 

/opt

放置第三方的軟件

/root

系統管理員的家目錄

/srv

一些網絡服務的數據文件目錄

/tmp

任何人均可使用的“共享”臨時目錄

/proc

虛擬文件系統,例如系統內核、進程、外部設備及網絡狀態等

/usr/local

用戶自行安裝的軟件

/usr/sbin

Linux系統開機時不會使用到的軟件/命令/腳本

/usr/share

幫助與說明文件,也可放置共享文件

/var

主要存放經常變化的文件,如日志
/lost+found

當文件系統發生錯誤時,將一些丟失的文件片段存放在這里

 

在Linux系統中另外還有一個重要的概念—路徑。路徑指的是如何定位到某個文件,分為絕對路徑與相對路徑。絕對路徑指的是從根目錄(/)開始寫起的文件或目錄名稱,而相對路

徑則指的是相對於當前路徑的寫法。我們來看下面這個例子,以幫助大家理解。假如有位外國游客來到中國潘家園旅游,當前內急但是找不到洗手間,特意向您問路,那么您有兩種

正確的指路方法。

絕對路徑(absolute path):首先坐飛機來到中國,到了北京出首都機場坐機場快軌到三元橋,然后換乘10號線到潘家園站,出站后坐34路公交車到農光里,下車后路口左轉。

相對路徑(relative path):前面路口左轉。

這兩種方法都正確。如果您說的是絕對路徑,那么任何一位外國游客都可以按照這個提示找到潘家園的洗手間,但是太繁瑣了。如果您說的是相對路徑,雖然表達很簡練,但是這位

外國游客只能從當前位置(不見得是潘家園)出發找到洗手間,因此並不能保證在前面的路口左轉后可以找到洗手間,由此可見,相對路徑不具備普適性。

如果各位讀者現在還是不能理解相對路徑和絕對路徑的區別,也不要着急,以后通過實踐練習肯定可以徹底搞明白。當前建議大家先記住FHS中規范的目錄作用,這將在以后派上用

場。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM