Linux命令【第一篇】
?
1、創建一個目錄/data
記憶方法:英文make directorys縮寫后就是mkdir。
命令:
實踐過程:
總結:
cd后跟相對路徑或者絕對路徑,表示進入目錄,如果不跟任何東西,會進入當前用戶的家目錄。
相對路徑概念:不從/開始,而是從當前目錄開始,例如:data/,mnt/oldboy。
絕對路徑概念:從/開始的目錄,就叫絕對路徑,例如:/data/,/mnt/oldboy。
cd命令記憶方法:change directory。
mkdir [-mp] [目錄名稱] ?建立目錄
????-m:這個參數用來指定要創建目錄的權限,但是很少用,都會用chmod來處理。
????如:mkdir –m 777 /tmp/test,即建立一個權限為777的目錄。
????-p:這個參數用來遞歸創建目錄,mkdir的常用參數。
2、在/data下面建立一個文件oldboy.txt
命令:
實踐過程:
總結:
touch"摸"。touch [文件名] 就是"摸"一下文件,如果文件不存在,就建立新文件,如果存在,就改變文件的訪問時間atime等時間戳信息。
路徑分隔區別:
windows的目錄分隔D:\PIC\oldboy。
linux的目錄分隔/data/。
3、為oldboy.txt增加內容為"I am studying linux"。
方法一:常規編輯方法
執行vi oldboy.txt進入vi編輯器(默認命令模式),點擊a或i進入編輯模式,敲入內容I am studying linux,然后按鍵盤上的esc鍵退出編輯模式(進入到命令模式),最后敲:wq保存并退出。wq解釋write quit。
此方法說明:
vi就是類似記事本一樣的linux下的常用編輯器,如果想功能更豐富可以用vim代替vi,vi/vim的內部有很多的命令技術點,例如i就是insert,進入插入編輯模式的狀態的意思,esc鍵是切換到命令模式,命令模式下可以敲冒號":"在后面才可以接命令參數,例如wq,w是write,q是quit。
vi 編輯器,相當于記事本,有編輯功能,但是較弱。
vim 復制編輯器,相當于emeditor,editplus,notepad++。
快捷鍵:TAB 命令、路徑補全。
方法二:單行或多行文本插入常用命令,內容都是存放到文件的尾部。
實踐過程:
此法說明:
echo是一個打印輸出內容的一個常用命令,配合">或>>"可以為文件覆蓋及追加內容。">"意思為重定向,會清除文件里所有以前數據,">>"為內容追加,只在文件尾部追加需要的內容,還有一個較復雜不常用的類似命令printf。
特殊字符命令:
>重定向,會清除文件里所有以前的數據,增加
>>追加重定向,
方法三:寫腳本常用,追加多行,內容都放在文件的尾部。
方法二、方法三為命令行或腳本中常使用的辦法,都很重要。
方法二用于單行文本,方法三可以是多行文件,文本中如果有特殊字符,如$等需要用\轉義才行。
方法四:
按ctrl+d或ctrl+c組合鍵兩遍結束編輯。此方法為特殊編輯方法。
總結:
echo是一個打印輸出內容的一個常用命令,配合">"或">>"可以為文件覆蓋或追加內容。echo $PATH打印出PATH的值。
重定向:意思是將"數據傳到其他地方"。將某個命令執行后本應該出現在屏幕的數據,傳輸到其他地方,執行命令時,這個命令可能會通過文件讀入數據,經過處理之后,再將數據輸出到屏幕。
>或1> 輸出重定向:把前面輸出的東西輸入到后邊的文件中,會刪除文件原有內容。
>>或1>> 追加重定向:把前面輸出的對象追加到后邊的文件中,不會刪除文件原有內容。
<或<0 輸入重定向:輸入重定向用于改變命令的輸入,后面指定輸入內容,前面跟文件名
<<或<<0 追加輸入重定向: 后跟字符串,用來表示"輸入結束",也可以ctrl+d來結束輸入。
2> 錯誤重定向:把錯誤信息輸入到后邊的文件中,會刪除文件原有內容。
2>> 錯誤追加重定向:把錯誤信息追加到后邊的文件中,不會刪除文件原有內容。
標準輸入(stdin):代碼為0,使用<或<<,數據流向從右向左。
標準正常輸出(stdout):代碼為1,使用>或>>,數據流向從左向右。
標準錯誤輸出(stderr):代碼為2,使用2>或2>>。
箭頭的方向就是數據流的方向。
特殊寫法:
4、把oldboy.txt文件拷貝到/tmp下
命令:
總結:
cp [-aifpru] [源文件] [目標文件]
????-a:相當于-pdr
????-d:若源文件為鏈接文件(link file),則復制鏈接文件屬性而非檔案本身。
????-f:強制,若目標檔案已經存在且無法開啟,則移除后再嘗試。
????-i:若目標文件已經存在時,在覆蓋時會先詢問。
????-p:連同檔案的屬性一起復制過去,而非使用默認屬性。
????-r:遞歸,用于復制目錄。
????-u:若目標文件存在,則目標文件比源文件舊時才復制。
提示:如果源文件是多個,那么目的文件在最后,且是目錄。
cp的重要參數apr。
5、把/data目錄移動到/root下
命令:
總結:
mv [-ifu] [源文件/源目錄] [目的文件/目的目錄]
????-i:如果目的文件已存在,詢問是否覆蓋
????-f:強制執行,不會詢問
????-u:若目的文件存在,則比源文件新才會移動。
提示:如果源文件是多個,那么目的文件在最后,且是目錄。
如:f1、f2是文件,/d1、/d2是目錄
mv f1 f2:如果f2不存在,則相當于f1重命名為f2;如果f2存在,則f1重命名為f2,并覆蓋f2 。
mv f1 /d1:如果/d1不存在,則把f1移動到/下,并重命名為d1;如果/d1存在,則把f1移動到/d1下。
mv /d1 /d2:如果/d2不存在,則把/d1重命名為/d2;如果/d2存在,則把/d1移動到/d2下。
mv /d2 f1:如果f1不存在,則把/d2移動到當前目錄,并重命名為f1;如果f1存在,會提示f1是個文件,不能用目錄覆蓋。
6、進入root目錄下的data目錄,刪除oldboy.txt
命令:
刪除一個文件一般用rm oldboy.txt,此法會提示你確認。用rm –f oldboy.txt方法不會提示確認直接刪除,比較危險。
對于文件的刪除禁止用"rm –fr 文件名",這是殺雞用牛刀的做法,必須禁止掉,最多用"rm –f 文件名"。rm –fr 一般用來強制刪除目錄不提示,非常危險。
建議:
使用mv替代rm,也就是把文件移動到/tmp下,然后等/tmp分區將要滿時一次性刪除,減少犯錯。
find刪除
在腳本中刪除文件或目錄時生產環境的使用方法一般為:
1、和xargs搭配用法
2、使用find的-exec
find命令的原理:
\ :特殊字符,讓一個有特殊意義的字符,脫掉馬甲。
.. :上級目錄
. :當前目錄
\. :代表.號
| :管道(把前一個命令結果的輸出交給后一個程序進行繼續處理)
-type :按文件類型查找
-name :按名字查找,查找的內容最好用雙引號括起來。
! :取反。
刪除目錄下除了oldboy.txt外的所有文件:
linux面試題:刪除一個目錄下所有文件,但保留一個指定文件。
? ?
? ?
7、退出到上級目錄,刪除data目錄。
命令:
總結:
.. :相對路徑,表示當前目錄的上一級目錄,例如:/mnt/oldboy,mnt就是oldboy的上級目錄。
. :相對路徑,表示當前目錄,即當前命令行的目錄。
rm [-irf] [文件/目錄] ?刪除文件/目錄
????-i:詢問用戶是否正確刪除,用y或n來回答。
????-r:刪除目錄時加該選項,刪除目錄及目錄下的文件和目錄。
????-f:強制刪除,不用確認。
rmdir [-p] [目錄名] ?用來刪除空目錄,-p表示遞歸刪除目錄,目錄里不能有文件或者目錄
如:/a/b/c
rmdir /a/b/c :會刪除/a/b/c,而/a/b還在。
rmdir –p /a/b/c :會刪除/a,/a/b,/a/b/c。
但是rmdir /a,rmdir –p /a/b都會出錯,提示:Directory not empty。
8、限定輸出
已知文件test.txt內容為:
test
liyao
oldboy
請給出打印test.txt內容時,不包含oldboy字符串的目錄。
方法一:
head:頭部,取文件的前N行,默認前10行,取出前三行-3 。
方法二:
grep:過濾器,把想要的或者不想要的分離開,-v排除。
提示:也可以使用cat test.txt|grep –v "oldboy",這個命令雖然能實現,但是執行效率差很多。
方法三:
sed:刪除,d表示delete刪除,p表示print打印,-n取消sed的默認輸出,-i改變文件內容。
????sed –n '/過濾的內容/處理的命令' 文件
? ?
方法四:
awk:
9、用一條命令完成創建目錄/oldboy/test,即創建/oldboy目錄和/oldboy/test目錄
命令:
實踐過程:
安裝系統補裝工具命令:
yum安裝或者rpm安裝、源代碼安裝
更新補丁執行(生產環境盡量不做,除非有已知的安全漏洞):
yum update
安裝tree:
tree:顯示目錄樹結構
yum:linux里的包管理器,yum可以幫助解決依賴問題。
例如:yum install tree -y,作用下載tree包,然后調用rpm命令安裝tree包,如果需要依賴包,會自動下載并提前安裝。
rpm: -ivh(安裝顯示輸出)
rpm –ivh 包名.rpm(提前下載好),rpm安裝的最大問題是無法解決依賴問題。
10、已知/tmp目錄下存在test.txt文件,如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋掉/tmp/test.txt,而linux系統不提示是否覆蓋(root權限下)。
命令:
方法一:
/bin/cp /mnt/test.txt /tmp/test.txt
方法二:
\cp /mnt/test.txt /tmp/test.txt
提示:此題就是屏蔽掉系統默認的對應命令別名,默認執行cp的操作是調用了別名的,所以提示覆蓋。
cp命令默認是不會提示overwrite,但是cp的-i選項會提示,而一般Linux的用戶環境文件~/.bashrc中會把cp命名成alias cp='cp -i'。這樣在Linux下輸入cp命令實際上運行的是cp –i,加上一個"\"符號或者寫cp全路徑/bin/cp就是讓此次的cp命令不使用別名(cp -i)運行。
別名概念:
輸入alias查找當前別名。
取消別名設置:unalias(臨時生效,重啟失效)
添加別名設置:
自定義別名oldboy:
自定義rm:
方法三:
unalias cp
cp /mnt/test.txt /tmp/test.txt
提示:命令行處理別名僅在當時生效,重啟系統后失效。
alias:查看以及定義別名
unalias:取消別名
~:用戶的家目錄,針對root,~就代表/root。
別名的配置文件,針對root用戶/root/.bashrc;所有用戶生效,/etc/bashrc或/etc/profile定義,生效執行soure /etc/bashrc或/etc/profile。
別名的作用:
1、通過給危險命令加一別保護參數,防止人為誤操作。
2、把很多復雜的字符串或命令變成一個簡單的字符串或命令。
11、只查看ett.txt文件(100行)內第20到第30行的內容。
命令:
sequence == seq序列
Usage: seq [OPTION]... LAST
or: seq [OPTION]... FIRST LAST
or: seq [OPTION]... FIRST INCREMENT LAST
-s:指定序列的分割符
生成ett文件,seq 100 >ett.txt。
方法一:
tail:尾巴,取出文件的最后N行,默認最后10行,取最后三行-n 3 。
????-f:跟蹤一個文件的尾部實時變化(tail –f ett.txt)。
方法二:
取出第30行:
sed命令與選項:
sed強大的功能,是由以下多種命令和選項聯合工作的結果。sed通過指定某一地址來決定對哪些行來進行處理,如果沒有指定地址,sed默認處理標準輸入所有的行。地址的形式可以是數字,正則表達式,或兩種結合。如果給出的是由逗號連接的兩個地址,則表示sed要處理的內容就是該兩個地址之間的行。
sed命令就是用來處理那些由地址指定的輸入行。
命令 | 功能 |
a\ | 在當前匹配行的后面添加一行或多行文本內容 |
c\ | 更改當前匹配行的文本,替換成新的文本,原文本行內容消失 |
d | 刪除當前模式空間所有的內容 |
D | 刪除當前模式空間內第一個\n之前的內容 |
i\ | 在當前匹配行之前插入一行或多行文本內容 |
h | 把模式空間的內容復制到保持空間,并覆蓋當前保持空間的內容 |
H | 把模式空間的內容追加到保持空間,原保持空間的內容依舊存在(注意兩行之間的\n) |
x | 交換當前模式空間和當前保持空間的內容 |
g | 與s聯合使用時,表示對當前行全局匹配替換 |
g | 取出當前保持空間的內容,并將其復制到模式空間,覆蓋掉原模式空間的內容 |
G | 取出當前保持空間的內容,并將其復制到模式空間,追加到原模式空間內容的后面(注意兩行之間的\n) |
p | 打印匹配行 |
P | 打印當前模式空間內容,直到第一個換行符(\n)為止 |
n | 讀取下一行內容,并復制到模式空間,取代原模式空間的內容 |
N | 讀取下一行內容,并復制到模式空間,追加到原模式空間內容的后面(注意兩行之間的\n) |
q | 第一個模式匹配完成后退出或立即退出 |
r | 從另一個文件中讀取文本,并加入到當前匹配行后面 |
s | 常說的查找并替換,用一個字符串替換成另一個 |
w | 將匹配的行寫入新的文件 |
y | 將字符轉換為另一個字符(對正則表達式不能使用y命令) |
! | 對所選行以外的所有行進行相應處理 |
= | 顯示匹配內容行的行號 |
? ?
sed選項:
選項 | 功能 |
-e | 允許多項編輯 |
-f | 后接sed腳本的文件名 |
-n | 取消默認輸出 |
-i | 修改文件內容 |
? ?
打印:
sed –n '2p' oldboy.txt (打印第二行)
sed –n '$p' oldboy.txt (打印最后一行)
sed –n '1,3p' oldboy.txt (打印第1到3行)
sed –n '/yass/'p oldboy.txt (打印匹配yass的行)
sed –n '4,/The/'p oldboy.txt (在第四行匹配模式The,若匹配,則打印)
sed –n '/\$/'p oldboy.txt (匹配元字符$)
sed –n '1,$'p oldboy.txt (打印整個文件,只需將執行范圍設為第一行到最后一行1,$,$意義最后一行)
sed –n '/.*ing/'p oldboy.txt (任意字符,使用模式/.*ing/查詢以ing結尾的任意單次)
sed –n '/movie/=' oldboy.txt (打印匹配行的行號)
sed –n –e '/movie/p' –e '/movie/=' oldboy.txt (打印匹配行的內容和行號)
sed '=' oldboy.txt|tail -2 (顯示行數或最大行號)
方法三:
awk:一門語言,過濾內容(取列)
????awk '{print $1}' 文件 ?$1第一列,$2第二列
????awk –F "分隔符" '{print $1}' 文件 ?$1第一列,$2第二列,…,$(NF-1)(倒數第二列),$NF(最后一列)
案例:awk默認分隔符空格
-F指定分隔符:
指定輸出行之間的分隔符:
總結:
head [-n] [文件名]:后面直接跟文件名,顯示文件前10行。-n表示顯示文件前n行。
tail [-nf] [文件名]:后面直接跟文件名,顯示文件后10行。-n表示顯示文件后n行。
方法四:
-A:除了顯示匹配的一行之外,并顯示該行之后的num行。
-B:除了顯示匹配的一行之外,并顯示該行之前的num行。
-C:除了顯示匹配的以后之外,并顯示該行前后各num行。
12、分析圖片服務日志,把日志(每個圖片訪問次數*圖片大小的總和)排行,取top10,也就是計算每個url的總訪問大小。
說明:這個功能可以用于IDC網站流量帶寬很高,然后通過分析服務器日志哪些元素占用流量過大,進而進行優化或裁剪該圖片,壓縮js等措施。
13、把/oldboy目錄及其子目錄下所有以擴展名.sh結尾的文件中包含./hostlists.txt的字符串全部替換為./idctest_iplist。
命令:
解析:
sed替換:
sed –i 's#oldboy#oldgirl#g' a.txt
????s:查找并替換,用一個字符串替換成另一個。
????g:與s聯合使用時,表示對當前行全局匹配替換。
????-i:修改文件內容。
????#:分隔符,也可以用/、@等替換。
find查找:
find / -type f –name "a.txt"
組合:
替換當前目錄下面所有文件名為test.txt中的oldboy為oldgirl。
查看:
特殊字符總結:
符號 | 作用 |
> | 輸出重定向符,重定向內容到文件,清除已有的內容,然后加入新內容,如果文件不存在還會創建文件 |
>> | 追加輸出重定向符,>>追加內容到文件(中間無空格) |
< | 輸入重定向(箭頭朝向就是數據流的方向) |
<< | 追加輸入重定向 |
| | 管道,就像一個真實管道一樣,例如:水管左邊進水,右邊流出來。其他的功能,egrep "3306|1521" /etc/services |
\ | 轉義字符,讓有意義的字符脫掉它代表的意義。例如:正則里$表示以什么結尾,用\$表示$符號本身。 |
~ | 當前用戶的家目錄 |
.或./ | 一個點號是當前目錄,其他功能,正則,任意單個字符 |
..或../ | 兩個點號是當前目錄的上級目錄 |
/ | 根目錄,即linux里所有目錄的頂點。也是路徑分隔符,而windows里則為D:\工作目錄\ |
; | 命令分隔符 |
{} | 生成字符或數字序列(seq),一般配合echo等命令使用,find里的{}意思是前面命令的結果,mkdir stu{1..100} |
! | 1、!+字母,表示調出最近一次以此字母開頭的命令;2、!!表示使用最近一次操作的命令;3、!+數字,表示調出歷史的第幾條命令。 |
- | 用戶上一次所在的目錄。-由OLDPWD變量控制。 |
? ?
常用快捷鍵:
tab命令或路徑補全鍵,如果。
ctrl+c終止當前任務命令或程序。
ctrl+d退出當前用戶環境。相當于exit、logout。
ctrl+l清屏。
ctrl+shift+c(ctrl+insert)ssh客戶端SecureCRT里復制的命令。
ctrl+a:到開頭
ctrl+e:到結尾
ctrl+u:剪切光標前
ctrl+k:刪除光標后
轉載于:https://www.cnblogs.com/yinshoucheng-golden/p/6118526.html
總結
以上是生活随笔為你收集整理的Linux命令【第一篇】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 『Spring.NET+NHiberna
- 下一篇: MySQL 中的三中循环 while l