引言
- 人們說,“圖形用戶界面讓簡單的任務更容易完成, 而命令行界面使完成複雜的任務成爲可能”,到現在這句話仍然很正確。
學習 shell
第二章:什麼是shell
shell是一個程序,接受命令,然後讓操作系統去執行。
- sh和bash區別:bash 是最初 Unix 上由 Steve Bourne 寫成 shell 程序 sh 的增強版。
- 終端仿真器:另一個和 shell 交互的叫做終端仿真器的程序
- #和$區別:
#表示有超級管理員權限。
第三章:文件系統中跳轉
-
pwd: print working directory(的縮寫))命令,來顯示當前工作目錄。
-
當我們首次登錄系統(或者啓動終端仿真器會話)後,當前工作目錄是我們的家目錄。 每個用戶都有他自己的家目錄,當用戶以普通用戶的身份操控系統時,家目錄是唯一 允許用戶寫入文件的地方。
-
相對與絕對路徑: 絕對路徑開始於根目錄,用 / 開始,相當路徑開始於當前目錄,用 . 或者 .. 來表示。
./ 用來表示當前目錄,在幾乎所有的情況下,你可以省略 ./ ,它是隱含的,如果不指定一個文件的路徑,那它被默認爲在當前工作目錄下。 -
cd快捷鍵
平時我們登陸linux後的目錄就是家目錄
關於文件名的重要規則
-
以 “.” 字符開頭的文件名是隱藏文件。這僅表示,ls 命令不能列出它們, 用 ls -a 命令就可以了。當你創建帳號後,幾個配置帳號的隱藏文件被放置在 你的家目錄下。稍後,我們會仔細研究一些隱藏文件,來定製你的系統環境。 另外,一些應用程序也會把它們的配置文件以隱藏文件的形式放在你的家目錄下面。
-
文件名和命令名是大小寫敏感的。文件名 “File1” 和 “file1” 是指兩個不同的文件名。
-
Linux 沒有“文件擴展名”的概念,不像其它一些系統。可以用你喜歡的任何名字 來給文件起名。文件內容或用途由其它方法來決定。雖然類 Unix 的操作系統, 不用文件擴展名來決定文件的內容或用途,但是有些應用程序會。
-
雖然 Linux 支持長文件名,文件名可能包含空格,標點符號,但標點符號僅限 使用 “.”,“-”,下劃線。最重要的是,不要在文件名中使用空格。如果你想表示詞與 詞間的空格,用下劃線字符來代替。過些時候,你會感激自己這樣做
第四章:探究操作系統
-
ls — 列出目錄內容
除了當前目錄以外,還可以指定別的目錄,也可以指定多個目錄[root@localhost /]# ls /home/ /usr/ /home/: ceshi ceshi2 ceshi3 docker-test mysql mysql5.7 /usr/: bin etc games include lib lib64 libexec local sbin share src tmp
選項和參數:
command -options arguments
深入研究長格式輸出:
-
file — 確定文件類型
-
less — 瀏覽文件內容
-
系統目錄介紹
第五章:操作文件和目錄
cp — 複製文件和目錄
cp item... directory
支持多個目錄或文件移動到一個目錄
cp不加參數默認複製的是文件,而非目錄。遞歸的複製文件目錄需要加 -a或者-r 。
通配符 :
mv — 移動/重命名文件和目錄
mv item... directory
把一個或多個條目從一個目錄移動到另一個目錄中。
mkdir — 創建目錄
rm — 刪除文件和目錄
rm item...
item代表一個或多個文件或目錄。
ln — 創建硬鏈接和符號鏈接
符號鏈接: 可以鏈接文件或者目錄
簡單地加上-s選項就可以創建一個符號鏈接,不加-s爲硬鏈接
[root@localhost playground]# ln -s dir1 dir1-sym
[root@localhost playground]# ls
dir1 dir1-sym dir2 fun fun-hard fun-sym
[root@localhost playground]#
第六章:使用命令
type – 說明怎樣解釋一個命令名
which – 顯示會執行哪個可執行程序
man – 顯示命令手冊頁
apropos – 顯示一系列適合的命令
info – 顯示命令 info
whatis – 顯示一個命令的簡潔描述
alias – 創建命令別名
第七章:重定向
-
快速清空或者創建文本
$ > ls-output.txt
。 -
當我們使用 “>” 重定向符來重定向輸出結果時,目標文件總是從開頭被重寫,使用”>>“操作符,將導致輸出結果添加到文件內容之後。
-
我們使用單單一個表示法 &> 來重定向標準輸出和錯誤到文件
ls -l /bin/usr222 &> ls-output.txt
-
管道命令: 上一個命令的輸出作爲下一個命令的輸入。
-
grep : 是個很強大的程序,用來找到文件中的匹配文本並且打印匹配行。這樣使用 grep 命令:
# ps -ef命令查詢出來的結果,作爲參數傳遞給下一個命令grep
[root@localhost ~]# ps -ef | grep ess-news
root 10692 10629 0 10:32 pts/2 00:00:00 grep --color=auto ess-news
root 11911 1 1 May25 ? 00:16:43 /usr/local/jdk1.8/bin/java -jar -Xms256m -Xmx256m -Duser.timezone=Asia/shanghai /apphome/service/ess-news-web.jar --namespace=test
root 32487 1 0 May11 ? 02:38:47 /usr/local/jdk1.8/bin/java -jar -Xms256m -Xmx256m -Duser.timezone=Asia/shanghai /apphome/service/ess-news-job.jar --namespace=test
[root@localhost ~]#
第九章:鍵盤高級操作技巧
- history | grep /usr/bin :給歷史記錄增加了搜索的條件
- 對於history,可以通過Ctrl-r來啓動增量搜索
第十章:權限
id – 顯示用戶身份號
chmod – 更改文件模式
umask – 設置默認的文件權限
su – 以另一個用戶的身份來運行 shell
sudo – 以另一個用戶的身份來執行命令
chown – 更改文件所有者
chgrp – 更改文件組所有權
passwd – 更改用戶密碼
adduser - 添加用戶
useradd
groupadd 添加用戶組
第十一章:進程
ps – 報告當前進程快照
top – 顯示任務
jobs – 列出活躍的任務
bg – 把一個任務放到後臺執行
fg – 把一個任務放到前臺執行
kill – 給一個進程發送信號
killall – 殺死指定名字的進程
shutdown – 關機或重啓系統
配置文件和 shell 環境
第十二章:shell環境
* printenv : 打印部分或所有的環境變量
* set : 設置shell選項
* export : 導出環境變量,讓隨後執行的程序知道
* alias - 創建命令別名
- 登錄 shell 會讀取一個或多個啓動文件
- source:修改了配置文件需要及時生效
第十三章:vi簡介
- 有一個古老的笑話,說是一個在紐約的遊客向行人打聽這座城市中著名古典音樂場館的方向。
遊客: 請問一下,我怎樣去卡內基音樂大廳?
行人: 練習,練習,練習 - 使用vi有三種模式: 命令模式、插入模式、末行模式
- 命令模式下可以通過 / 來進行模糊搜索,然後通過n來循環查找;
- :q 退出
- :q! 強制提出
- :w 保存
- :wq 退出保存
第十四章:自定製shell提示符
主要講了如何自定義登錄後的 [root@localhost ~]#
操作。
常見任務和基本工具
第十五章:軟件包管理
- 主要講了軟件安裝包技術主要由兩種工具類型組成: 底層和上層工具。根據發行版本的不同,底層工具不一樣,如圖所有基於 Red Hat 風格的發行版都依賴於相同的底層程序(rpm),如CentOS,上層是yum。
- 底層工具(rpm)通過軟件包文件來安裝,而上層工具是通過從資源庫中下載了一個軟件包來安裝。
第十六章 : 存儲媒介
第十七章 : 網絡系統
- ping - 發送 ICMP ECHO_REQUEST 數據包到網絡主機
- ftp - 因特網文件傳輸程序
- wget - 非交互式網絡下載器
- ssh - OpenSSH SSH 客戶端(遠程登錄程序)
第十八章 : 查找文件
- locate – 通過名字來查找文件
- find – 在一個目錄層次結構中搜索文件
第十九章 : 歸檔和備份
第二十章 : 正則表達式
linux查找文件支持正則表達式
第二十四章 : 編譯程序
- 什麼是編譯?
編譯就是把源代碼翻譯成機器可以讀懂的語言。 - 所有的程序都是可編譯的嗎?
編寫 Shell 腳本
第二十五章 : 編寫第一個 Shell 腳本
# #!字符序列是一種特殊的結構叫做 shebang。 這個 shebang 被用來告訴操作系統將執行此腳本所用的解釋器的名字
#!/bin/bash
# this is a demo
echo 'hello shell'!
保存文件,名字叫hello
[root@localhost ~]# hello #會從$PATH裏找
-bash: hello: 未找到命令
[root@localhost ~]# ./hello #./表示當前目錄
hello shell!
第12章,我們討論了 PATH 環境變量及其在系統 查找可執行程序方面的作用。回顧一下,如果沒有給出可執行程序的明確路徑名,那麼系統每次都會 搜索一系列的目錄
第二十六章 : 啓動一個項目
command可以爲任何linux命令,cat時就輸出…
編輯文件
輸出:
第二十七章 : 自頂向下設計
先確定上層步驟,然後再逐步細化這些步驟的過程被稱爲自頂向下設計。這種技巧允許我們 把龐大而複雜的任務分割爲許多小而簡單的任務。自頂向下設計是一種常見的程序設計方法, 尤其適合 shell 編程。
#!/bin/bash
# Program to output a system information page
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"
report_uptime () {
return
}
report_disk_space () {
return
}
report_home_space () {
return
}
cat << _EOF_
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
<P>$TIME_STAMP</P>
$(report_uptime)
$(report_disk_space)
$(report_home_space)
</BODY>
</HTML>
_EOF_
…
後面都是教我們如何使用if while for…
最後感謝作者、翻譯…確實對Linux有了一點了解,希望能學之用之