Linux精簡教程
ROS 依賴 Linux 提供底層支持,一般基于 Linux 系統開發,玩轉 ROS 機器人作業系統需要具備基本的 Linux 知識,本篇對Linux 進行基本講解,并講解常用 Linux 操作命令,如果您對 Linux 熟練掌握,請自行跳過該篇,
第一章 初識Linux
1 什么是Linux
? Linux 是全球最受歡迎的開源作業系統,它是一個由 C 語言撰寫的,符合 POSIX 標準的類 UNIX 系統,POSIX 是 Portable Operating System Interface 的縮寫,表示可移植作業系統介面,它規定了作業系統應該為應用編程提供的介面標準,UNIX 是一個強大的多用戶、多任務分時作業系統,支持多種處理器架構,于 1969 年在 AT&T 的貝爾實驗室開發,UNIX 是商業作業系統,需要收費,獲取 Linux 內核原始碼的網址為:http://www.kernel.org ,在這里能夠下載各版本的內核原始碼,包括測驗版和最新穩定版,
? 和Windows作業系統軟體一樣,Linux也是一個作業系統軟體,但是和Windows不同的是,Linux是一套開放源代碼程式的、并可以自由傳播的類Unix作業系統軟體(Unix系統是Linux系統的前身,具備很多優秀特性),其在設計之初,就是基于Intel x86系列CPU架構的計算機的,它是一個基于POSIX的多用戶、多任務并且支持多執行緒和多CPU的作業系統,
? Linux是由世界各地成千上萬的程式員設計和開發實作的,當初開發Linux系統的目的就是建立不受任何商業化軟體著作權制約的、全世界都能自由使用的類Unix作業系統兼容產品,在過去的20年里,Linux系統主要應用于服務器端、嵌入式開發和個人PC桌面三大領域,其中服務器端領域是重中之重,
? 大型、超大型互聯網企業(百度、Sina、淘寶等)都在使用Linux系統作為其服務器端的程式運行平臺,全球及國內排名前十的網站使用的主流系統幾乎都是Linux系統,
2 Linux 系統特點
Linux 是一個開放自由的作業系統內核,具有一些鮮明的特點,
(1) 開放性,遵循世界標準規范,凡遵循國際標準所開發的硬體和軟體,都能彼此兼容,可方便地實作互連,
(2) 多用戶,Linux 作業系統是一個真正的多用戶作業系統;系統資源可以被不同用戶各自擁有使用,即每個用戶對自己的資源有特定的權限,互不影響,
(3) 多任務,多任務是現代計算機的最主要的一個特點,它是指計算機同時執行多個程式,而且各個程式的運行互相獨立,Linux 系統調度每一個行程平等地訪問處理器,
(4) 良好的用戶界面,Linux 向用戶提供了兩種界面:用戶界面和系統呼叫,Linux 的傳統用戶界面是基于文本的命令列界面,即 Shell,它既可以聯機使用,又可存在檔案上脫機使用,Shell 有很強的程式設計能力,用戶可方便地用它編制程式,從而為用戶擴充系統功能提供了更高級的手段,
(5) 設備獨立性,Linux 作業系統把所有外部設備統一當作成檔案來看待,只要安裝它們的驅動程式,任何用戶都可以像使用檔案一樣,操縱、使用這些設備,而不必知道它們的具體存在形式,
(6) 完善的網路功能,Linux 內置完整的 POSIX 網路協議堆疊,在通信和網路功能方面優于其它作業系統,Linux 為用戶提供了完善的、強大的網路功能,支持 Internet,網路檔案傳輸,用戶能通過一些 Linux 命令完成內部資訊或檔案的傳輸,遠程訪問功能,
(7) 可靠的系統安全,Linux 采取了許多安全技術措施,為網路多用戶環境中的用戶提供了必要的安全保障,
(8) 模塊化,運行時可以根據系統的需要加載程式而無需重啟系統,Linux 的模塊化極大地提高了 Linux 的可裁剪性和靈活性,
(9) 良好的可移植性,Linux 是一種可移植的作業系統,能夠在從微型計算機到大型計算機的任何環境和任何平臺上運行,目前已經成為支持平臺最廣泛的作業系統,
3 嵌入式Linux
? 嵌入式 Linux 是對運行在嵌入式設備上的 Linux 的統稱,嵌入式 Linux 往往針對于某個特殊領域,專門為實作某些特定的功能而開發,一般說來,嵌入式 Linux 所運行的程式相對來說比較單一,功能定位也比較明確,如嵌入式網關、路由器等,由 Linus 主持開發的 Linux 與其它嵌入式系統產品一樣,嵌入式 Linux 產品在物理形態上與普通Linux 設備有很大差異,不同產品之間物理形態也是各不相同,與桌面 Linux 相比,嵌入式 Linux 產品往往沒有碩大的顯示幕,或者滑鼠鍵盤這樣的外設,

4 Linux 發行版
? 從技術上來說,李納斯?托瓦茲開發的 Linux 只是一個內核,內核指的是一個提供設備驅動、檔案系統、行程管理、網路通信等功能的系統軟體,內核并不是一套完整的作業系統,它只是作業系統的核心,一些組織或廠商將 Linux 內核與各種軟體和檔案包裝起來,并提供系統安裝界面和系統配置、設定與管理工具,就構成了 Linux 的發行版本,
? 在 Linux 內核的發展程序中,各種 Linux 發行版本起了巨大的作用,正是它們推動了 Linux 的應用,從而讓更多的人開始關注 Linux,因此,把 Red Hat、Ubuntu、SUSE 等直接說成 Linux 其實是不確切的,它們是 Linux 的發行版本, 更確切地說,應該叫做“以 Linux 為核心的作業系統軟體包”,
? Linux 的各個發行版本使用的是同一個 Linux 內核,因此在內核層不存在什么兼容性問題,每個版本有不一樣的感覺,只是在發行版本的最外層(由發行商整合開發的應用)才有所體現,
Linux 的發行版本可以大體分為兩類:
-
商業公司維護的發行版本,以著名的 Red Hat 為代表;
-
社區組織維護的發行版本,以 Debian 為代表,
很難說大量 Linux 版本中哪一款更好,每個版本都有自己的特點,下面為大家介紹幾款常用的 Linux 發行版本,
4.1 Red Hat Linux
Red Hat(紅帽公司)創建于 1993 年,是目前世界上資深的 Linux 廠商,也是最獲認可的 Linux 品牌,

Red Hat 公司的產品主要包括 RHEL(Red Hat Enterprise Linux,收費版本)和 CentOS(RHEL 的社區克隆版本,免費版本)、Fedora Core(由 RedHat 桌面版發展而來,免費版本),
Red Hat 是在我國國內使用人群最多的 Linux 版本,資料豐富,如果你有什么不明白的地方,則容易找到人來請教,而且大多數 Linux 教程是以 Red Hat 為例來講解的,
CentOS ,它是基于 Red Hat Enterprise Linux 源代碼重新編譯、去除 RedHat 商標的產物,各種操作使用和付費版本沒有區別,且完全免費,缺點是不向用戶提供技術支持,也不負任何商業責任,有實力的公司可以選擇付費版本,
4.2 Ubuntu Linux
Ubuntu 基于知名的 Debian Linux 發展而來,界面友好,容易上手,對硬體的支持非常全面,是目前最適合做桌面系統的 Linux 發行版本,而且 Ubuntu 的所有發行版本都免費提供,

Ubuntu 的創始人 Mark Shuttleworth 是非常具有傳奇色彩的人物,他在大學畢業后創建了一家安全咨詢公司,1999 年以 5.75 億美元被收購,由此一躍成為南非最年輕有為的本土富翁,作為一名狂熱的天文愛好者,Mark Shuttleworth 于2002 年自費乘坐俄羅斯聯盟號飛船,在國際空間站中度過了 8 天的時光,之后,Mark Shuttleworth 創立了 Ubuntu 社區,2005 年 7 月 1 日建立了 Ubuntu 基金會,并為該基金會投資 1000 萬美元,他說,太空的所見正是他創立 Ubuntu 的精神之所在,如今,他最熱衷的事情就是到處為自由開源的 Ubuntu 進行宣傳演講,
4.3 SuSE Linux
SuSE Linux 以 Slackware Linux 為基礎,原來是德國的 SuSE Linux AG 公司發布的 Linux 版本,1994 年發行了第一版,早期只有商業版本,2004 年被Novell 公司收購后,成立了 OpenSUSE 社區,推出了自己的社區版本OpenSUSE,

SuSE Linux 在歐洲較為流行,在我國國內也有較多應用,值得一提的是,它吸取了 Red Hat Linux 的很多特質,
SuSE Linux 可以非常方便地實作與 Windows 的互動,硬體檢測非常優秀,擁有界面友好的安裝程序、圖形管理工具,對于終端用戶和管理員來說使用非常方便,
4.4 Gentoo Linux
Gentoo 最初由 Daniel Robbins(FreeBSD 的開發者之一)創建,首個穩定版本發布于 2002 年,Gentoo 是所有 Linux 發行版本里安裝最復雜的,到目前為止仍采用原始碼包編譯安裝作業系統,

不過,它是安裝完成后最便于管理的版本,也是在相同硬體環境下運行最快的版本,自從 Gentoo 1.0 面世后,它就像一場風暴,給 Linux 世界帶來了巨大的驚喜,同時也吸引了大量的用戶和開發者投入 Gentoo Linux 的懷抱,
有人這樣評價 Gentoo:快速、設計干凈而有彈性,它的出名是因為其高度的自定制性(基于源代碼的發行版),盡管安裝時可以選擇預先編譯好的軟體包,但是大部分使用 Gentoo 的用戶都選擇自己手動編譯,這也是為什么 Gentoo 適合比較有Linux 使用經驗的老手使用,
4.5 其他 Linux 發行版
除以上 4 種 Linux 發行版外,還有很多其他版本,下表羅列了幾種常見的Linux 發行版以及它們各自的特點:
| 版本名稱 | 網 址 | 特 點 | 軟體包管理器 |
|---|---|---|---|
| Debian | www.debian.org | 開放的開發模式,且易于進行軟體包升級 | apt |
| Fedora Core | www.redhat.com | 擁有數量龐人的用戶,優秀的社區技術支持. 并且有許多創新 | up2date(rpm),yum (rpm),dnf |
|---|---|---|---|
| CentOS | www.centos.org | CentOS 是一種對 RHEL(Red Hat EnterpriseLinux)源代碼再編譯的產物,由于 Linux 是開發源代碼的作業系統,并不排斥樣基于源代碼的再分發,CentOS 就是將商業的 Linux 作業系統RHEL 進行源代碼再編譯后分發,并在 RHEL 的基礎上修正了不少已知的漏洞 | rpm |
| **SUSE | www.suse.com | 專業的作業系統,易用的 YaST 軟體包管理系統 | YaST(rpm),第三 方 apt(rpm)軟體庫(repository) |
| Mandriva | www.mandriva.com | 操作界面友好,使用圖形配置工具,有龐大的社區進行技術支持,支持 NTFS 磁區的大小變更 | rpm |
| KNOPPIX | www.knoppix.com | 可以直接在 CD 上運行,具有優秀的硬體檢測和適配能力,可作為系統的急救盤使用 | apt |
| Gentoo | www.gentoo.org | 高度的可定制性,使用手冊完整 | portage |
| Ubuntu | www.ubuntu.com | 優秀易用的桌面環境,基于 Debian 構建 | apt |
4.6 Linux 發行版本選擇
如果你需要的是一個服務器系統,而且已經厭煩了各種 Linux 的配置,只是想要一個比較穩定的服務器系統,那么建議你選擇 CentOS 或 RHEL,
如果你只是需要一個桌面系統,而且既不想使用盜版,又不想花大價錢購買商業軟體,不想自己定制,也不想在系統上浪費太多時間,則可以選擇 Ubuntu,
如果你想深入摸索一下 Linux 各個方面的知識,而且還想非常靈活地定制自己的Linux 系統,那就選擇 Gentoo 吧,盡情享受 Gentoo 帶來的自由快感,如果你對系統穩定性要求很高,則可以考慮 FreeBSD,
如果你需要使用資料庫高級服務和電子郵件網路應用,則可以選擇 SuSE,
第二章 Linux 檔案系統
1 檔案系統基礎知識
檔案系統的最頂層是由根目錄開始的,系統使用“/”來表示根目錄,在根目錄之下的既可以是目錄,也可以是檔案,而每一個目錄中又可以包含(子)目錄或檔案,如此反復就可以構成一個龐大的檔案系統,
為了避免諸多Linux發行版使用各部相同的檔案系統結構,Linux基金會發布了FHS標準,多數Linux發行版系統都遵循這一標準,
**說明:**FHS(Filesystem Hierarchy Standard),檔案系統層次化標準,該標準規定了 Linux 系統中所有一級目錄以及部分二級目錄(/usr 和 /var)的用途,發布此標準的主要目的就是為了讓用戶清楚地了解每個目錄應該存放什么型別的檔案,
注意,目錄名或檔案名都是區分大小寫的,比如Abc和abc是不同的目錄或檔案,完整的目錄或檔案路徑是由一連串的目錄名所組成的,其中每一個目錄由“/”來分隔,如bin的完整路徑是 /home/bin,
在檔案系統中,有兩個比較特殊的目錄,一個是用戶所在的作業目錄,即當前目錄,可用一個點“.”表示;另一個是當前目錄的上一層目錄,也叫父目錄,用兩個點“…”表示,
如果一個目錄或檔案名是以一個點開始(比如.local),就表示這個目錄或檔案是一個隱藏目錄或檔案,即以默認方式査找時,不顯示該目錄或檔案,
2 檔案系統樹形圖
不同的Linux發行版可能檔案系統樹形圖稍有不同,但大同小異,如下圖所示,

3 一級目錄詳細說明
| 一級目錄 | 功能(作用) |
|---|---|
| /bin/ | 存放系統命令,普通用戶和 root 都可以執行,放在 /bin 下的命令在單用戶模式下也可以執行 |
| /boot/ | 系統啟動目錄,保存與系統啟動相關的檔案,如內核檔案和啟動引導程式(grub)檔案等 |
| /dev/ | 設備檔案保存位置 |
| /etc/ | 組態檔保存位置,系統內所有采用默認安裝方式的服務組態檔全部保存在此目錄中,如用戶資訊、服務的啟動腳本、常用服務的組態檔等 |
| /home/ | 普通用戶的主目錄(也稱為家目錄),在創建用戶時,每個用戶要有一個默認登錄和保存自己資料的位置,就是用戶的主目錄,所有普通用戶的主目錄是在 /home/ 下建立一個和用戶名相同的目錄, |
| /lib/ | 系統呼叫的函式庫保存位置 |
| /media/ | 掛載目錄,系統建議用來掛載媒體設備,如軟盤和光碟 |
| /mnt/ | 掛載目錄,早期 Linux 中只有這一個掛載目錄,并沒有細分,系統建議這個目錄用來掛載額外的設備,如 U 盤、移動硬碟和其他作業系統的磁區 |
| /misc/ | 掛載目錄,系統建議用來掛載 NFS 服務的共享目錄,雖然系統準備了三個默認掛載目錄 /media/、/mnt/、/misc/,但是到底在哪個目錄中掛載什么設備可以由管理員自己決定, |
| /opt/ | 第三方安裝的軟體保存位置,這個目錄是放置和安裝其他軟體的位置,手工安裝的原始碼包軟體都可以安裝到這個目錄中, |
| /root/ | root 的主目錄,普通用戶主目錄在 /home/ 下,root 主目錄直接在“/”下 |
| /sbin/ | 保存與系統環境設定相關的命令,只有 root 可以使用這些命令進行系統環境設定,但也有些命令可以允許普通用戶查看 |
| /srv/ | 服務資料目錄,一些系統服務啟動之后,可以在這個目錄中保存所需要的資料 |
| /tmp/ | 臨時目錄,系統存放臨時檔案的目錄,在該目錄下,所有用戶都可以訪問和寫入,建議此目錄中不能保存重要資料,最好每次開機都把該目錄清空 |
| /lost+found/ | 當系統意外崩潰或意外關機時,產生的一些檔案碎片會存放在這里,在系統啟動的程序中,fsck 工具會檢查這里,并修復已經損壞的檔案系統,這個目錄只在每個磁區中出現,例如,/lost+found 就是根磁區的備份恢復目錄,/boot/lost+found 就是 /boot 磁區的備份恢復目錄 |
| /proc/ | 虛擬檔案系統,該目錄中的資料并不保存在硬碟上,而是保存到記憶體中,主要保存系統的內核、行程、外部設備狀態和網路狀態等,如 /proc/cpuinfo 是保存 CPU 資訊的,/proc/devices 是保存設備驅動的串列的,/proc/net 是保存網路協議資訊的 |
| /sys/ | 虛擬檔案系統,和 /proc/ 目錄相似,該目錄中的資料都保存在記憶體中,主要保存與內核相關的資訊 |
4 二級目錄詳細說明
還有一些比較重要的二級目錄我們也是需要去了解的,具體的說明如下:
| /usr子目錄 | 功能(作用) |
|---|---|
| /usr/bin/ | 存放系統命令,普通用戶和超級用戶都可以執行,這些命令和系統啟動無關,在單用戶模式下不能執行 |
| /usr/sbin/ | 存放根檔案系統不必要的系統管理命令,如多數服務程式,只有 root 可以使用, |
| /usr/lib/ | 應用程式呼叫的函式庫保存位置 |
| /usr/XllR6/ | 圖形界面系統保存位置 |
| /usr/local/ | 手工安裝的軟體保存位置,我們一般建議原始碼包軟體安裝在這個位置 |
| /usr/share/ | 應用程式的資源檔案保存位置,如幫助檔案、說明檔案和字體目錄 |
| /usr/src/ | 原始碼包保存位置,我們手工下載的原始碼包和內核原始碼包都可以保存到這里, |
| /usr/include | C/C++ 等編程語言頭檔案的放置目錄 |
| /var子目錄 | 功能(作用) |
|---|---|
| /var/lib/ | 程式運行中需要呼叫或改變的資料保存位置,如 MySQL 的資料庫保存在 /var/lib/mysql/ 目錄中 |
| /var/log/ | 登陸檔案放置的目錄,其中所包含比較重要的檔案如 /var/log/messages, /var/log/wtmp 等, |
| /var/run/ | 一些服務和程式運行后,它們的 PID(行程 ID)保存位置 |
| /var/spool/ | 里面主要都是一些臨時存放,隨時會被用戶所呼叫的資料,例如 /var/spool/mail/ 存放新收到的郵件,/var/spool/cron/ 存放系統定時任務, |
| /var/www/ | RPM 包安裝的 Apache 的網頁主目錄 |
| /var/nis和/var/yp | NIS 服務機制所使用的目錄,nis 主要記錄所有網路中每一個 client 的連接資訊;yp 是 linux 的 nis 服務的日志檔案存放的目錄 |
| /var/tmp | 一些應用程式在安裝或執行時,需要在重啟后使用的某些檔案,此目錄能將該類檔案暫時存放起來,完成后再行洗掉 |
第三章 常用linux命令
1 ls命令
ls 命令是Linux下最常用的指令之一,ls命令為英文單詞 list 的縮寫,正如英文單詞 list 的意思,其功能是列出指定目錄下的內容及其相關屬性資訊,
ls [選項] [檔案]
常用引數:
| -a | 顯示所有檔案及目錄 (包括以“.”開頭的隱藏檔案) |
|---|---|
| -l | 使用長格式列出檔案及目錄資訊 |
| -r | 將檔案以相反次序顯示(默認依英文字母次序) |
| -t | 根據最后的修改時間排序 |
| -A | 同 -a ,但不列出 “.” (當前目錄) 及 “…” (父目錄) |
| -S | 根據檔案大小排序 |
| -R | 遞回列出所有子目錄 |
參考實體
列出所有檔案(包括隱藏檔案):
[root@jubot ~]# ls -a
列出檔案的詳細資訊:
[root@jubot ~]# ls -l
列出根目錄(/)下的所有目錄:
[root@jubot ~]# ls /
列出當前作業目錄下所有名稱是 “s” 開頭的檔案 :
[root@jubot ~]# ls -ltr s*
列出 /bin 目錄下的所有目錄及檔案的詳細資訊 :
[root@jubot ~]# ls -lR /bin
列出當前作業目錄下所有檔案及目錄并以檔案的大小進行排序 :
[root@jubot ~]# ls -AS
2 mkdir命令
mkdir命令是“make directories”的縮寫,用來創建目錄,
注意:默認狀態下,如果要創建的目錄已經存在,則提示已存在,而不會繼續創建目錄, 所以在創建目錄時,應保證新建的目錄與它所在目錄下的檔案沒有重名,
語法格式 : mkdir [引數] [目錄]
常用引數:
| -p | 遞回創建多級目錄 |
|---|---|
| -m | 建立目錄的同時設定目錄的權限 |
| -z | 設定安全背景關系 |
| -v | 顯示目錄的創建程序 |
參考實體
在作業目錄下,建立一個名為 dir 的子目錄:
[root@jubot ~]# mkdir dir
在目錄/usr/jubot下建立子目錄dir,并且設定檔案屬主有讀、寫和執行權限,其他人無權訪問
[root@jubot ~]# mkdir -m 700 /usr/jubot/dir
同時創建子目錄dir1,dir2,dir3:
[root@jubot ~]# mkdir dir1 dir2 dir3
遞回創建目錄:
[root@jubot ~]# mkdir -p jubot/dir
3 cd命令
cd命令是”change directory”中單詞的首字母縮寫,其英文釋義是改變目錄,所以該命令的功能是從當前目錄切換到指定目錄,
其中目錄的路徑可分為絕對路徑和相對路徑,若目錄名稱省略,則切換至使用者的用戶目錄(也就是剛登錄時所在的目錄),
另外,“~”也表示為用戶目錄的意思,“.”則是表示目前所在的目錄,“…”則表示當前目錄位置的上一級目錄,
**語法格式:**cd [引數] [目錄名]
常用引數:
| -P | 如果切換的目標目錄是一個符號鏈接,則直接切換到符號鏈接指向的目標目錄 |
|---|---|
| -L | 如果切換的目標目錄是一個符號鏈接,則直接切換到符號鏈接名所在的目錄 |
| – | 僅使用”-“選項時,當前目錄將被切換到環境變數”OLDPWD”對應值的目錄 |
| ~ | 切換至當前用戶目錄 |
| … | 切換至當前目錄位置的上一級目錄 |
參考實體
將當前作業目錄切換到dir目錄,并使用pwd命令查看當前目錄:
[root@jubot ~]# cd dir
[root@jubot dir]# pwd
/root/dir
使用“cd ~ ”和“cd … ”命令進行目錄的切換操作,并使用pwd命令查看當前目錄:
注意:使用“cd ~ ”命令可以直接切換到當前用戶目錄,而“cd … ”是切換到上一級目錄,
[root@jubot dir]# pwd
/root/dir
[root@jubot dir]# cd ~
[root@jubot ~]# pwd
/root
[root@jubot dir]# pwd
/root/dir
[root@jubot dir]# cd ..
[root@jubot dir]# pwd
/root
使用“cd …/…”命令回傳上兩級目錄:
[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2
[root@jubot dir_2]# cd ../..
[root@jubot dir]# pwd
/root/dir
使用“cd”命令回傳當前用戶目錄,“cd – ” 命令回傳上一次所在目錄:
[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2
[root@jubot dir_2]# cd
[root@jubot ~]# pwd
/root
[root@jubot ~]# cd -
/root/dir/dir_1/dir_2
[root@jubot dir_2]# pwd
/root/dir/dir_1/dir_2
4 touch命令
touch命令有兩個功能:一是創建新的空檔案,二是改變已有檔案的時間戳屬性,
touch命令會根據當前的系統時間更新指定檔案的訪問時間和修改時間,如果檔案不存在,將會創建新的空檔案,除非指定了”-c”或”-h”選項,
注意:在修改檔案的時間屬性的時候,用戶必須是檔案的屬主,或擁有寫檔案的訪問權限,
**語法格式:**touch [引數] [檔案]
常用引數:
| -a | 改變檔案的讀取時間記錄 |
|---|---|
| -m | 改變檔案的修改時間記錄 |
| -r | 使用參考檔的時間記錄,與 --file 的效果一樣 |
| -c | 不創建新檔案 |
| -d | 設定時間與日期,可以使用各種不同的格式 |
| -t | 設定檔案的時間記錄,格式與 date 命令相同 |
| –no-create | 不創建新檔案 |
| –help | 顯示幫助資訊 |
| –version | 列出版本訊息 |
參考實體
創建空檔案:
[root@jubot ~]# touch file.txt
批量創建檔案:
[root@jubot ~]# touch file{1..5}.txt
[root@jubot ~]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt
修改檔案的access(訪問)時間:
[root@jubot ~]# stat file.txt
File: file.txt
Size: 0 Blocks: 0 IO Block: 512 regular empty file
Device: 2h/2d Inode: 87538717757135273 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ root) Gid: ( 1000/ root)
Access: 2019-04-07 00:25:34.729216500 +0800
Modify: 2019-04-07 00:25:34.729216500 +0800
Change: 2019-04-07 00:25:34.729216500 +0800
Birth: -
[root@jubot ~]# touch -a file.txt
[root@jubot ~]# stat file.txt
File: file.txt
Size: 0 Blocks: 0 IO Block: 512 regular empty file
Device: 2h/2d Inode: 87538717757135273 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ root) Gid: ( 1000/ root)
Access: 2019-04-07 00:26:13.004116000 +0800
Modify: 2019-04-07 00:25:34.729216500 +0800
Change: 2019-04-07 00:26:13.004116000 +0800
Birth: -
5 cat命令
Linux系統中有很多個用于查看檔案內容的命令,每個命令又都有自己的特點,比如這個cat命令就是用于查看內容較少的純文本檔案的,cat這個命令也很好記,因為cat在英語中是“貓”的意思,
注意:當檔案內容較大時,文本內容會在螢屏上快速閃動(滾屏),用戶往往看不清所顯示的具體內容,因此對于較長檔案內容可以按Ctrl+S鍵,停止滾屏;以及Ctrl+Q鍵可以恢復滾屏;而按Ctrl+C(中斷)鍵則可以終止該命令的執行,或者對于大檔案,干脆用more命令吧!
**語法格式:**cat [引數] [檔案]
常用引數:
| -n | 顯示行數(空行也編號) |
|---|---|
| -s | 顯示行數(多個空行算一個編號) |
| -b | 顯示行數(空行不編號) |
| -E | 每行結束處顯示$符號 |
| -T | 將TAB字符顯示為 ^I符號 |
| -v | 使用 ^ 和 M- 參考,除了 LFD 和 TAB 之外 |
| -e | 等價于”-vE”組合 |
| -t | 等價于”-vT”組合 |
| -A | 等價于 -vET組合 |
| –help | 顯示幫助資訊 |
| –version | 顯示版本資訊 |
參考實體
查看檔案的內容:
[root@jubot ~]# cat filename.txt
查看檔案的內容,并顯示行數編號:
[root@jubot ~]# cat -n filename.txt
查看檔案的內容,并添加行數編號后輸出到另外一個檔案中:
[root@jubot ~]# cat -n jubot.log > linuxprobe.log
清空檔案的內容:
[root@jubot ~]# cat /dev/null > /root/filename.txt
持續寫入檔案內容,碰到EOF符后結束并保存:
[root@jubot ~]# cat > filename.txt <<EOF
> Hello, World
> Linux!
> EOF
將軟盤設備制作成鏡像檔案:
[root@jubot ~]# cat /dev/fd0 > fdisk.iso
6 cp命令
cp命令可以理解為英文單詞copy的縮寫,其功能為復制檔案或目錄,
cp命令可以將多個檔案復制到一個具體的檔案名或一個已經存在的目錄下,也可以同時復制多個檔案到一個指定的目錄中,
**語法格式:**cp [引數] [檔案]
常用引數:
| -f | 若目標檔案已存在,則會直接覆寫原檔案 |
|---|---|
| -i | 若目標檔案已存在,則會詢問是否覆寫 |
| -p | 保留源檔案或目錄的所有屬性 |
| -r | 遞回復制檔案和目錄 |
| -d | 當復制符號連接時,把目標檔案或目錄也建立為符號連接,并指向與源檔案或目錄連接的原始檔案或目錄 |
| -l | 對源檔案建立硬連接,而非復制檔案 |
| -s | 對源檔案建立符號連接,而非復制檔案 |
| -b | 覆寫已存在的檔案目標前將目標檔案備份 |
| -v | 詳細顯示cp命令執行的操作程序 |
| -a | 等價于“dpr”選項 |
參考實體
復制目錄:
[root@jubot ~]# cp -R dir1 dir2/
將檔案test1改名為test2:
[root@jubot ~]# cp -f test1 test2
復制多個檔案:
[root@jubot ~]# cp -r file1 file2 file3 dir
互動式地將目錄 /usr/jubot 中的所有.c檔案復制到目錄 dir 中:
[root@jubot ~]# cp -r /usr/jubot/*.c dir
7 mv命令
mv命令是“move”單詞的縮寫,其功能大致和英文含義一樣,可以移動檔案或對其改名,
這是一個使用頻率超高的檔案管理命令,我們需要特別留意它與復制的區別:mv與cp的結果不同,mv命令好像檔案“搬家”,檔案名稱發生改變,但個數并未增加,而cp命令是對檔案進行復制操作,檔案個數是有增加的,
**語法格式:**mv [引數]
常用引數:
| -i | 若存在同名檔案,則向用戶詢問是否覆寫 |
|---|---|
| -f | 覆寫已有檔案時,不進行任何提示 |
| -b | 當檔案存在時,覆寫前為其創建一個備份 |
| -u | 當源檔案比目標檔案新,或者目標檔案不存在時,才執行移動此操作 |
參考實體
將檔案file_1重命名為file_2:
[root@jubot ~]# mv file_1 file_2
將檔案file移動到目錄dir中 :
[root@jubot ~]# mv file /dir
將目錄dir1移動目錄dir2中(前提是目錄dir2已存在,若不存在則改名):
[root@jubot ~]# mv /dir1 /dir2
將目錄dir1下的檔案移動到當前目錄下:
[root@jubot ~]# mv /dir1/* .
8 rm命令
rm是常用的命令,該命令的功能為洗掉一個目錄中的一個或多個檔案或目錄,它也可以將某個目錄及其下的所有檔案及子目錄均洗掉,對于鏈接檔案,只是洗掉了鏈接,原有檔案均保持不變, rm也是一個危險的命令,使用的時候要特別當心,尤其對于新手,否則整個系統就會毀在這個命令(比如在/(根目錄)下執行rm * -rf),所以,我們在執行rm之前最好先確認一下在哪個目錄,到底要洗掉什么東西,操作時保持高度清醒的頭腦,
**語法格式:**rm [引數] [檔案]
常用引數:
| -f | 忽略不存在的檔案,不會出現警告資訊 |
|---|---|
| -i | 洗掉前會詢問用戶是否操作 |
| -r/R | 遞回洗掉 |
| -v | 顯示指令的詳細執行程序 |
參考實體
洗掉前逐一詢問確認:
[root@jubot ~]# rm -i test.txt.bz2
rm: remove regular file `test.txt.bz2'?
直接洗掉,不會有任何提示:
[root@jubot ~]# rm -f test.txt.bz2
遞回洗掉目錄及目錄下所有檔案:
[root@jubot ~]# mkdir /data/log
[root@jubot ~]# rm -rf /data/log
洗掉當前目錄下所有檔案:
[root@jubot ~]# rm -rf *
清空系統中所有的檔案(謹慎):
[root@jubot ~]# rm -rf /*
9 find命令
find命令可以根據給定的路徑和運算式查找的檔案或目錄,find引數選項很多,并且支持正則,功能強大,和管道結合使用可以實作復雜的功能,是系統管理者和普通用戶必須掌握的命令,
find如不加任何引數,表示查找當前路徑下的所有檔案和目錄,如果服務器負載比較高盡量不要在高峰期使用find命令,find命令模糊搜索還是比較消耗系統資源的,
語法格式:find [引數] [路徑] [查找和搜索范圍]
常用引數:
| -name | 按名稱查找 |
|---|---|
| -size | 按大小查找 |
| -user | 按屬性查找 |
| -type | 按型別查找 |
| -iname | 忽略大小寫 |
參考實體
使用-name引數查看/etc目錄下面所有的.conf結尾的組態檔:
[root@jubot ~]# find /etc -name "*.conf
使用-size引數查看/etc目錄下面大于1M的檔案:
[root@jubot ~]# find /etc -size +1M
查找當前用戶主目錄下的所有檔案:
[root@jubot ~]# find $HOME -print
列出當前目錄及子目錄下所有檔案和檔案夾:
[root@jubot ~]# find .
在/home目錄下查找以.txt結尾的檔案名:
[root@jubot ~]# find /home -name "*.txt"
在/var/log目錄下忽略大小寫查找以.log結尾的檔案名:
[root@jubot ~]# find /var/log -iname "*.log"
搜索超過七天內被訪問過的所有檔案:
[root@jubot ~]# find . -type f -atime +7
搜索訪問時間超過10分鐘的所有檔案:
[root@jubot ~]# find . -type f -amin +10
找出/home下不是以.txt結尾的檔案:
[root@jubot ~]# find /home ! -name "*.txt"
10 grep命令
grep是“global search regular expression and print out the line”的簡稱,意思是全面搜索正則運算式,并將其列印出來,這個命令可以結合正則運算式使用,它也是linux使用最為廣泛的命令,
grep命令的選項用于對搜索程序的補充,而其命令的模式十分靈活,可以是變數、字串、正則運算式,需要注意的是:一當模式中包含了空格,務必要用雙引號將其引起來,
linux系統支持三種形式的grep命令,第一種:grep,標準,模仿的代表,第二種:egrep,簡稱擴展grep命令,其實和grep -E等價,支持基本和擴展的正則運算式,第三種:fgrep,簡稱快速grep命令,其實和grep -F等價,不支持正則運算式,按照字串表面意思進行匹配,
語法格式: grep [引數]
常用引數:
| -i | 搜索時,忽略大小寫 |
|---|---|
| -c | 只輸出匹配行的數量 |
| -l | 只列出符合匹配的檔案名,不列出具體的匹配行 |
| -n | 列出所有的匹配行,顯示行號 |
| -h | 查詢多檔案時不顯示檔案名 |
| -s | 不顯示不存在、沒有匹配文本的錯誤資訊 |
| -v | 顯示不包含匹配文本的所有行 |
| -w | 匹配整詞 |
| -x | 匹配整行 |
| -r | 遞回搜索 |
| -q | 禁止輸出任何結果,已退出狀態表示搜索是否成功 |
| -b | 列印匹配行距檔案頭部的偏移量,以位元組為單位 |
| -o | 與-b結合使用,列印匹配的詞據檔案頭部的偏移量,以位元組為單位 |
參考實體
支持多檔案查詢并支持使用通配符:
[root@jubot ~]# grep zwx file_* /etc/hosts
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj
輸出匹配字串行的數量:
[root@jubot ~]$ grep -c zwx file_*
file_1:2
file_2:1
file_3:0
列出所有的匹配行,并顯示行號:
[root@jubot ~]# grep -n zwx file_*
file_1:1:zwx
file_1:4:zwx
file_1:10:zwxddkjflkdjfdlkfjlsdkj
file_2:2:zwx
file_4:3:dkfjlzwxejfkje
file_4:4:zwx djfkdjf
file_4:5:zwxedkfgj
顯示不包含模式的所有行:
[root@jubot ~]# grep -vc zwx file_*
file_1:7
file_2:4
file_3:5
file_4:2
不再顯示檔案名:
[root@jubot ~]# grep -h zwx file_*
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
zwx
dkfjlzwxejfkje
只列出符合匹配的檔案名,不列出具體匹配的行:
[root@jubot ~]# grep -l zwx file_*
file_1
file_2
file_4
不顯示不存在或無匹配的文本資訊:
[root@jubot ~]# grep -s zwx file1 file_1
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep zwx file1 file_1
grep: file1: No such file or directory
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
遞回搜索,不僅搜索當前目錄,還搜索子目錄:
[root@jubot ~]# grep -r zwx file_2 *
file_2:zwx
anaconda-ks.cfg:user --name=zwx --gecos="zwx"
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj
initial-setup-ks.cfg:user --name=zwx --gecos="zwx"
匹配整詞,以字面意思去解釋他,相當于精確匹配:
[root@jubot ~]# grep zw* file_1
zwx
zwx
zdkfjeld
zw
ze
zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep -w zw* file_1
zw
匹配整行,檔案中的整行與模式匹配時,才列印出來:
[root@jubot ~]# grep -x zwx file_*
file_1:zwx
file_1:zwx
file_2:zwx
不輸出任何結果,已退出狀態表示結果:
[root@jubot ~]# grep -q zwx file_1
[root@jubot ~]# echo $?
0
[root@jubot ~]# grep -q zwx file_5
[root@jubot ~]# echo $?
1
[root@jubot ~]# grep -q zwx file5
grep: file5: No such file or directory
[root@jubot ~]# echo $?
2
查找一個檔案中的空行和非空行:
[root@jubot ~]# grep -c ^$ file_1
4
[root@jubot ~]# grep -c ^[^$] file_1
15
匹配任意或重復字符用“.”或“*”符號來實作:
[root@jubot ~]# grep ^z.x file_1
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
[root@jubot ~]# grep ^z* file_6
zwx
dfkjd
11 pwd命令
pwd命令是“print working directory”中每個單詞的首字母縮寫,其功能正如所示單詞一樣,為列印作業目錄,即顯示當前作業目錄的絕對路徑,
在實際作業中,我們經常會在不同目錄之間進行切換,為了防止“迷路”,我們可以使用pwd命令快速查看當前我們所在的目錄路徑,
語法格式: pwd [引數]
常用引數:
| -L | 顯示邏輯路徑 |
|---|---|
參考實體
查看當前作業目錄路徑:
[root@jubot ~]# pwd
/home/jubot
12 ln命令
ln命令是linux系統中一個非常重要命令,英文全稱是“link”,即鏈接的意思,它的功能是為某一個檔案在另外一個位置建立一個同步的鏈接, 一種是hard link,又稱為硬鏈接;另一種是symbolic link,又稱為符號鏈接,
通俗一點理解,可以把硬鏈接當成源檔案的副本,他和源檔案一樣的大小,但是事實上卻不占任何空間,符號鏈接可以理解為類似windows一樣的快捷方式,
符號鏈接 :
- \1. 符號鏈接以路徑的形式存在,類似于Windows作業系統中的快捷方式,
- \2. 符號鏈接可以跨檔案系統 ,硬鏈接不可以,
- \3. 符號鏈接可以對一個不存在的檔案名進行鏈接,硬鏈接不可以,
- \4. 符號鏈接可以對目錄進行鏈接,硬鏈接不可以,
硬鏈接:
- 1.硬鏈接以檔案副本的形式存在,但不占用實際空間,
- \2. 硬鏈接不允許給目錄創建硬鏈接,
- 3.硬鏈接只有在同一個檔案系統中才能創建,
語法格式: ln [引數] [源檔案或目錄] [目標檔案或目錄]
常用引數:
| -b | 為每個已存在的目標檔案創建備份檔案 |
|---|---|
| -d | 此選項允許“root”用戶建立目錄的硬鏈接 |
| -f | 強制創建鏈接,即使目標檔案已經存在 |
| -n | 把指向目錄的符號鏈接視為一個普通檔案 |
| -i | 互動模式,若目標檔案已經存在,則提示用戶確認進行覆寫 |
| -s | 對源檔案建立符號鏈接,而非硬鏈接 |
| -v | 詳細資訊模式,輸出指令的詳細執行程序 |
參考實體
為源檔案file.txt創建硬鏈接file_1:
[root@jubot ~ ]# ln /root/dir/file.txt ./file_1
使用ln命令的“-s”引數來創建目錄的符號鏈接,并使用ls命令來查看鏈接檔案的詳細資訊:
[root@jubot ~]# ln -s dir file
[root@jubot ~]# ls -l
總用量 4
-rw-------. 1 root root 1138 3月 11 14:48 anaconda-ks.cfg
drwxr-xr-x. 2 root root 36 4月 3 08:47 test
lrwxrwxrwx. 1 root root 4 4月 3 08:54 file -> dir
使用ln命令的“-v”引數來輸出命令的詳細執行程序:
[root@jubot ~]# ln -v /root/dir/file.txt ./file_1
'./file_1' => '/root/dir/file.txt'
使用ln命令的“-b”命令來創建目標檔案的備份檔案,并使用ls命令來查看:
[root@jubot ~]# ln -b /root/dir/file.txt ./file_1
[root@jubot ~]# ls
anaconda-ks.cfg file_1 file_1~ dir
13 tar命令
tar命令可以為linux的檔案和目錄創建檔案,利用tar,可以為某一特定檔案創建檔案(備份檔案),也可以在檔案中改變檔案,或者向檔案中加入新的檔案,
tar最初被用來在磁帶上創建檔案,現在,用戶可以在任何設備上創建檔案,利用tar命令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對于備份檔案或將幾個檔案組合成為一個檔案以便于網路傳輸是非常有用的,
**語法格式:**tar [引數] [檔案或目錄]
常用引數:
| -A | 新增檔案到以存在的備份檔案 |
|---|---|
| -B | 設定區塊大小 |
| -c | 建立新的備份檔案 |
| -C <目錄> | 切換作業目錄,先進入指定目錄再執行壓縮/解壓縮操作,可用于僅壓縮特定目錄里的內容或解壓縮到特定目錄 |
| -d | 記錄檔案的差別 |
| -x | 從歸檔檔案中提取檔案 |
| -t | 列出備份檔案的內容 |
| -z | 通過gzip指令壓縮/解壓縮檔案,檔案名最好為*.tar.gz |
| -Z | 通過compress指令處理備份檔案 |
| -f<備份檔案> | 指定備份檔案 |
| -v | 顯示指令執行程序 |
| -r | 添加檔案到已經壓縮的檔案 |
| -u | 添加改變了和現有的檔案到已經存在的壓縮檔案 |
| -j | 通過bzip2指令壓縮/解壓縮檔案,檔案名最好為*.tar.bz2 |
| -v | 顯示操作程序 |
| -l | 檔案系統邊界設定 |
| -k | 保留原有檔案不覆寫 |
| -m | 保留檔案不被覆寫 |
| -w | 確認壓縮檔案的正確性 |
| -p | 保留原來的檔案權限與屬性 |
| -P | 使用檔案名的絕對路徑,不移除檔案名稱前的“/”號 |
| -N <日期格式> | 只將較指定日期更新的檔案保存到備份檔案里 |
| – -exclude=<范本樣式> | 排除符合范本樣式的檔案 |
| – -remove-files | 歸檔/壓縮之后洗掉源檔案 |
參考實體
將所有.jpg的檔案打成一個名為all.tar的包:
[root@jubot ~]# tar -cf all.tar *.jpg
打包檔案之后洗掉源檔案:
[root@jubot ~]# tar -cvf jubot.tar jubot --remove-files
打包檔案以后,以 gzip 壓縮:
[root@jubot ~]# tar -zcvf log.tar.gz jubot.log
14 apt-get命令
apt-get命令是Debian Linux發行版中的APT軟體包管理工具,所有基于Debian的發行都使用這個包管理系統,deb包可以把一個應用的檔案包在一起,大體就如同Windows上的安裝檔案,
**語法格式:**apt-get [引數]
常用引數:
| -c | 指定組態檔 |
|---|---|
參考實體
更新軟體:
[root@jubot ~]# apt-get update
安裝vim:
[root@jubot ~]# apt-get install vim
安裝nginx:
[root@jubot ~]# apt-get install nginx
卸載vim:
[root@jubot ~]# apt-get remove vim
卸載軟體(洗掉組態檔):
[root@jubot ~]# apt-get –purge remove packagename
15 df命令
df命令的英文全稱即“Disk Free”,顧名思義功能是用于顯示系統上可使用的磁盤空間,默認顯示單位為KB,建議使用“df -h”的引陣列合,根據磁盤容量自動變換合適的單位,更利于閱讀,
日常普遍用該命令可以查看磁盤被占用了多少空間、還剩多少空間等資訊,
語法格式: df [引數] [指定檔案]
常用引數:
| -a | 顯示所有系統檔案 |
|---|---|
| -B <塊大小> | 指定顯示時的塊大小 |
| -h | 以容易閱讀的方式顯示 |
| -H | 以1000位元組為換算單位來顯示 |
| -i | 顯示索引位元組資訊 |
| -k | 指定塊大小為1KB |
| -l | 只顯示本地檔案系統 |
| -t <檔案系統型別> | 只顯示指定型別的檔案系統 |
| -T | 輸出時顯示檔案系統型別 |
| – -sync | 在取得磁盤使用資訊前,先執行sync命令 |
參考實體
顯示磁盤磁區使用情況:
[root@jubot ~]# df
檔案系統 1K-塊 已用 可用 已用% 掛載點
devtmpfs 1980612 0 1980612 0% /dev
tmpfs 1994756 0 1994756 0% /dev/shm
tmpfs 1994756 1040 1993716 1% /run
tmpfs 1994756 0 1994756 0% /sys/fs/cgroup
/dev/mapper/fedora_linuxhell-root 15718400 2040836 13677564 13% /
tmpfs 1994756 4 1994752 1% /tmp
/dev/sda1 999320 128264 802244 14% /boot
tmpfs 398948 0 398948 0% /run/user/0
以容易閱讀的方式顯示磁盤磁區使用情況:
[root@jubot ~]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 1.1M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/fedora_linuxhell-root 15G 2.0G 14G 13% /
tmpfs 2.0G 4.0K 2.0G 1% /tmp
/dev/sda1 976M 126M 784M 14% /boot
tmpfs 390M 0 390M 0% /run/user/0
顯示指定檔案所在磁區的磁盤使用情況:
[root@jubot ~]# df /etc/dhcp
檔案系統 1K-塊 已用 可用 已用% 掛載點
/dev/mapper/fedora_jubot-root 15718400 2040836 13677564 13% /
顯示檔案型別為ext4的磁盤使用情況:
[root@jubot ~]# df -t ext4
檔案系統 1K-塊 已用 可用 已用% 掛載點
/dev/sda1 999320 128264 802244 14% /boot
16 zip命令
zip程式將一個或多個壓縮檔案與有關檔案的資訊(名稱、路徑、日期、上次修改的時間、保護和檢查資訊以驗證檔案完整性)一起放入一個壓縮存檔中,可以使用一個命令將整個目錄結構打包到zip存檔中,
對于文本檔案來說,壓縮比為2:1和3:1是常見的,zip只有一種壓縮方法(通縮),并且可以在不壓縮的情況下存盤檔案,(如果添加了bzip 2支持,zip也可以使用bzip 2壓縮,但這些條目需要一個合理的現代解壓縮來解壓縮,當選擇bzip 2壓縮時,它將通貨緊縮替換為默認方法,)zip會自動為每個要壓縮的檔案選擇更好的兩個檔案(通碩訓存盤,如果選擇bzip2,則選擇bzip2或Store),
**語法格式:**zip [引數] [檔案]
常用引數:
| -q | 不顯示指令執行程序 |
|---|---|
| -r | 遞回處理,將指定目錄下的所有檔案和子目錄一并處理 |
| -z | 替壓縮檔案加上注釋 |
| -v | 顯示指令執行程序或顯示版本資訊 |
| -n<字尾字串> | 不壓縮具有特定字尾字串的檔案 |
參考實體
將 /home/html/ 這個目錄下所有檔案和檔案夾打包為當前目錄下的 html.zip:
[root@jubot ~]# zip -q -r html.zip /home/html
壓縮檔案 cp.zip 中洗掉檔案 a.c:
[root@jubot ~]# zip -dv cp.zip a.c
把/home目錄下面的mydata目錄壓縮為mydata.zip:
[root@jubot ~]# zip -r mydata.zip mydata
把/home目錄下面的abc檔案夾和123.txt壓縮成為abc123.zip:
[root@jubot ~]# zip -r abc123.zip abc 123.txt
將 logs目錄打包成 log.zip:
[root@jubot ~]# zip -r log.zip ./logs
17 ping命令
ping命令主要用來測驗主機之間網路的連通性,也可以用于,執行ping指令會使用ICMP傳輸協議,發出要求回應的資訊,若遠端主機的網路功能沒有問題,就會回應該資訊,因而得知該主機運作正常,
不過值得我們注意的是:Linux系統下的ping命令與Windows系統下的ping命令稍有不同,Windows下運行ping命令一般會發出4個請求就結束運行該命令;而Linux下不會自動終止,此時需要我們按CTR+C終止或者使用-c引數為ping命令指定發送的請求數目,
**語法格式:**ping [引數] [目標主機]
常用引數:
| -d | 使用Socket的SO_DEBUG功能 |
|---|---|
| -c | 指定發送報文的次數 |
| -i | 指定收發資訊的間隔時間 |
| -I | 使用指定的網路介面送出資料包 |
| -l | 設定在送出要求資訊之前,先行發出的資料包 |
| -n | 只輸出數值 |
| -p | 設定填滿資料包的范本樣式 |
| -q | 不顯示指令執行程序 |
| -R | 記錄路由程序 |
| -s | 設定資料包的大小 |
| -t | 設定存活數值TTL的大小 |
| -v | 詳細顯示指令的執行程序 |
參考實體
檢測與jujon網站的連通性:
[root@jubot ~]# ping www.jujon.com
連續ping4次:
[root@jubot ~]# ping -c 4 www.jujon.com
設定次數為4,時間間隔為3秒:
[root@jubot ~]# ping -c 4 -i 3 www.jujon.com
利用ping命令獲取指定網站的IP地址:
[root@jubot ~]# ping -c 1 jujon.com | grep from | cut -d " " -f 4
220.181.57.216
18 curl命令
curl命令是一個利用URL規則在shell終端命令列下作業的檔案傳輸工具;它支持檔案的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱curl為下載工具,
作為一款強力工具,curl支持包括HTTP、HTTPS、ftp等眾多協議,還支持POST、cookies、認證、從指定偏移處下載部分檔案、用戶代理字串、限速、檔案大小、進度條等特征;做網頁處理流程和資料檢索自動化,
**語法格式:**curl [引數] [網址]
常用引數:
| -O | 把輸出寫到該檔案中,保留遠程檔案的檔案名 |
|---|---|
| -u | 通過服務端配置的用戶名和密碼授權訪問 |
參考實體
將下載的資料寫入到檔案,必須使用檔案的絕對地址:
[root@jubot ~]# curl https://www.jujon.com/abc.txt --silent -O
訪問需要授權的頁面時,可通過-u選項提供用戶名和密碼進行授權:
[root@jubot ~]# curl -u root https://www.jujon.com/ Enter host password for user 'root':
19 ifconfig命令
ifconfig命令的英文全稱是“network interfaces configuring”,即用于配置和顯示Linux內核中網路介面的網路引數,用ifconfig命令配置的網卡資訊,在網卡重啟后機器重啟后,配置就不存在,要想將上述的配置資訊永遠的存的電腦里,那就要修改網卡的組態檔了,
**語法格式:**ifconfig [引數]
常用引數:
| add<地址> | 設定網路設備IPv6的IP地址 |
|---|---|
| del<地址> | 洗掉網路設備IPv6的IP地址 |
| down | 關閉指定的網路設備 |
| up | 啟動指定的網路設備 |
| IP地址 | 指定網路設備的IP地址 |
參考實體
顯示網路設備資訊:
[root@jujon ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB)
TX bytes:2459063 (2.3 MiB)
啟動關閉指定網卡:
[root@jujon ~]# ifconfig eth0 down
[root@jujon ~]# ifconfig eth0 up
為網卡配置和洗掉IPv6地址:
[root@jujon ~]# ifconfig eth0 add 33ffe:3240:800:1005::2/64
[root@jujon ~]# ifconfig eth0 del 33ffe:3240:800:1005::2/64
用ifconfig修改MAC地址:
[root@jujon ~]# ifconfig eth0 down
[root@jujon ~]# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
[root@jujon ~]# ifconfig eth0 up
[root@jujon ~]# ifconfig eth1 hw ether 00:1D:1C:1D:1E
[root@jujon ~]# ifconfig eth1 up
配置IP地址:
[root@jujon ~]# ifconfig eth0 192.168.1.56
[root@jujon ~]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
[root@jujon ~]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
20 dd命令
dd命令用指定大小的塊拷貝一個檔案,并在拷貝的同時進行指定的轉換,
注意:指定數字的地方若以下列字符結尾則乘以相應的數字:b=512;c=1;k=1024;w=2
**語法格式:**dd [引數]
常用引數:
| -v | 顯示版本資訊 |
|---|---|
| -h | 顯示幫助資訊 |
參考實體
將本地的/dev/hdb整盤備份到/dev/hdd:
[root@jubot ~]# dd if=/dev/hdb of=/dev/hdd
將壓縮的備份檔案恢復到指定盤:
[root@jubot ~]# gzip -dc /root/image.gz | dd of=/dev/hdb
由標準輸入設備讀入字串,并將字串轉換成大寫后,再輸出到標準輸出設備:
[root@jubot ~]# dd conv=ucase
將testfile檔案中的所有英文字母轉換為大寫,然后轉成為testfile_1檔案:
[root@jubot ~]# dd if=testfile_2 of=testfile_1 conv=ucase
修復硬碟:
[root@jubot ~]# dd if=/dev/sda of=/dev/sda
第四章 Vim使用指南
Vim是從 vi 發展出來的一個文本編輯器,代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程式員中被廣泛使用,
簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方, vim 則可以說是程式開發者的一項很好用的工具,
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode), 這三種模式的作用分別是:
1 命令模式
用戶剛剛啟動 vi/vim,便進入了命令模式,
此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字符,比如我們此時按下i,并不會輸入一個字符,i被當作了一個命令,
以下是常用的幾個命令:
- i 切換到輸入模式,以輸入字符,
- x 洗掉當前游標所在處的字符,
- : 切換到底線命令模式,以在最底一行輸入命令,
若想要編輯文本:啟動Vim,進入了命令模式,按下i,切換到輸入模式,
命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令,
2 輸入模式
在命令模式下按下i就進入了輸入模式,
在輸入模式中,可以使用以下按鍵:
- 字符按鍵以及Shift組合,輸入字符
- ENTER,回車鍵,換行
- BACK SPACE,退格鍵,洗掉游標前一個字符
- DEL,洗掉鍵,洗掉游標后一個字符
- 方向鍵,在文本中移動游標
- HOME/END,移動游標到行首/行尾
- Page Up/Page Down,上/下翻頁
- Insert,切換游標為輸入/替換模式,游標將變成豎線/下劃線
- ESC,退出輸入模式,切換到命令模式
3 底線命令模式
在命令模式下按下:(英文冒號)就進入了底線命令模式,
底線命令模式可以輸入單個或多個字符的命令,可用的命令非常多,
在底線命令模式中,基本的命令有(已經省略了冒號):
- q 退出程式
- w 保存檔案
按ESC鍵可隨時退出底線命令模式,
4 vi/vim鍵盤圖

5 vi/vim 按鍵說明
除了上面簡易范例的 i, Esc, :wq 之外,其實 vim 還有非常多的按鍵可以使用,
第一部分:一般模式可用的游標移動、復制粘貼、搜索替換等
| 移動游標的方法 | |
|---|---|
| h 或 向左箭頭鍵(←) | 游標向左移動一個字符 |
| j 或 向下箭頭鍵(↓) | 游標向下移動一個字符 |
| k 或 向上箭頭鍵(↑) | 游標向上移動一個字符 |
| l 或 向右箭頭鍵(→) | 游標向右移動一個字符 |
| 如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動游標, 如果想要進行多次移動的話,例如向下移動 30 行,可以使用 “30j” 或 “30↓” 的組合按鍵, 亦即加上想要進行的次數(數字)后,按下動作即可! | |
| [Ctrl] + [f] | 螢屏『向下』移動一頁,相當于 [Page Down]按鍵 (常用) |
| [Ctrl] + [b] | 螢屏『向上』移動一頁,相當于 [Page Up] 按鍵 (常用) |
| [Ctrl] + [d] | 螢屏『向下』移動半頁 |
| [Ctrl] + [u] | 螢屏『向上』移動半頁 |
| + | 游標移動到非空格符的下一行 |
| - | 游標移動到非空格符的上一行 |
| n | 那個 n 表示『數字』,例如 20 ,按下數字后再按空格鍵,游標會向右移動這一行的 n 個字符,例如 20 則游標會向后面移動 20 個字符距離, |
| 0 或功能鍵[Home] | 這是數字『 0 』:移動到這一行的最前面字符處 (常用) |
| $ 或功能鍵[End] | 移動到這一行的最后面字符處(常用) |
| H | 游標移動到這個螢屏的最上方那一行的第一個字符 |
| M | 游標移動到這個螢屏的中央那一行的第一個字符 |
| L | 游標移動到這個螢屏的最下方那一行的第一個字符 |
| G | 移動到這個檔案的最后一行(常用) |
| nG | n 為數字,移動到這個檔案的第 n 行,例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu) |
| gg | 移動到這個檔案的第一行,相當于 1G 啊! (常用) |
| n | n 為數字,游標向下移動 n 行(常用) |
| 搜索替換 | |
| /word | 向游標之下尋找一個名稱為 word 的字串,例如要在檔案內搜尋 vbird 這個字串,就輸入 /vbird 即可! (常用) |
| ?word | 向游標之上尋找一個字串名稱為 word 的字串, |
| n | 這個 n 是英文按鍵,代表重復前一個搜尋的動作,舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 后,會向下繼續搜尋下一個名稱為 vbird 的字串,如果是執行 ?vbird 的話,那么按下 n 則會向上繼續搜尋名稱為 vbird 的字串! |
| N | 這個 N 是英文按鍵,與 n 剛好相反,為『反向』進行前一個搜尋動作, 例如 /vbird 后,按下 N 則表示『向上』搜尋 vbird , |
| 使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重復的找到一些你搜尋的關鍵詞! | |
| :n1,n2s/word1/word2/g | n1 與 n2 為數字,在第 n1 與 n2 行之間尋找 word1 這個字串,并將該字串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 并取代為 VBIRD 則: 『:100,200s/vbird/VBIRD/g』,(常用) |
| :1,$s/word1/word2/g 或 :%s/word1/word2/g | 從第一行到最后一行尋找 word1 字串,并將該字串取代為 word2 !(常用) |
| :1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 從第一行到最后一行尋找 word1 字串,并將該字串取代為 word2 !且在取代前顯示提示字符給用戶確認 (confirm) 是否需要取代!(常用) |
| 洗掉、復制與貼上 | |
| x, X | 在一行字當中,x 為向后洗掉一個字符 (相當于 [del] 按鍵), X 為向前洗掉一個字符(相當于 [backspace] 亦即是退格鍵) (常用) |
| nx | n 為數字,連續向后洗掉 n 個字符,舉例來說,我要連續洗掉 10 個字符, 『10x』, |
| dd | 洗掉游標所在的那一整行(常用) |
| ndd | n 為數字,洗掉游標所在的向下 n 行,例如 20dd 則是洗掉 20 行 (常用) |
| d1G | 洗掉游標所在到第一行的所有資料 |
| dG | 洗掉游標所在到最后一行的所有資料 |
| d$ | 洗掉游標所在處,到該行的最后一個字符 |
| d0 | 那個是數字的 0 ,洗掉游標所在處,到該行的最前面一個字符 |
| yy | 復制游標所在的那一行(常用) |
| nyy | n 為數字,復制游標所在的向下 n 行,例如 20yy 則是復制 20 行(常用) |
| y1G | 復制游標所在行到第一行的所有資料 |
| yG | 復制游標所在行到最后一行的所有資料 |
| y0 | 復制游標所在的那個字符到該行行首的所有資料 |
| y$ | 復制游標所在的那個字符到該行行尾的所有資料 |
| p, P | p 為將已復制的資料在游標下一行貼上,P 則為貼在游標上一行! 舉例來說,我目前游標在第 20 行,且已經復制了 10 行資料,則按下 p 后, 那 10 行資料會貼在原本的 20 行之后,亦即由 21 行開始貼,但如果是按下 P 呢? 那么原本的第 20 行會被推到變成 30 行, (常用) |
| J | 將游標所在行與下一行的資料結合成同一行 |
| c | 重復洗掉多個資料,例如向下洗掉 10 行,[ 10cj ] |
| u | 復原前一個動作,(常用) |
| [Ctrl]+r | 重做上一個動作,(常用) |
| 這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦! | |
| . | 不要懷疑!這就是小數點!意思是重復前一個動作的意思, 如果你想要重復洗掉、重復貼上等等動作,按下小數點『.』就好了! (常用) |
第二部分:一般模式切換到編輯模式的可用的按鈕說明
| 進入輸入或取代的編輯模式 | |
|---|---|
| i, I | 進入輸入模式(Insert mode): i 為『從目前游標所在處輸入』, I 為『在目前所在行的第一個非空格符處開始輸入』, (常用) |
| a, A | 進入輸入模式(Insert mode): a 為『從目前游標所在的下一個字符處開始輸入』, A 為『從游標所在行的最后一個字符處開始輸入』,(常用) |
| o, O | 進入輸入模式(Insert mode): 這是英文字母 o 的大小寫,o 為『在目前游標所在的下一行處輸入新的一行』; O 為在目前游標所在處的上一行輸入新的一行!(常用) |
| r, R | 進入取代模式(Replace mode): r 只會取代游標所在的那一個字符一次;R會一直取代游標所在的文字,直到按下 ESC 為止;(常用) |
| 上面這些按鍵中,在 vi 畫面的左下角處會出現『–INSERT–』或『–REPLACE–』的字樣, 由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案里面輸入字符時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔! | |
| [Esc] | 退出編輯模式,回到一般模式中(常用) |
第三部分:一般模式切換到指令行模式的可用的按鈕說明
| 指令行的儲存、離開等指令 | |
|---|---|
| :w | 將編輯的資料寫入硬碟檔案中(常用) |
| :w! | 若檔案屬性為『只讀』時,強制寫入該檔案,不過,到底能不能寫入, 還是跟你對該檔案的檔案權限有關啊! |
| :q | 離開 vi (常用) |
| :q! | 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案, |
| 注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~ | |
| :wq | 儲存后離開,若為 :wq! 則為強制儲存后離開 (常用) |
| ZZ | 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存后離開! |
| :w [filename] | 將編輯的資料儲存成另一個檔案(類似另存新檔) |
| :r [filename] | 在編輯的資料中,讀入另一個檔案的資料,亦即將 『filename』 這個檔案內容加到游標所在行后面 |
| :n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個檔案, |
| :! command | 暫時離開 vi 到指令行模式下執行 command 的顯示結果!例如 『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案資訊! |
| vim 環境的變更 | |
| :set nu | 顯示行號,設定之后,會在每一行的前綴顯示該行的行號 |
| :set nonu | 與 set nu 相反,為取消行號! |
特別注意,在 vi/vim 中,數字是很有意義的!數字通常代表重復做幾次的意思! 也有可能是代表去到第幾個什么什么的意思,
舉例來說,要洗掉 50 行,則是用 『50dd』 對吧! 數字加在動作之前,如我要向下移動 20 行呢?那就是『20j』或者是『20↓』即可,
第五章 Linux常用快捷鍵
1 常用快捷鍵和命令結構圖

如下為基本命令列提示符的樣子,其中root為用戶名,代表超級用戶,oldbodyedu代表主機名,~代表當前目錄,即家目錄,#是超級用戶提示符,如果是普通用戶使用$,

2 基本快捷鍵的使用
(1)Tab,補充命令
- 不用輸入完整的命令,輸入命令前幾個字母后Tab鍵,會自動補全命令提示,
(2)移動游標命令
-
Ctrl+A:移動游標到開頭
-
Ctrl+E:移動游標到結尾
-
Ctrl+F:往游標后面移動一個字符
-
Ctrl+B:往游標前面移動一個字符
(3)剪切字符
-
Ctrl+K:剪切游標處到行尾的字符
-
Ctrl+U:剪切游標處到行首的字符
-
Ctrl+Y:將剪切的字符進行粘貼
(4)復制粘貼
-
Ctrl+Ins:復制
-
Shift+Ins:粘貼
(5)中斷正在運行的命令列
- Ctrl+C
(6)退出當前Xshell
- Ctrl+D
(7)搜索命令列使用過的歷史命令記錄
- Ctrl+R

(8)獲取上一條命令的最后部分,用空格分隔開來的部分
- ESC+.

(9)清屏命令
-
Ctrl+L

(10)暫停命令 -
Ctrl+Z

如上面sleep 40命令執行后一直動不了,游標一直在閃,按Ctrl+Z后就可以重新回到命令列
(11)鎖屏
- Ctrl+S
(12)解除鎖屏
- Ctrl+Q
(13) !+命令 執行上一條命令,!! 執行上兩條命令
3 快捷鍵集合
1、tab //命令或路徑等的補全鍵,linux用的最多的一個快捷鍵 ??
2、ctrl+a //游標迅速回到行首 ??
3、ctrl+e //游標迅速回到行尾 ??
4、ctrl+f //游標向右移動一個字符
5、ctrl+b //游標向左移動一個字符
6、ctrl+insert //復制命令列內容(mac系統不能使用)
7、shift+insert //粘貼命令列內容(mac系統不能使用)
8、ctrl+k //剪切(洗掉)游標處到行尾的所有字符 ??
9、ctrl+u //剪切(洗掉)游標處到行首的所有字符 ??
10、ctrl+w //剪切(洗掉)游標前的一個字符
11、ctrl+y //粘貼 ctrl+k、ctrl+u、ctrl+w洗掉的字符 ??
12、ctrl+c //中斷終端正在執行的任務并開啟一個新的一行 ??
13、ctrl+h //洗掉游標前的一個字符(相當于退格鍵)
14、ctrl+d //退出當前shell命令列,如果是切換過來的用戶,則執行這個命令回退到原用戶 ??
15、ctrl+r //搜索命令列使用過的歷史命令記錄 ??
16、ctrl+g //從ctrl+r的搜索歷史命令模式中退出
17、ctrl+l //清楚螢屏所有的內容,并開啟一個新的一行 ??
18、ctrl+s //鎖定終端,使之任何人無法輸入
19、ctrl+q //解鎖ctrl+s的鎖定狀態
20、ctrl+z //暫停在終端運行的任務,使用"fg"命令可以使暫停恢復 ??
21、!! //執行上一條命令 ??
22、!pw //這是一個例子,是執行以pw開頭的命令,這里的pw可以換成任何已經執行過的字符 ??
23、!pw:p //這是一個例子,是僅列印以pw開頭的命令,但不執行,最后的那個“p”是命令固定字符 ??
24、!num //執行歷史命令串列的第num條命令,num代指任何數字(前提是歷史命令里必須存在)??
25、!$ //代指上一條命令的最后一個引數,該命令常用于shell腳本中 ??
26、esc+. //注意那個".“ 意思是獲取上一條命令的(以空格為分隔符)最后的部分 ??
27、esc+b //移動到當前單詞的開頭
28、esc+f //移動到當前單詞的結尾
附錄
linux的命令是眾多的,想要更多的學習linux的命令需要長時間的積累以及參考一些命令手冊,這里給出一個常用的linux手冊:Linux命令大全(手冊),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336181.html
標籤:其他
上一篇:C語言基礎總結篇(究極避坑)
