天天看點

常見面試題整理—Linux系統常用操作

1. crontab的使用

crontab 是用來讓使用者在固定時間或固定間隔執行程式之用,換句話說,也就是類似使用者的時程表。

-u user_a 是指設定指定 user_a 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設 定自己的時程表。

基本格式 :

*  *  *  *  *  command

分 時  日  月  周  指令

第1清單示分鐘1~59 每分鐘用或者 /1表示

第2清單示小時1~23(0表示0點)

第3清單示日期1~31

第4清單示月份1~12

第5列辨別号星期0~6(0表示星期天)

第6列要運作的指令

常用指令:

添加任務: crontab -e

檢視任務: crontab -l

删除任務: crontab-d

使用權限 : 所有使用者

crontab 每分鐘、每小時、每天、每周、每月、每年定時執行

每五分鐘執行 /5 * * * commond

每小時執行 0 * * * * commond

每天執行 0 0 * * * commond

每周執行 0 0 * * 0 commond

每月執行 0 0 1 * * commond

每年執行 0 0 1 1 * commond

下面通過一些例子直覺學習下:

* * * /usr/local/etc/rc.d/lighttpd restart 
           

上面的例子表示每晚的21:30重新開機apache。

,, * * /usr/local/etc/rc.d/lighttpd restart 
           

上面的例子表示每月1、10、22日的4 : 45重新開機apache。

* * , /usr/local/etc/rc.d/lighttpd restart 
           

上面的例子表示每周六、周日的1 : 10重新開機apache。

, - * * * /usr/local/etc/rc.d/lighttpd restart 
           

上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重新開機apache。

* *  /usr/local/etc/rc.d/lighttpd restart 
           

上面的例子表示每星期六的23 : 00 pm重新開機apache。

* */1 * * *   /usr/local/etc/rc.d/lighttpd restart 
           

每一小時重新開機apache

* -/ * * * /usr/local/etc/rc.d/lighttpd restart 
           

晚上11點到早上7點之間,每隔一小時重新開機apache

* mon-wed /usr/local/etc/rc.d/lighttpd restart 
           

每月的4号與每周一到周三的11點重新開機apache

jan * /usr/local/etc/rc.d/lighttpd restart 
           

一月一号的4點重新開機apache

2.關閉sendmail服務,這裡介紹一種不用關閉sendmail服務的方法

vim /etc/profile

将 unset MAILCHECK 加到檔案最後

source /etc/profile

(但是試過之後沒效果)

3.查找檔案内容

查找目前目錄下所有檔案,将含有’test’的檔案列出

grep ‘test’ *

4.檢視硬碟的使用情況及檔案目錄大小指令

檢視檔案系統各個硬碟大小

df -a 列出所有的檔案系統

df -k 以K為機關顯示

df -h 以人性化機關顯示,可以是b,k,m,g,t..

檢視目錄的大小

du -sh dirname

-s 僅顯示總計

-h 以K、M、G為機關,提高資訊的可讀性。KB、MB、GB是以1024為換算單 位, -H以1000為換算機關。

例:du -sh /www

檢視www檔案夾大小

5.screen 指令詳解

背景

作為程式員一定會用到linux系統,經常打開多個shell,運作一些需要很長時間才能完成的任務,通常情況下我們都是為每一個這樣的任務開一個終端視窗,必須等待它們執行完畢,在此期間不能關掉視窗,否則這個任務就會被殺掉。

簡介

GNU Screen是一款由GNU計劃開發的用于指令行終端切換的自由軟體。使用者可以通過該軟體同時連接配接多個本地或遠端的指令行會話,并在其間自由切換。

GNU Screen可以看作是視窗管理器的指令行界面版本。它提供了統一的管理多個會話的界面和相應的功能

常用的screen 指令

screen -S yourname -> 建立一個叫yourname的session

screen -ls -> 列出目前所有的session

screen -r yourname -> 回到yourname這個session

screen -d yourname -> 遠端detach某個session

screen -d -r yourname -> 結束目前session并回到yourname這個session

常用快捷鍵組合

C-a c -> 建立一個新的運作shell的視窗并切換到該視窗

C-a n -> Next,切換到下一個 window

C-a p -> Previous,切換到前一個 window

C-a d -> detach,暫時離開目前session,将目前的 screen session丢到背景執行,并會回到還沒進 screen 時的狀态,此時在 screen session 裡,每個screen内運作的 process (無論是前台/背景)都在繼續執行,即使 logout 也不影響。

exit 關閉目前session

6.伺服器之間複制檔案

scp是securecopy的簡寫,用于在Linux下進行遠端拷貝檔案的指令,和它類似的指令有cp,不過cp隻是在本機進行拷貝不能跨伺服器

,而且scp傳輸是加密的,可能會稍微影響一下速度。

一般有6中用法:

1)本地複制遠端檔案(把遠端的檔案複制到本地):

scp [email protected]:/val/test/test.tar.gz /val/test/test.tar.gz

2)遠端複制本地檔案(把本地的檔案複制到遠端主機上):

scp /val/test.tar.gz [email protected]:/val/test.tar.gz

3)本地複制遠端目錄(把遠端的目錄複制到本地;參數 r 遞歸複制):

scp -r [email protected]:/val/test/ /val/test/

4)遠端複制本地目錄(把本地的目錄複制到遠端主機上):

scp -r /val/ [email protected]:/val/

5)本地複制遠端檔案到指定目錄(把遠端的檔案複制到本地):

scp [email protected]:/val/test/test.tar.gz /val/test/

6)遠端複制本地檔案到指定目錄(把本地的檔案複制到遠端主機上):

scp /val/test.tar.gz [email protected]:/val/

7.檢視CPU 機器型号 記憶體等資訊

系統

uname -a # 檢視核心/作業系統/CPU資訊

cat /proc/cpuinfo # 檢視CPU資訊

hostname # 檢視計算機名

env # 檢視環境變量

lsb_release -a #即可列出所有版本資訊

cat /etc/issue #檢視版本資訊

資源

free -h # 檢視記憶體使用量和交換區使用量

df -h # 檢視各分區使用情況

du -sh <目錄名> # 檢視指定目錄的大小

grep MemTotal /proc/meminfo # 檢視記憶體總量

grep MemFree /proc/meminfo # 檢視空閑記憶體量

uptime # 檢視系統運作時間、使用者數、負載

cat /proc/loadavg # 檢視系統負載

磁盤和分區

mount | column -t # 檢視挂接的分區狀态

fdisk -l # 檢視所有分區

swapon -s # 檢視所有交換分區

hdparm -i /dev/hda # 檢視磁盤參數(僅适用于IDE裝置)

dmesg | grep IDE # 檢視啟動時IDE裝置檢測狀況

網絡

ifconfig # 檢視所有網絡接口的屬性

iptables -L # 檢視防火牆設定

route -n # 檢視路由表

netstat -lntp # 檢視所有監聽端口

netstat -antp # 檢視所有已經建立的連接配接

netstat -s # 檢視網絡統計資訊

程序

ps -ef # 檢視所有程序

top # 實時顯示程序狀态

使用者

w # 檢視活動使用者

id <使用者名> # 檢視指定使用者資訊

last # 檢視使用者登入日志

cut -d: -f1 /etc/passwd  #系統所有使用者

cut -d: -f1 /etc/group # 檢視系統所有組

crontab -l # 檢視目前使用者的計劃任務使用者

8.關閉防火牆

systemctl stop firewalld.service

關閉開機啟動: systemctl disable firewalld.service

檢視防火牆狀态: systemctl status firewalld.service

9.ssh 遠端登陸

ssh [email protected]

10.主機名相關

檢視: hostnamectl status

修改: hostnamectl set-hostname “storage_node1”

10.挂載硬碟

mount -t ext3 -o rw /dev/sdb1 /newfile #挂載硬碟

-t 跟磁盤格式 可以省略 系統會自動檢測一下

-o 跟挂載方式 rw 可讀可寫

/newfile 這是硬碟分區挂載的目錄,可以随意變換

11.lsof 使用以及修改系統程序打開的檔案數限制

該指令用于檢視程序或應用程式打開的檔案描述符資訊

輸出資訊

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

COMMAND:程序的名稱

PID:程序辨別符

USER:程序所有者

FD:檔案描述符,應用程式通過檔案描述符識别該檔案。如cwd、txt等

TYPE:檔案類型,如DIR、REG等

DEVICE:指定磁盤的名稱

SIZE:檔案的大小

NODE:索引節點(檔案在磁盤上的辨別)

NAME:打開檔案的确切名稱

其中FD 列中的檔案描述符cwd 值表示應用程式的目前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。

txt 類型的檔案是程式代碼,如應用程式二進制檔案本身或共享庫,其次數值表示應用 程式的檔案描述符,這是打開該檔案

時傳回的一個整數。

u 表示該 檔案被打開并處于讀取/寫入模式,而不是隻讀 ® 或隻寫 (w) 模式。同時還有大寫 的W表示該應用程式具有對整個檔案

的寫 鎖。該檔案描述符用于確定每次隻能打開一個應用程式執行個體。初始打開每個應用程式時,都具有三個檔案描述符,從 0 到

2, 分别表示标準輸入、輸出和錯誤流。是以大多數應用程式所打開的檔案的 FD 都是從 3 開始。

與 FD 列相比,Type 列則比較直覺。檔案和目錄分别稱為 REG 和 DIR。而CHR 和 BLK,分别表示字元和塊裝置;

或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協定 (IP) 套接字。

lsof filename 顯示打開指定檔案的所有程序

lsof -a 表示兩個參數都必須滿足時才顯示結果

lsof -c string 顯示COMMAND列中包含指定字元的程序所有打開的檔案

lsof -u username 顯示所屬user程序打開的檔案

lsof -g (-p)gid 顯示歸屬gid的程序情況

lsof +d /DIR/ 顯示目錄下被程序打開的檔案

lsof +D /DIR/ 同上,但是會搜尋目錄下的所有目錄,時間相對較長

lsof -d FD 顯示指定檔案描述符的程序

lsof -n 不将IP轉換為hostname,預設是不加上-n參數

lsof -i 用以顯示符合條件的程序情況

lsof -p 程序PID 檢視某特定程序打開的檔案描述符

lsof -a -p PID -d txt 篩選檔案描述符為 txt的記錄 參數 -a(and的意思)表示篩選兩個參數均滿足的記錄

lsof /home/test.py 查找打開某個檔案的應用程式

lsof |grep 33872 |wc -l 統計某程序打開的檔案描述符的數量

檢視本次登陸的session其檔案描述符的限制

ulimit -n

臨時修改檔案描述符的限定,可以通過 ulimit。

ulimit -SHn 2048

永久變更需要編輯 /etc/security/limits.conf 檔案,添加如下兩行:

在/etc/security/limits.conf修改限制的格式如下

domino type item value

參數 描述

domino 是以符号@開頭的使用者名或組名,*表示所有使用者

type 設定為hard or soft

item 指定想限制的資源。如cpu,core nproc or maxlogins

value 是相應的

* hard nofile 4096

* soft nofile 4096

儲存退出後重新登入,其最大檔案描述符已經被永久更改了

核心參數對檔案描述符也有限制,如果設定的值大于核心的限制,也是不行的:

查找file-max的核心參數:

sysctl -a|grep file-max

更改file-max的核心參數:

sysctl -w file-max=65535

Sysctl也是臨時的,要想永久生效,可以通過更改sysctl的檔案,編輯/etc/sysctl.conf檔案,添加或修改以下一行:

fs.file-max=65535

儲存退出後使用sysctl -p 指令使其生效

需要注意的是,檔案描述符的限制,不局限于這裡描述的這些,還可能和程序的啟動參數、使用者的環境設定有關。當然,如果是程序

BUG造成檔案描述符沒有及時關閉回收,這增大限制也隻是治标,根本上還得修複BUG。

此外,lsof會列出系統中所占用的資源,但是這些資源不一定會占用打開的檔案描述符(比如共享記憶體,信号量,消息隊列,記憶體映射.等

,雖然占用了這些資源,但不占用打開檔案号),是以有可能出現cat /proc/sys/fs/file-max 的值小于lsof | wc -l。

cat /proc/sys/fs/nr_open

單個程序可配置設定的最大檔案數

cat /proc/sys/fs/file-max

核心可配置設定的最大檔案數

所有程序打開的檔案描述符數不能超過 /proc/sys/fs/file-max

單個程序打開的檔案描述符數不能超過 user limit中 nofile的 soft limit

nofile的soft limit不能超過其hard limit

nofile的hard limit不能超過/proc/sys/fs/nr_open

12.修改系統時間

Linux時鐘分為系統時鐘(System Clock)和硬體(Real Time Clock,簡稱RTC)時鐘。

系統時鐘是指目前Linux Kernel中的時鐘,而硬體時鐘則是主機闆上由電池供電的時鐘,這個硬體時鐘可以在

BIOS中進行設定。當Linux啟動時,硬體時鐘會去讀取系統時鐘的設定,然後系統時鐘就會獨立于硬體運作。

Linux中的所有指令(包括函數)都是采用的系統時鐘設定。在Linux中,用于時鐘檢視和設定的指令主要有date、hwclock。

date –s:按字元串方式修改時間

可以隻修改日期,不修改時間,輸入:

隻修改時間,輸入:

同時修改日期時間,注意要加雙引号,日期與時間之間有一空格,輸入:

檢視硬體時間

hwclock

設定硬體時間

hwclock -set -date=”07/07/06 10:19” (月/日/年 時:分:秒)

硬體時間和系統時間的同步

按照前面的說法,重新啟動系統,硬體時間會讀取系統時間,實作同步,但是在不重新啟動的時候,需要用hwclock指令實作同步。

硬體時鐘與系統時鐘同步:

hwclock –hctosys (hc代表硬體時間,sys代表系統時間)

系統時鐘和硬體時鐘同步:(讓系統的時間同步到硬體時鐘)

hwclock -w ––systohc

13.壓縮檔案

tar -zcvf /home/sms.tar.gz /sms

tar -zcvf [打包後生成的檔案名全路徑] [要打包的目錄]

zip -q -r sms.zip /home/sms -q 表示安靜模式(在壓縮的時候不顯示指令的執行過程) -r表示遞歸

zip [參數] [打包後的檔案名] [打包的目錄路徑]

14. 檢視是否安裝某軟體

rpm -qa|grep soft_name

## 15.測試硬碟的IO

硬碟讀取速度

time dd if=/var/test of=/dev/null bs=2k

hdparm -T /dev/sda

硬碟寫入速度

time dd if=/dev/zero of=/test.dbf bs=8k count=300000

(在 根目錄 / 下面會生成臨時檔案,記得删除)

繼續閱讀