分享一下我老師大神的人工智能教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
文件系統 |
|
---|
程序 |
|
---|
使用環境 |
|
---|
文字編輯 |
|
---|
Shell 程序 |
|
---|
網絡 |
|
---|
搜索 |
|
---|
雜項 |
|
---|
1. 文件權限
$ls -l- rw-r--r-- 1 dave admin 300 Fed 19 22:05 myfile
文件類型 文件權限 文件屬主 文件屬主dave 的用戶組 文件字節長度 文件更新時間 文件名
- rw-r--r-- 1 dave admin 300 Fed 19 22:05 myfile
1 .文件類型
文件權限位前面的那個字符,我們例子中的橫槓就是文件的類型,即普通文件類型。
文件類型有七種,它可以從 ls -l命令所列出的結果的第一位看出:
d 目錄。l 符號鏈接(指向另一個文件)。s 套接字文件。b 塊設備文件。c 字符設備文件。p 命名管道文件。
- 普通文件,或者更準確地說,不屬於以上幾種類型的文件。
2.文件的權限:
文件的權限可分爲三類:1) 文件屬主,創建該文件的用戶。如 -rw:文件屬主權限 這是前面三位
2) 同組用戶,擁有該文件的用戶組中的任何用戶。如 -r-: 同組用戶權限 這是中間三位
3) 其他用戶,即不屬於擁有該文件的用戶組的某一用戶。如 -r-:其他用戶權限 這是最後三位
3.修改權限: chmod
1)符合模式:chmod [who] operator [permission] filename
who的含義是:u文件屬主權限。g同組用戶權限。o其他用戶權限。a所有用戶(文件屬主、同組用戶及其他用戶)。
operator的含義:+ 增加權限。-取消權限。= 設定權限。
permission的含義:r讀權限。w寫權限。x 執行權限。s 文件屬主和組set -ID。t 粘性位*。l 給文件加鎖,使其他用戶無法訪問。
u,g,o 針對文件屬主、同組用戶及其他用戶的操作。
chmod u+x myfile //賦予文件屬主執行權限
2) 絕對模式: chmod [mode] file其中mode是一個八進制數:
0400 文件屬主可讀 0040 同組用戶可讀 0004 其他用戶可讀
0200 文件屬主可寫 0020 同組用戶可寫 0002 其他用戶可寫
0100 文件屬主可執行 0010 同組用戶可執行 0001 其他用戶可執行
myfile文件具有這樣的權限:
rw- r-- r--
4+2 4 4
把相應權限位所對應的值加在一起,就是644。
4.chown和chgrp
chown命令的一般形式爲:
chown -R -h owner file
- R選項意味着對所有子目錄下的文件也都進行同樣的操作。
- h選項意味着在改變符號鏈接文件的屬主時不影響該鏈接所指向的目標文件。
如:
$ chown mysql hiscore 把 hiscore文件的屬主改爲mysql
$ chown -R mysql hiscore 遞歸地把hiscore(數據庫名稱)目錄下的所有文件屬主改成mysql
chgrp命令和chown命令的格式差不多
chgrp sybadmin project
把project文件所屬的組由admin變爲sybadmin(系統中的另外一個用戶組) 。
2. ls、find和xargs
ls使用技巧
以找到當前目錄中最大的那個文件:
ls -lSrh
“r”的作用是將大的文件列在後面,而“h”則是給出易於人們閱讀的輸出(MB或者諸如此類)。你也可以搜尋最大的MP3/MPEG文件:
ls -lSrh *.mp*
你也可以通過下面這條命令搜尋最大的目錄:
du -kx | egrep -v "\./.+/" | sort -n
Find命令的一般形式爲:
find pathname -options [-print -exec -ok]讓我們來看看該命令的參數:
pathname find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
-options 爲命令選項
-print find命令將匹配的文件輸出到標準輸出。
-exec find命令對匹配的文件執行該參數所給出的 shell命令。相應命令的形式爲 ' comm -and' {} \;,注意{ }和\;之間的空格。
-ok 和-exec的作用相同,只不過以一種更爲安全的模式來執行該參數所給出的 shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
1. find命令選項
-name 按照文件名查找文件。-perm 按照文件權限來查找文件。
-prune 使用這一選項可以使find命令不在當前指定的目錄中查找, 如果同時使用了-depth選項,那麼-prune選項將被find命令忽略。
-user 按照文件屬主來查找文件。
-group 按照文件所屬的組來查找文件。
-mtime -n +n 按照文件的更改時間來查找文件,
- n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。
find命令還有- atime和-ctime選項,但它們都和-mtime選項相似,所以我們在這裏只介紹- mtime選項。
-nogroup 查找無有效所屬組的文件,即該文件所屬的組在 /etc/groups中不存在。
-nouser 查找無有效屬主的文件,即該文件的屬主在 /etc/passwd中不存在。
-newer file1 ! file2 查找更改時間比文件file1新但比文件file2舊的文件。
-type 查找某一類型的文件,諸如:
b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號鏈接文件。
f - 普通文件。
-size n[c] 查找文件長度爲n塊的文件,帶有c時表示文件長度以字節計。
-depth 在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
-fstype 查找位於某一類型文件系統中的文件,這些文件系統類型通常可以在配置文件/etcfstab中找到,該配置文件中包含了本系統中有關文件系統的信息。
-mount 在查找文件時不跨越文件系統mount點。
-follow 如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio 對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
2. find的例子:
1)匹配$ H O M E目錄下的所有文件,下面兩種方法都可以使用:$ find $HOME -print
$ find ~ -print
2) 在當前目錄中查找suid置位,文件屬主具有讀、寫、執行權限,並且文件所屬組的用戶和其他用戶具有讀和執行的權限的文件,可以用:
$ find . -type f -perm 4755 -print
3 )查找系統中所有文件長度爲0的普通文件,並列出它們的完整路徑,可以用:
$ find / -type f -size 0 -exec ls -l {} \;
可以按照文件長度來查找文件,這裏所指的文件長度既可以用塊(block)來計量,也可以用字節來計量。以字節計量文件長度的表達形式爲N c;以塊計量文件長度只用數字表示即可。
在按照文件長度查找文件時,一般使用這種以字節表示的文件長度,在查看文件系統的大小,因爲這時使用塊來計量更容易轉換。
實例1:在當前目錄下查找文件長度大於1 M字節的文件
命令:
find . -size +1000000c -print
實例2:在/home/apache目錄下查找文件長度恰好爲100字節的文件:
命令:
find /home/apache -size 100c -print
實例3:在當前目錄下查找長度超過10塊的文件(一塊等於512字節)
命令:
find . -size +10 -print
$ find /var/logs -type f -mtime +7 -exec rm {} \;
5) 查找系統中所有屬於audit組的文件,可以用:
$find /-name -group audit -print
6) 我們的一個審計系統每天創建一個審計日誌文件。日誌文件名的最後含有數字,這樣我們一眼就可以看出哪個文件是最新的,哪個是最舊的。 admin.log文件編上了序號:
admin.log.001、admin.log.002等等。下面的find命令將刪除/logs目錄中訪問時間在7日以前、含有數字後綴的admin.log文件。該命令只檢查三位數字,所以相應日誌文件的後綴不要超過999。
$ find /logs -name 'admin.log[0-9][0-9][0-9] '-atime +7 -exec rm {} \;
7) 查找當前文件系統中的所有目錄並排序,可以用:
$ find . -type d -print -local -mount |sort
8) 查找系統中所有的rmt磁帶設備,可以用:
$ find /dev/rmt -print
9)從根目錄開始查找所有擴展名爲.log的文本文件,並找出包含”ERROR”的行:
$ find / -type f -name "*.log" | xargs grep "ERROR"
10、使用find在多個文件中替換掉相同的文本
要替換當前目錄以及下層目錄裏所有文件中的Windows爲Linux,你可以這樣運行:
find . -name '*.txt' -print | xargs perl -pi -e's/Windows/Linux/ig' *.txt
或者如果你更需要讓它只作用於普通文件上
find -type f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/'
3. 後臺執行命令
1. crontab
1). crontab的域是crontab的格式:
分 時 日 月 星期 要運行的命令
第1列 分鐘1~59
第2列 小時1~23(0表示子夜)
第3列 日1~31
第4列 月1~12
第5列 星期0~6(0表示星期天)
第6列 要運行的命令
crontab文件的一個條目是從左邊讀起的,第一列是分,最後一列是要運行的命令,它位於星期的後面。
用橫槓-來表示一個時間範圍,例如你希望星期一至星期五運行某個作業,那麼可以在星期域使用1-5來表示。
使用逗號“,” ,例如你希望星期一和星期四運行某個作業,只需要使用 1,4來表示。
用星號 *來表示連續的時間段。如果你對某個表示時間的域沒有特別的限定,也應該在該域填入 *。
該文件的每一個條目必須含有 5個時間域,而且每個域之間要用空格分隔。該文件中所有的註釋行要在行首用#來表示。
例子:
分 時 日 月 星期 要運行的命令
30 21 * * * /apps/bin/cleanup.sh :表示每晚的21:30運行/apps/bin目錄下的cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh :表示每月1、10、22日的4:45運行/apps/b i n目錄下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \; :表示每週六、週日的1 : 1 0運行一個f i n d命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh:表示在每天18:00至23:00之間每隔30分鐘運行/apps/bin目錄下的dbcheck.sh。
0 23 * * 6 /apps/bin/qtrend.sh :表示每星期六的11:00pm運行/apps/bin目錄下的qtrend.sh。
每隔30分鐘時運行:
*/30 * * * * /apps/bin/cleanup.sh :
2) 創建和提交crontab文件:
創建一個名爲davecron。的文件,加入如下的內容:
#15 minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console
系統將每隔 15分鐘向控制檯輸出一次當前時間。
如果系統崩潰或掛起,從最後所顯示的時間就可以一眼看出系統是什麼時間停止工作的。
提交crontab文件,cron命令的參數:
$ crontab davecron
現在該文件已經提交給cron進程,它將每隔1 5分鐘運行一次。
同時,新創建文件的一個副本已經被放在/var/spool/cron目錄中,文件名就是用戶名davecron。
2) 常用參數:
crontab -e //編輯當前用戶的定時任務
crontab -u linuxso -e //編輯用戶linuxso的定時任務
crontab -r //刪除crontab文件
注意:編輯crontab文件,最好先選擇好編輯器,選vim(3):
update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status------------------------------------------------------------ 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.tiny 10 manual mode
3) $HOME目錄中對crontab文件做一備份:
$crontab -l > $HOME/mycron
4) 恢復丟失的crontab文件:
如果不小心誤刪了crontab文件,假設你在自己的$HOME目錄下還有一個備份,那麼可以將其拷貝到/var/spool/cron/<username>,其中<username>是用戶名。如果由於權限問題無法完
成拷貝,可以用:
$ crontab <filename>
其中,<filename>是你在$HOME目錄中副本的文件名。
我建議你在自己的$HOME目錄中保存一個該文件的副本。我就有過類似的經歷,有數次誤刪了crontab 文件(因爲r鍵緊挨在e鍵的右邊…) 。這就是爲什麼有些系統文檔建議不要直接
編輯crontab 文件,而是編輯該文件的一個副本,然後重新提交新的文件。
有些crontab 的變體有些怪異,所以在使用crontab 命令時要格外小心。如果遺漏了任何選
項,crontab 可能會打開一個空文件,或者看起來像是個空文件。這時敲crontab 鍵退出,不要按
< Ctrl - D >,否則你將丟失crontab 文件。
查看crontab服務狀態:service crond status
手動啓動crontab服務:service crond start
2. at命令提交命令或者shell腳本
1)at命令使用:at命令允許用戶向cron守護進程提交作業,使其在稍後的時間運行。這裏稍後的時間可能是指10min以後,也可能是指幾天以後。如果你希望在一個月或更長的時間以後運行,最好還是使用crontab文件。一旦一個作業被提交, at命令將會保留所有當前的環境變量,包括路徑,不象crontab,只提供缺省的環境。該作業的所有輸出都將以電子郵件的形式發送給用戶,除非你對其輸出進行了重定向,絕大多數情況下是重定向到某個文件中。和crontab一樣,根用戶可以通過/etc目錄下的at.allow和at.deny文件來控制哪些用戶可以使用at命令,哪些用戶不行。不過一般來說,對at命令的使用不如對crontab的使用限制那麼嚴格。
at命令的基本形式爲:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script 是所要提交的腳本或命令。
-l 列出當前所有等待運行的作業。at q命令具有相同的作用。
-r 清除作業。爲了清除某個作業,還要提供相應的作業標識(ID);有些UNIX變體只接受atrm作爲清除命令。
-m 作業完成後給用戶發郵件。
time at命令的時間格式非常靈活:
1) 可以是H、HH.HH MM、HH : MM或H:M,其中H和M分別是小時和分鐘。還可以使用a.m.或p.m.。
2)date日期格式可以是月份數或日期數,而且at命令還能夠識別諸如today、tomorrow這樣的詞。現在就讓我們來看看如何提交作業。
2)使用at命令提交命令或腳本
使用at命令提交作業有幾種不同的形式,可以通過命令行方式,也可以使用at命令提示符。
一般來說在提交若干行的系統命令時,我使用at命令提示符方式,而在提交s h e l l腳本時,使用命令行方式。
如果你想提交若干行的命令,可以在at命令後面跟上日期/時間並回車。然後就進入了at命令提示符,這時只需逐條輸入相應的命令,然後按‘ <CTRL - D>’退出。下面給出一個例子:
root@ubuntu:/home/hadoop/testsh# at 16:10
warning: commands will be executed using /bin/sh
at> find /etc -name "passwd" -print
at> <EOT>
at> job 1 at 2012-10-22 16:10
其中,
<EOT>就是<CTRL - D>。在16:10 系統將執行一個簡單的find命令。
你應當已經注意到,我所提交的作業被分配了一個唯一標識job 1。該命令在完成以後會將全部結果以郵件的形式發送給我。
如果希望向at命令提交一個shell腳本,使用其命令行方式即可。在提交腳本時使用- f選項。
$ at 3.00pm tomorrow -f /apps/bin/db_table.sh
warning: commands will be executed using /bin/sh
job 8 at 2012-10-23 15:00
在上面的例子中,一個叫做db_table.sh的腳本將在明天下午3:00運行。
還可以使用echo命令向at命令提交作業:
$ echo find /etc -name "passwd" -print | at now +1 minute
4. shell輸入與輸出
1 . echo
字符串被重定向到一個名爲myfile文件中:
$ echo "The log files have all been done"> myfile
2 . read
可以使用read 語句從鍵盤或文件的某一行文本中讀入信息,並將其賦給一個變量。如果只
指定了一個變量,那麼read 將會把所有的輸入賦給該變量,直至遇到第一個文件結束符或回
車。
它的一般形式爲: