1. 程式人生 > >Linux原理與實踐

Linux原理與實踐

sleep 日誌 3.4 inf cpu 定向 print 文檔 locate

Linux 中的文件及權限

-rwxr-xr-x 1 cat animal 68 03-31 21:47 sleep.sh
三種用戶角色:
r 4 w 2 x 1
user ,文件的所有者
group,所屬的用戶組
others,其他人

查找文件

find :功能最豐富的文件查找命令
基本用法示例:
find / -name test -print
查找 / 目錄下 名字為 test 的文件,然後打印出文件名

常用格式:
find [路徑] [選項] [查找規則] [動作]

[路徑]可以有多個,以空格分隔
[選項]常用的有:
-depth 先找目錄內容,再找目錄自身,即先深入查找.
-follow 跟隨符號鏈接,將軟連接解為實際文件.
-maxdepths N 設置目錄查找深度
-mount (或 -xdev) 不查找其他掛載的文件系統,如NFS等

基於文件名的[查找規則]:

例1: find . -name “*.php”
查找本目錄下所有後綴名為 .php 的文件

例2: find . -iname “x[abc]”
查找本目錄下所有文件名為 xa、xb或xc 的文件,且不區分大小寫。

例3: find . -regex ".b.3"
查找本目錄下文件完整路徑及名稱匹配該正則的。

基於時間的[查找規則]:

例1: find . -mmin -60
查找本目錄下修改時間為最近60分鐘內的

例2: find . -mmin +5
查找本目錄下修改時間為5分鐘之前的

例3: find /tmp -atime -1
查找/tmp目錄下最近1天(24小時)內被訪問過的文件

find . -atime N

其中 -atime 的位置也可以使用如下參數:
-atime, -mtime, -ctime, -amin, -mmin, -cmin N

time: 天(24小時),min: minute,分鐘

+N N時間前,-N N時間內的,n 等於N的

基於文件類型的[查找規則]:

例1: find . -type f
查找本目錄下所有的“文件”

例2: find . -type d
查找本目錄下所有的“目錄”

其他[查找規則]:

例1: find . -user root
查找本目錄下所有root用戶的文件

例2: find . -perm 600
查找本目錄下所有權限為600的文件

[查找規則]的組合:

find . ( -name “_*“ -or -user root ) -type f
查找本目錄下(以_開頭或root用戶的)“文件”

邏輯運算符:
-not
-or
-and

-exec 示例:

find ./ -name "*.tmp" -exec unlink {} ;

{} :指代找到的文件
; :表示-exec指定的命令結束,必須。

安全起見也可以用 -ok

其他查找文件命令:

which :查找環境變量PATH下的可執行文件及別名(alias)
whereis:查找系統常見目錄中的可執行文件、文檔、源代碼、配置文件等
locate:通過索引數據庫查找文件

Linux中的文本工具

cat
——查看文件內容

head
——查看文件頭部

tail
——查看文件尾部

more
——分頁查看文件內容

less
——更強的分頁查看文件內容

cut
——按列查看文件內容,默認以 TAB 分隔

sort
——對文件內容排序

uniq
——對文件內容排重, -c 可統計重復行數量

管道

需求:分析如下網站訪問日誌文件,找出訪問量最大的前10個IP地址,降序排列
123.151.47.117 - - [16/Feb/2014:00:00:02 +0800] "GET / HTTP/1.1"
220.171.166.19 - - [16/Feb/2014:00:00:06 +0800] "GET /search/mp3

$ cut -d " " -f1 ./access.log | sort | uniq -c | sort -n -r | head -10

通過管道使用工具

Linux 中有三個系統文件描述符: 0:標準輸入; 1:標準輸出; 2:標準錯誤輸出。
標準輸出、標準錯誤輸出通常默認為當前屏幕。
管道是Linux進程間通信的方式之一
管道像一根供數據流通的單向管道
所有Linux程序的標準輸出都可以通過管道傳遞給另一個程序作為標準輸入

輸入/輸出重定向

ls -l > ls_output.log 將標準輸出重定向到 ls_output.log 文件
ls -l >> ls_append.log 將標準輸出重定向追加到 ls_output.log 文件

ls -l 1> ls_output.log 2> ls_error.log
將 標準輸出 重定向到 ls_output.log 文件,標準錯誤輸出重定向到 ls_error.log 文件

ls -l 1> ls_out.log 2>&1
將標準輸出重定向到 ls_out.log 文件,然後將標準錯誤輸出重定向到和標準輸出同樣的地方。

more < xxx.txt 輸入重定向

重定向案例

$ cut -d " " -f1 ./access.log | sort | uniq -c | sort -n -r | head -10 > ip.log

系統管理

ps 命令:顯示當前進程
ps -ef 顯示帶啟動命令行的進程信息
ps -u root 顯示某用戶的進程
ps -A 顯示全部進程
ps -ejH 顯示進程樹

kill 命令:向進程發送信號,常用於終止某進程
kill -s PID
-s 指定信號
kill -9 PID 可用於強制某進程退出
killall 可用於通過進程名稱發送信號

fg 命令: 將後臺任務調到前臺
命令後加 & ,或Ctrl + Z 可將任務轉到後臺執行
後臺執行中的任務,可以通過 “fg %任務序號” 或 “fg #pid” 調到前臺

crontab:讓命令自動定時運行

netstat: 查看網絡狀態
netstat -alpn 查看所有網絡連接狀態,帶進程名稱

Ifconfig : 查看網卡配置、ip地址信息

iptables: Linux 防火墻
常用命令:
service iptables start #啟動服務
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP #所有來自 1.2.3.4 的80端口訪問全部屏蔽
service iptables save #保存規則,否則重啟失效
iptables -L -n --line-numbers #列出當前配置及規則號
iptables -D INPUT 4 刪除INPUT類第4號規則
iptables -F 清除所有規則

top
常用操作:
P:按CPU使用量排列, M:按內存使用量排列, h:顯示幫助 , q:退出
1: 多 CPU 顯示, k:殺死進程, r:設置進程Nice級別

查看系統運行狀態

$ cat /proc/cpuinfo
$ cat /proc/loadavg

軟件安裝

yum 安裝
rpm安裝
源碼編譯安裝

crontab

crontab: 定時執行任務
crontab -e 設置定時任務:
基本格式 :
        *  command
分  時  日  月  周 

分(0-59) 時(0-23) 日(1-31) 月(1-12) 周(0-6)//0代表周日
每個 * 的位置除數字取值外,還可以有如下格式:

  • 代表所有的取值範圍內的數字;
    / 代表“每”的意思,如 "*/5"表示每5個單位;
  • 代表範圍,從某個數字到某個數字;
    , 用於指定多個值。

實例:
0 6 * * * echo "GoodMorning" >> /tmp/test.txt
每天早上6時0分

0 /2 * * echo "Have A Break" >> /tmp/test.txt
每兩個小時

0 23-7/2,8 * * * echo "Good dream:)" >> /tmp/test.txt
晚上11點到早上7點之間每兩個小時,早上八點

常用命令
service crond start 啟動crond服務
crontab -l #列出cron服務的詳細內容
crontab -u XXX -e #設定xxx用戶的cron服務
crontab -u XXX -r #刪除xxx用戶的所有cron服務

Linux原理與實踐