12.12 &12.13
基礎命令練習一linux
內容:
1. mkdir ls pwd cd touch vi/vim echo catshell
2. 輸出/出入重定向vim
3. EOF 起止符 往文件中寫入多行內容bash
4. xargs -n 分組顯示運維
5. cp rm mvide
6. man幫助手冊學習
7./data 和 /data/區別網站
7. find cdspa
8. grep head,tail sed awk 排除.net
9. head+tail sed awk grep 顯示某幾行
10. 別名 alias 臨時 永久
11. sed 替換
第1章 建立一個目錄/data
1.1 mkdir命令 ==make directory 建立目錄
mkdir /data
快捷鍵:tab 補全目錄或路徑
1.2 ls -l 顯示詳細信息
[root@oldboy oldboy]# ls -l
total 5408
-rw-r--r--. 1 root root 2097152 Dec 15 2017 ;
-rw-r--r--. 1 root root 1282040 Nov 11 2017 1.log
-rw-r--r--. 1 root root 34 Dec 19 2017 ai.txt
1.3 絕對路徑與相對路徑的區別
絕對路徑:從根開始的路徑 如:/etc/hosts
相對路徑:不是從根開始的路徑 如:etc/hosts
cd 切換路徑
pwd 顯示當前工做目錄
第2章 在/data下面建立文件oldboy.txt
2.1 touch 建立文件
touch /data/oldboy.txt
第3章 爲oldboy.txt增長內容」I am studying linux」 ---(3種方法) (vi/vim echo cat)
3.1 方法一:vi/vim
1. 打開文件
vi /data/oldboy.txt
2. 進入編輯模式(插入模式)
按字母 i
3. 寫入
I am studying linux
4. 退出編輯模式
Esc鍵
5. 保存並退出
:wq
6. 檢查---查看文件內容
cat /data/oldboy.txt
3.1.1 vim補充:
i 編輯模式
Esc 退出編輯模式,進入命令模式
:wq 保存退出
: q! 強制退出不保存
3.2 方法二:echo 輸出到屏幕 把引號中內容顯示到屏幕上
Vim echo >> 三個命令會自動建立文件
echo 「I am studying linux」 >>/data/oldboy.txt
3.2.1 重定向(詳解) 改變命令執行時,數據輸出的方向
>> 或1>> 追加劇定向,增長到文件的結尾 (漏斗)
> 或 1>> 輸出重定向 清空內容,而後追加
>> > 標準輸出重定向 標準追加輸出重定向 會把前面命令執行正確的內容 放 到一個文件中
2> 錯誤重定向:把錯誤信息輸入到後面的文件中,會刪除文件原有內容
2>>錯誤追加劇定向: 把前面錯誤信息追加到後邊的文件中,不會清除文件原有內容
例:
cho "lidao.blog.51cto.com" 2>>/data/error.txt
[root@oldboyedu-39 ~]# cho "lidao.blog.51cto.com" 2>>/data/error.txt
[root@oldboyedu-39 ~]# cat /data/error.txt
-bash: cho: command not found
-bash: cho: command not found
實例3-1
同時把正確和錯誤的信息都記錄下來
#我想把執行對的結果放到文件中 /data/oldboy.txt
#我想把執行有錯誤的放到文件中 /data/oldboy.txt
echo 「lidao.blog.51cto.com」 2>>/data/oldboy.txt >>/data/oldboy.txt
或
echo "lidao.blog.51cto.com" >>/data/oldboy.txt 2>&1
###/data/oldboy.txt 至關於日誌功能 ,兩條命令執行結果相同
3.3 方法三:cat 查看文件內容 向文件中追加多行
cat >>/data/oldboy.txt<<EOF
I
am
Studying 向一個文件中追加多行
Linux
EOF
3.3.1 EOF 起始結束符號,遇到即中止,可任意相同記號
[root@oldboy oldboy]# cat >>mike.txt <<gao
> I
> love
> you
> gao
[root@oldboy oldboy]# cat mike.txt
I
love
you
3.3.2 < 或 0< 標準輸入重定向 告訴命令從哪裏獲取文件
<< 或 0<< 標準輸入追加劇定向
3.3.3 xargs -n數字 指定顯示列數
[root@oldboy oldboy]# cat mike.txt
I
love
you
[root@oldboy oldboy]# echo "1 2 3 4 5 6 7 8 ">deny.txt
[root@oldboy oldboy]# cat deny.txt
1 2 3 4 5 6 7 8
[root@oldboy oldboy]# xargs -n2 <deny.txt
1 2 前面的命令執行的是後面的文件
3 4
5 6 技巧:「漏斗」的輸出方向
7 8
第4章 把oldboy.txt複製到/tmp下
4.1 cp命令 複製
cp /data/oldboy.txt /tmp
4.2 想把整個目錄複製過去
cp -r 遞歸複製,複製目錄及美容 一層一層複製目錄
第5章 Linux中查看幫助
5.1 man 命令 --上下鍵 空格 退出:q
5.2 網站命令學習
http://linux.51yip.com/
http://man.linuxde.net/
https://www.die.net/
5.3 運維習慣
操做前備份,操做後檢查
cp命令
第6章 把/data目錄移動到/root下
6.1 mv命令
mv /data/ /root/
6.2 擴展:/data 和 /data/ 的區別
/data 表示 /data 目錄 和目錄裏的內容
/data/ 表示目錄裏的內容
第7章 進入/root目錄下的data目錄,刪除oldboy.txt 文件
7.1 rm命令
rm oldboy.txt
參數:
-f 強制刪除(不提醒) -r 遞歸刪除
rm 參數能夠加在最後面
如:rm /data/oldboy -f
7.1.1 防止誤刪除
1.把危險的參數放在最後面
2.儘可能使用相對路徑刪除目錄
3.刪除命令複雜一些 find |xargs
4.不要在/(根)下進行操做
5.給危險命令設置別名
6.把要刪除的文件先複製到/tmp中
第8章 接第六題,退出上一級目錄,刪除data目錄
8.1 find命令的使用
8.1.1 語法:find 在××× 什麼類型 什麼名字
例:find /root/ -type f -name 「oldboy.txt」
查找 /root/目錄下 文件名字爲oldboy.txt
8.1.2 搭配: 1)find |xargs 2)*
1) find |xargs
例: find /root/ -type f -name 「oldboy.txt」 |xargs ls -l
答案: find /root/ -type f -name 「oldboy.txt」 |xargs rm -f
注意:先查看,再刪除,避免誤操做
2)* (星號) 表示全部,任意
例: find /root/ -type f -name 「*.txt」
查找/root/目錄下全部文件名爲。txt的文件
(2)cd 的用法
cd .. 進入當前目錄的上一級目錄
cd../../ 進入當前目錄的上兩級目錄
cd.(點) 表示當前目錄
第9章 已知文件test.txt內容爲: (五種方法)
test
lidao
oldboy
請給出輸出test.txt文件內容時不包含oldboy字符串的命令
9.1 方法一:grep 命令的用法 過濾
選項: -v 排除
答案:grep -v 「oldboy」 /data/test.txt
9.2 方法二:head命令 顯示文件前幾行 默認爲爲前十行
選項: -n數字 或 -數字 顯示文件前幾行
答案:head -2 /data/test.txt
9.3 方法三:awk 命令 ! 表示排除,取反
[root@oldboy oldboy]# awk '/oldboy/' /data/test.txt
oldboy
[root@oldboy oldboy]# awk '!/oldboy' /data/test.txt
awk: !/oldboy
awk: ^ unterminated regexp
[root@oldboy oldboy]# awk '!/oldboy/' /data/test.txt
test
lidao
9.4 方法四:sed命令 d 表示刪除
用法 : d 表示刪除
[root@oldboy oldboy]# sed '/oldboy/d' /data/test.txt
test
lidao
9.5 方法五:sed命令
[root@oldboy oldboy]# sed '3d' /data/test.txt
test
lidao
9.6 小結:
1. grep 過濾
2. head tail
3. awk sed
第10章 請用一條命令完成建立目錄/oldboy/test,即建立/oldboy目錄和/oldboy/test 目錄
10.1 mkdir命令 建立目錄
選項: -p 一次建立多級目錄
答案:mkdir -p /oldboy/test
第11章 已知/tmp下已存在test.txt文件。如何執行命令才能把/mnt/test.txt拷貝到/tmp下覆蓋/tmp/test.txt,而讓系統不提示覆蓋(root權限下) 直接覆蓋
11.1 建立環境
[root@oldboy-gao ~]# touch /mnt/test.txt /tmp/test.txt
11.2 方法一: 臨時取消別名 撬棍(反斜槓)
答案:\cp /mnt/test.txt /tmp/
11.3 方法二: 臨時取消別名 which
使用命令的絕對路徑 which
which +命令 顯示命令的絕對路徑 命令的位置
[root@oldboy-gao ~]# which cp
alias cp='cp -i'
/bin/cp
答案:/bin/cp /mnt/test.txt /tmp/
11.4 方法三: 別名
別名 alias 顯示系統中全部別名
alias cp 顯示cp別名
11.4.1 alias做用:
1. 給危險的命令上道保險
2. 經常使用的命令,複雜的命令簡單化
例:給rm命令設置別名command bny
[root@oldboy-gao ~]# alias rm='echo command bny'
等號左右沒有空格 ,右邊是命令,單引號
[root@oldboy-gao ~]# alias rm
alias rm='echo command bny'
[root@oldboy-gao ~]# rm /mnt
command bny /mnt
11.4.2 unalias 刪除別名
11.4.3 永久設置別名
配置文件/etc/profile
11.4.4 vim 快捷鍵
G 到達文件的最後一行
i 進入編輯模式
o 在當前行下面插入一個新行並進入編輯模式
實例11-1 [root@oldboy-gao /]# tail -2 /etc/profile
unset -f pathmun
alias cp='echo command bny'
使配置文件生效
[root@oldboy-gao /]# source /etc/profile
[root@oldboy-gao ~]# alias cp
alias cp='echo command bny'
[root@oldboy-gao /]# cp /oldboy
command bny /oldboy
[root@oldboy-gao /]#
普通用戶正常有用
但xshell從新鏈接root用戶又變成alias cp=’cp -i’
解決:
11.4.5 修改文件: /root/.bashrc
在三個別名前面加個#(註釋號)號,使其失效,這樣問題就解決了
小結:alias 設置或顯示別名
source 讓別名/配置生效
11.5 問題:
1. 若是配置文件裏設置一個,命令行臨時有設置一個,那個生效?
答:若是從新鏈接 配置文件裏的生效
不從新鏈接 命令行配置生效
11.5.1 注:xargs 不認識別名
第12章 只查看ett.txt文件(共100行)第20到第30行的內容(4種方法)
12.1 建立環境 Seq 生成行 sequence 數字序列
[root@oldboy oldboy]# seq 50 >ett.test
[root@oldboy oldboy]# tail -4 ett.test
47
48
49
50
12.2 方法一: head -30 ett.txt | tail -11
[root@oldboy oldboy]# head -30 ett.test | tail -11
20
21
22
23
24
25
26
27
28
29
30
12.3 方法二:sed命令
選項: -n 取消默認輸出 默認輸出每一行的內容
p pint 顯示
答案:sed -n ‘20,30p’ /oldboy/ett.test
[root@oldboy oldboy]# sed -n '20,30p' ett.test
20
21
22
23
24
25
26
27
28
29
30
12.4 方法三:awk命令
用法:NR==數字 行號
答案:awk ‘NR==20,NR==30’ ett.test
[root@oldboy oldboy]# awk 'NR==20,NR==30' ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5 方法四:grep (碰巧)
12.5.1 -A10 顯示當前內容及接下來的10行
答案:grep -A10 「20」 /oldboy/ett.test
[root@oldboy oldboy]# grep -A10 "20" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5.2 -B10 顯示當前內容及以前的10行
答案:grep -B10 「30」 /oldboy/ett.test
[root@oldboy oldboy]# grep -B10 "30" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5.3 -c35 顯當前內容及先後各5行
grep -C5 「35」 /oldboy/ett.test
[root@oldboy oldboy]# grep -C5 "25" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.6 小結:
1. head+tail
2. sed
3. awk
4. grep
第13章 把/oldboy目錄及其子目錄下全部以拓展名.sh結尾的文件中,文件包含oldboy的字符串所有替換爲oldgril
13.1 sed命令 -i 替換文件內容
用法:sed ‘s#你要找誰#要替換成什麼#g’
例: sed ‘s#oldboy#oldgirl#g’ /oldboy/test.sh
在顯示器上顯示oldgril,不會修改文件
通常命令不能直接改變文件內容,須要加選項
防止誤操做
選項: -i 修改文件內容
例: sed -i ‘s#oldboy#oldgirl#g’ /oldboy/test.sh
將/oldboy/test.sh文件中oldboy改成oldgirl
13.2 建立環境
mkdir -p /oldboy/test
cd /oldboy
echo "oldboy">test/del.sh
echo "oldboy">test.sh
echo "oldboy">t.sh
touch oldboy.txt
touch alex.text找出你要處理的文件
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/test.sh
/oldboy/test/del.sh
/oldboy/t.sh
替換一個文件 (oldboy ----> oldgirl )
[root@oldboyedu43 oldboy]# #sed 's#你要找誰#你要替換成什麼#g'
[root@oldboyedu43 oldboy]# cat /oldboy/test.sh
oldboy
[root@oldboyedu43 oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/test.sh
oldgirl
[root@oldboyedu43 oldboy]# cat /oldboy/test.sh
oldboy
[root@oldboyedu43 oldboy]# #修改文件的內容 把文件的內容進行替換 修改
[root@oldboyedu43 oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/test.sh
[root@oldboyedu43 oldboy]# cat /oldboy/test.sh
oldgirl
(1)把find命令找到的文件 都交給sed命令進行替換
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' 先別加選項-i 肯定正確
oldgirl
oldgirl
oldgirl
(2)修改文件內容
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g' 答案
(6)檢查
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldgirl
oldgirl
oldgirl
13.3 方法二 :
13.3.1 $() 先運行裏面的命令 把輸出結果留下來 $()====`` (反引號)
which mikdir mkdir的位置
1. find找到你要處理的文件
find /oldboy/ -type f -name "*.sh"
2. 讓sed命令處理find命令找到的文件
Sed ‘s#oldboy#oldgirl#g’ $(find /oldboy/ -type f -name 「*.sh」)
答案:Sed -i ‘s#oldboy#oldgirl#g’ $(find /oldboy/ -type f -name 「*.sh」)
4.查看
cat $(find ./ -type f -name "*.sh")
小結:
1. find 與 |xargs
2. find 與 $()
3. find 與 -exec
13.4 方法三:find -exec {} \;
答案:
find /oldboy/ -type f -name "*.sh" -exec sed 's#oldgril#oldboy#g' {} \;
find找到的命令放到花括號裏,再被sed 執行
\;結束
小結:
1. sed 進行替換
2. find |xargs
13.5 補充:
1.快捷鍵:
快速使用上個命令最後的文件名
esc + . (點)
13.6 (管道)與|xargs(管道xargs)的區別
13.6.1 管道傳遞的是文本內容, |xargs傳遞的是文件名稱
find |xargs ls -ld##把前一個命令的結果,經過管道傳遞給後面的命令(ls -ld),傳遞的是文件名
find | 命令 ##把前一個命令的結果,經過管道傳遞給後面的命令,傳遞的是普通的文本,文字,字符串
13.6.2 總結:
何時使用管道?
前一個命令沒法知足你,一個命令的結果不是你想要的
何時使用管道xargs
後面的命令,須要處理的是文件名
find |xargs
13.7 三劍客
13.7.1 Sed Linux三劍客老二 擅長取某一行
P ---print 顯示 -n 取消sed命令默認輸出
查找替換
Sed ‘s###g’ -i 對文件內容進行替換和修改
13.7.2 awk Linux三劍客老大 擅長取某一列
NR== ---行號
13.7.3 grep 過濾 在文件中找東西 Linux三劍客老三
-v 排除
-A10 顯示你所要內容及接下來的10行