日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

對話 UNIX,第 7 部分: 命令行慣用語

瀏覽:380日期:2024-06-16 15:23:34

Unix® 具有自己的方言,并且其命令詞匯表非常龐大。但是您并不需要一次掌握所有的內(nèi)容。本文介紹了許多命令行組合,可以促進您對 UNIX 語言的掌握。

當(dāng)您到使用不同語言的國家去旅行時,可能需要掌握一些關(guān)鍵的日常用語,如“這個東西多少錢?、“這是什么肉?以及“洗手間在何處?。記住這些簡短的日常用語可以確保別人不會對您定購的三明治要價太高,并且在需要上廁所的時候,您知道該去何處。

UNIX® 也具有自己的方言,在過去的 6 個月中,這個對話 UNIX 系列為 UNIX 命令行慣用語提供了速成教程。這個月我們將介紹一些有用的短語,它們能夠使您立即成為地道的 UNIX 用戶。帶上牙刷,穿上舒適的鞋子,并且更新您的慣用語。我們要出門迎接陽光、沙灘和貝殼。(置身于陽光和沙灘中,面朝海灘,打開便攜式計算機,然后閱讀本專欄。可不要忘了抹點防曬油。)

開始學(xué)習(xí)之旅

在以前的對話 UNIX 專欄(請參見參考資料部分)中曾多次介紹了 find 命令,這是一種非常有用的實用工具,可用于掃描并處理各種文件,甚至整個 UNIX 文件系統(tǒng)。例如,我經(jīng)常將 find 與 grep 或者 Perl 一起使用,以便對大量的文件進行處理。您需要了解在一大段代碼中的何處定義了變量或常量嗎?可以嘗試下面的命令:

$ find /path/to/src-type f | xargs grep -H -I -i -nstring

該命令的輸出是一個文件名列表,其中包含 string ,包括行編號和匹配的特定文本。在每個匹配的文件名和行編號的前面分別加上了 -H 和 -n 選項。-i 選項忽略大小寫。-I(大寫“I)跳過二進制文件。

您以前可能沒有見過 xargs,它將使用列出的所有選項運行您所指定的命令,在本示例中是 grep,每次使用通過標(biāo)準輸入提供的一個參數(shù)。假設(shè) /path/to/src 目錄包含文件 a、b 和 c,使用 find 與 xargs 等價于:

grep -H -I -i -n string agrep -H -I -i -n string bgrep -H -I -i -n string c

事實上,搜索文件集是一項常見的工作,所以 grep 具有相應(yīng)的選項以遞歸遍歷整個文件系統(tǒng)層次結(jié)構(gòu)。可以使用 -d recurse 或其同義詞 -R 或者 -r。例如,可以使用:

$ grep -H -I -i -n -R string/path/to/src

這個命令與 find/xargs 完成相同的任務(wù)。(您將發(fā)現(xiàn),許多與文件相關(guān)的 Unix 實用工具都具有遞歸選項。ls -R 可以遞歸地列出層次結(jié)構(gòu)中的內(nèi)容。chmod、chgrp 和 chown 使用 -R 可以遞歸地將模式、組和所有權(quán)變更應(yīng)用到整個文件系統(tǒng)層次結(jié)構(gòu)。在使用 chmod -R 時,請多加小心。如果刪除了目錄的執(zhí)行位,比如 chmod -R a-x,您可能會使得一個目錄變得不可使用。為了更具選擇性,可以使用 find . -type f | xargs chmod a-x。)

那么,什么時候應(yīng)該使用 find/xargs,什么時候應(yīng)該使用 grep 呢?當(dāng)需要具有一定的選擇性時,可以使用 find。find 命令具有許多選項,使得您可以選擇滿足特定要求的文件,如“所有在午夜后修改過的、并由 Joe 擁有的常規(guī)文件。否則,使用 grep -R 就可以了。

另一種實用工具可能比 find 使用起來更加方便,并且速度更快。如果您打算根據(jù)名稱來查找一個文件,那么可以嘗試使用 locate 來代替 find -name。locate 命令周期性地(大約每天一次,由系統(tǒng)管理員設(shè)置)為系統(tǒng)中所有的文件編制目錄,并構(gòu)建一個由路徑和文件名組成的數(shù)據(jù)庫。當(dāng)您運行 locate 時,它將掃描其私有的數(shù)據(jù)庫,嘗試進行匹配。

例如,運行查詢 locate '*.1',將得到名稱以 .1 結(jié)尾的所有文件和目錄。(前面的星號表示匹配任何字符串。)為了方便起見,運行 locate fish 命令與運行 locate '*fish*' 是相同的。

貨幣替換

有許多 Unix 實用工具可以對文件進行修改。在大多數(shù)情況下,可以將經(jīng)過修改的內(nèi)容發(fā)送到標(biāo)準輸出,您可以使用重定向操作符對其進行進一步的處理(使用管道“|)或捕獲其中的結(jié)果(使用 > 或 >> 操作符)。

其他的實用工具(那些通常可以一次處理許多文件的工具)可以出于安全考慮而保留原始文件,并為修改后的內(nèi)容生成一個新的文件。例如,您可以直接在命令行中使用 Perl 對文件進行處理。以下命令:

$ perl -i.bak -pe 's/dollar(s?)/buck1/g' file.txt

將“dollar替換為“buck,將“dollars替換為“bucks。perl -i 命令在原地對 file.txt 進行修改,而 perl -i.bak 則為原始文件建立一個副本,并在其名稱后面添加 .bak,以區(qū)別于新的、經(jīng)過修改的版本。因此,如下的命令:

perl -i.bak -pe 's/dollar(s?)/buck1/g' *

將為當(dāng)前目錄中每個文件創(chuàng)建一個備份。假設(shè)有文件 file1.txt、file2.txt 和 file3.txt,那么您將得到 file1.txt.bak、file2.txt.bak 和 file3.txt.bak。錯誤操作時常發(fā)生,所以建立備份是明智之舉。

如果出現(xiàn)了錯誤,并且必須恢復(fù)原始文件,您只需輸入:mv file1.txt.bak file1.txt

。但是,如果有數(shù)百個文件 需要進行重命名,那又應(yīng)該怎么辦呢?當(dāng)然,您并不希望輸入數(shù)百個單獨的 mv 命令。相反,您可以輸入下面的命令:

foreach file in (*.txt)do mv $file.bak $filedone

它適用于一些簡單的情況,如本示例中的情況。然而,這類任務(wù)非常常見,可以使用另一種特殊的實用工具,它能夠更快速地完成這項任務(wù)。以下命令:

$ rename 's/.bak$//' *.bak

執(zhí)行了相同的任務(wù)。正則表達式 s/.bak$// 將命令行中列出的每個文件名后面的 .bak 刪去,在本示例中是 * 或所有文件,并使用縮短后的名稱作為目標(biāo)文件名。

當(dāng)文件名沒有什么規(guī)律時,rename 命令尤其有用。例如,可以考慮下面這個目錄中的內(nèi)容,它看起來像一個大學(xué)一年級新生的信件集合。

$ lsRenT.txt bEErMoNey.txt gASmoNey.TXt

上面的 foreach 腳本無法處理這個問題,因為這些文件名毫無規(guī)律可循。而 rename 可以輕松地對其進行處理:

$ rename 'y/A-Z/a-z/' *

正則表達式 y/A-Z/a-z/ 中的 y 操作符用于進行轉(zhuǎn)換。轉(zhuǎn)換工作需要兩個列表:一個原始字符列表和一個替換字符列表。如果這兩個列表大小相同,那么在這段文本中,將原始列表中第一個字符的實例替換為替換列表中的第一個字符。換句話說,在本示例中,每個大寫“A的實例都將替換為小寫“a、“B替換為“b,依此類推。文本中的小寫字母保持不變。

如果您需要先對 rename 所執(zhí)行的工作進行預(yù)覽,那么可以添加 -n 選項。這個選項可以顯示該命令所執(zhí)行的工作,但并不真正地進行這些更改:

$ rename -n 'y/A-Z/a-z/' *RenT.txt renamed as rent.txtbEErMoNey.txt renamed as beermoney.txtgASmoNey.TXt renamed as gasmoney.txt$ rename 'y/A-Z/a-z/' *$ lsbeermoney.txt gasmoney.txt rent.txt

其中有一個缺點需要避免:在 Unix 系統(tǒng)中,文件名是區(qū)分大小寫的。一個目錄中可能包含 Aa.Txt 和 aA.txT。如上所述,可以編寫一條重命名規(guī)則將區(qū)分大小寫的文件名轉(zhuǎn)換為小寫文件名,這樣可能會與以前已存在的唯一的文件名發(fā)生沖突。在這種情況下,rename 將如何操作呢?讓我們來看一下:

$ rename -n 'y/A-Z/a-z/' *Aa.Txt renamed as aa.txtaA.txT renamed as aa.txt$ rename 'y/A-Z/a-z/' *aA.txT not renamed: aa.txt already exists$ lsaA.txT aa.txt

如果您希望在進行重命名的過程中刪除現(xiàn)有的文件,那么可以添加 -f 標(biāo)志。在這個示例中,將得到一個名為 aa.txt 的文件。那么哪個文件是其原始文件呢?因為 rename 按照字母順序進行處理,后面的 aA.txT 文件是現(xiàn)在的 aa.txt。為什么要使用 -f 呢?如果兩個文件是相同的,僅僅是名稱不同,rename -f 會刪除重復(fù)的文件。

不要刪除重復(fù)的文件

文件管理是使用 Unix 系統(tǒng)時非常重要的工作。系統(tǒng)中包含大量的配置文件。您可能擁有非常多的數(shù)據(jù)文件和個人文件。您可能不時地需要刪除或覆蓋某個有價值的文件。Shell 和一些文件管理實用工具可以幫助您避免災(zāi)難。

在 Shell 提示符處輸入下面的命令。這些命令可以在 bash 中執(zhí)行,但 zsh 和其他 Shell 也具有類似的選項。

$ alias mv=mv -i$ alias rm=rm -i$ set -o noclobber

前兩個命令分別在命令行中將 mv 替換為 mv -i、將 rm 替換為 rm -i。交互式的模式強制您對操作進行確認。

第三個命令在 Shell 中提供了一定的安全性。啟用了 noclobber 之后,您就不會一不小心使用 > 重定向操作符覆蓋某個文件:

$ lssecret.txt$ cat > secret.txtbash: secret.txt: cannot overwrite existing file

要禁用 noclobber,可以輸入:set +o noclobber

。您還可以在任何時候使用 >|(一個小于號加上一個豎線)重定向操作符強制進行覆蓋。

$ cat secret.txtI love green eggs and ham.$ echo "No more secrets" >| secret.txt$ cat secret.txtNo more secrets

關(guān)于本地的一些秘密

如果您真的希望發(fā)現(xiàn)一個城市,那么您得到當(dāng)?shù)氐墓娋壅勚幾咴L一下。下面是一些命令行的組合,相當(dāng)于提供旅游資訊的 Zagat。

mkdir -p 可以快速地創(chuàng)建層次結(jié)構(gòu)。使用 -p 選項后,mkdir 將為指定路徑創(chuàng)建所有的目錄和子目錄:

$ mkdir -p make/many/DirectorIEs/at/once$ ls -R./make:many./make/many:directories./make/many/directories:at./make/many/directories/at:once./make/many/directories/at/once:

如果您需要了解下一個發(fā)薪日的時間,只需要輸入 cal。不帶任何參數(shù)時,cal 將顯示當(dāng)前月份的日歷。cal -3 命令顯示上個月、這個月和下個月的日歷,而 cal 06 2009 將顯示 2009 年 6 月的日歷。(我的生日是那一年的某個星期一!)

$ cal  November 2006Su Mo Tu We Th Fr Sa 1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30$ cal 06 2009 June 2009 Su Mo Tu We Th Fr Sa1 2 3 4 5 67 8 9 10 11 12 1314 15 16 17 18 19 2021 22 23 24 25 26 2728 29 30

因為 Unix 具有許多命令,所以不太可能記住所有實用工具的所有選項。事實上,有時候甚至記不住實用工具的名稱。

在遇到困難時,可以求助于 man。例如,要查看如何使用 man 本身,可以輸入 man man。使用 man rm 和 man mv,您還可以查看有關(guān) rm 和 mv 的解釋。并且,如果清楚需要查找的主題,那么您可以使用 man -k 查找與該主題相關(guān)的 man 頁面列表。

$ man -k croncron (8) - daemon to execute scheduled commands (VixIE Cron)crontab (1) - maintain crontab files for individual users (V3)crontab (5) - tables for driving crondh_installcron (1)  - install cron scripts into etc/cron.*

在本示例中,man 找出了一些實用工具的 man 頁面,其中有一行描述內(nèi)容中包含單詞 cron。這些 man 頁面中可能解釋了如何使用 cron,這是一個負責(zé)系統(tǒng)任務(wù)調(diào)度的守護進程。

那么其中的數(shù)值代表什么含義呢?每個數(shù)值表示聯(lián)機 Unix 手冊中的一個部分。第 1 部分保留用于 UNIX 用戶可以在 Shell 中運行的所有命令。第 5 部分描述了一些文件格式。第 8 部分對系統(tǒng)管理命令進行了編目。其他的部分描述了系統(tǒng)調(diào)用 (2)、庫調(diào)用 (3),等等。

正如您所看到的,大多數(shù)命令都會產(chǎn)生某類輸出。大多數(shù)命令行命令使用標(biāo)準輸出來顯示結(jié)果。但其他的一些命令則使用標(biāo)準輸出和標(biāo)準錯誤,并按順序顯示處理過程和錯誤消息。如果您希望忽略這類輸出(這是非常有價值的,因為它通常可以干預(yù)命令行中執(zhí)行的操作),那么可以將輸出重定向到 UNIX bit bucket,/dev/null。這些位只能進,不能出。

下面是一個簡單的示例:

$ lssecret.txt$ cat secret.txtI am the Walrus.$ cat secret.txt > /dev/null$ cat socrates.txt > /dev/nullcat: socrates.txt: No such file or Directory$ cat socrates.txt >& /dev/null$ echo Done.Done.

如果將 cat 的標(biāo)準輸出重定向到 /dev/null,那么將不會顯示任何內(nèi)容,因為已將所有的位發(fā)送到了虛擬的“永久豎向文件。然而,如果出現(xiàn)了錯誤,將顯示發(fā)送到標(biāo)準錯誤的錯誤消息。如果您希望忽略所有的輸出,可以使用 >& 操作符以便將 stdout 和 stderr 丟棄。

您還可以將 /dev/null 作為一個長度為零的文件,以清空現(xiàn)有的文件或者創(chuàng)建新的空白文件:

$ cat secret.txtAnakin Skywalker is Darth Vader.$ cp /dev/null secret.txt$ cat secret.txt$ echo "The moon is made of cheese!" > secret.txt$ cat secret.txtThe moon is made of cheese!$ cat /dev/null > secret.txt$ cat secret.txt$ cp /dev/null newsecret.txt$ cat newsecret.txt$ echo Done.Done.

順便提一下,如果您在 Macintosh 中使用 UNIX,那么可以在一個終端窗口中嘗試 open 命令。例如,如果當(dāng)前工作目錄中有一個名為 poodle.jpg 的文件,命令 open poodle.jpg 將啟動 Preview 并打開 poodle.jpg,Preview 是 Mac OS X 中內(nèi)置的圖像查看器。Mac OS X open 是命令行和 Macintosh 的窗口環(huán)境之間的紐帶,并且它比借助于 Finder 要快得多。

下面來總結(jié)一下!

噢!盡管這是一輛高速行駛的列車,但現(xiàn)在您已經(jīng)做好了準備,可以更深入地探索 UNIX。您甚至了解了在不需要某些內(nèi)容時,應(yīng)該將其丟棄。

和以前一樣,還有更多的內(nèi)容需要介紹。在以后的幾個月中,對話 UNIX 系列將深入研究作業(yè)控制、正則表達式(一種奇怪的方言,但并不難掌握)、如何編譯從 Internet 上下載的新的實用工具,等等。

不要忘了抹點防曬油喲!

標(biāo)簽: Unix系統(tǒng)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产影院| 日韩欧美美女在线观看| 日韩一二三区在线观看| 国产调教精品| 性欧美长视频| 亚洲精品a级片| 亚洲成人不卡| 国产精品视频一区二区三区四蜜臂 | 国产视频欧美| 亚洲高清成人| 深夜视频一区二区| 伊人久久av| 超碰成人av| 美女视频黄免费的久久| 国产乱人伦精品一区| 亚洲人www| 亚洲3区在线| 日韩极品在线观看| 亚洲一级淫片| 香蕉久久国产| 视频在线观看国产精品| 136国产福利精品导航网址| 国产精品蜜芽在线观看| 婷婷综合成人| 日韩精品成人在线观看| 中文字幕成人| 久久激情综合网| 欧美激情久久久久久久久久久| 婷婷精品久久久久久久久久不卡| 亚洲尤物av| 国产视频一区二| 国产精品一区二区精品| 国产精品对白久久久久粗| 福利一区视频| 亚洲精品成人一区| 精品欧美视频| 婷婷激情综合| 麻豆成人综合网| 日韩欧美另类一区二区| 中文在线不卡| 日本欧美韩国一区三区| 国产精品多人| 欧美日韩精品一本二本三本| 黄色在线观看www| 亚洲综合欧美| 国产+成+人+亚洲欧洲在线| 色爱av综合网| 婷婷精品在线| 极品日韩av| 日本国产一区| 丁香婷婷久久| 在线观看视频免费一区二区三区| 美腿丝袜亚洲一区| 尹人成人综合网| 久久国产人妖系列| 欧美日韩精品一本二本三本| 国产女优一区| 四虎国产精品免费观看| 福利视频一区| 国产一区导航| 麻豆精品久久久| 蜜臀精品久久久久久蜜臀| 国产一区二区三区四区大秀| 水野朝阳av一区二区三区| 国产白浆在线免费观看| 欧美一级网站| 亚洲黄页一区| 国产精品亚洲综合在线观看| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 一本综合精品| 亚洲国产福利| 中文字幕亚洲精品乱码| 日韩精品免费一区二区在线观看| 亚洲在线久久| 四虎成人av| 美女性感视频久久| 中文在线一区| 激情中国色综合| 在线综合亚洲| 高清在线一区| 欧美激情网址| 久久99影视| 久久av网址| 国产精品一区二区三区av麻| 日本aⅴ亚洲精品中文乱码| 一级欧美视频| 国产女人18毛片水真多18精品| 亚洲精品在线二区| 亚洲深夜av| 国产一区欧美| 在线观看免费一区二区| 国产精品老牛| 亚洲精品极品少妇16p| 欧美日韩色图| 视频一区二区不卡| 日韩有码av| 欧美成人精品午夜一区二区| 午夜精品婷婷| 欧美日韩国产综合网| 2023国产精品久久久精品双| 亚洲精品福利电影| 91日韩在线| 激情91久久| 国产精品一级在线观看| 国产精品国产三级在线观看| 麻豆一区二区三| 99久久亚洲精品| 欧美亚洲二区| 久久亚洲黄色| 国产精品日韩久久久| 欧美一区免费| 日韩av首页| 国产一卡不卡| 欧美亚洲激情| 国产九九精品| 欧美日韩国产高清| 国产精品久一| 丝袜美腿成人在线| 成人自拍av| 婷婷综合网站| 美女国产精品久久久| 久久蜜桃精品| 欧美激情99| 亚洲精品极品| 9国产精品视频| 秋霞影视一区二区三区| 亚洲久久视频| 婷婷综合五月| 亚洲成av在线| 午夜在线观看免费一区| a天堂资源在线| 久久国产麻豆精品| 亚洲国内精品| 欧美激情视频一区二区三区在线播放| 亚洲a一区二区三区| 国产精品巨作av| 欧美久久一区二区三区| 亚洲精一区二区三区| 国产精品xx| 亚洲另类黄色| 亚洲高清久久| 免费国产自久久久久三四区久久| 国产中文字幕一区二区三区| 国产乱人伦丫前精品视频| 日本电影久久久| 在线一区免费| 国产日韩综合| 免费日韩精品中文字幕视频在线| 久久精品亚洲人成影院| 久久久精品国产**网站| 丝袜脚交一区二区| 国产夫妻在线| 日产精品一区| 电影亚洲精品噜噜在线观看| 久久精品国产久精国产| 色综合五月天| 成人在线免费观看91| 久久精品99国产精品| 91亚洲精品视频在线观看 | 亚洲特级毛片| 老色鬼久久亚洲一区二区| 日韩中文欧美在线| 国产精品毛片| 免费人成在线不卡| 久久国产视频网| 国精品产品一区| 欧洲毛片在线视频免费观看| 中文在线一区| 国产乱论精品| 久久91导航| 一本色道精品久久一区二区三区| 综合亚洲色图| 精品亚洲二区| 国产美女一区| 美女久久久久久 | 久久午夜精品| 久久av免费| 欧美在线资源| 欧美天堂在线| av在线资源| 日韩国产欧美视频| 国产精品中文字幕制服诱惑| 国产精品高颜值在线观看| 免费在线观看视频一区| 久久成人av| 日韩视频一区二区三区在线播放免费观看| 丝袜美腿诱惑一区二区三区 | 亚洲在线成人| 日av在线不卡| 欧美高清一区| 日本视频在线一区| 婷婷综合在线| 国内在线观看一区二区三区| 麻豆视频在线观看免费网站黄 | 婷婷综合五月| 欧美日韩 国产精品| 午夜久久黄色| 理论片午夜视频在线观看| 久久国产免费看| 亚洲三级在线|