Ubuntu Server 第二章 命令行基礎

2021-02-13 滲透雲筆記
第二章 命令行基礎

說明,此筆記來源於苑老師的Ubuntu Server入門到精通

在企業Linux Server 壞境中,經常是沒有圖形環境,只有一個終端窗口(黑乎乎的命令行和閃動的提示符)。Linux的前身是Unix,保留著很多Unix下的使用習慣,所以大多數命令也適用於其他UNIX系統,比如我比較熟悉的思科路由器底層。

先來認識下Shell(殼),Shell本身就是一個程序,這段程序能夠運行其它程序,硬體的驅動硬體(加載驅動)、進程管理、分配硬體資源(內存管理)都是由內核來完成, 出於權限、安全等問題,不允許直接操控內核,如果有學過編程的朋友,發現shell的功能和命令解釋器非常類似。本質上來說,確實是,解釋用戶輸入的命令到內核,我們還可以使用shell命令寫成shell腳本。

shell有很多種,最常用的是bash(Ubuntu 默認 Shell),還有安全行業的 web shell 、SQL shell 等,bash的前身是貝爾實驗室開發UNIX時使用的Bourne shell ,一般終端(shell)打開的提示符格式是"用戶@主機名:~"," "表示用戶家目錄和非root帳號。如果是這樣"~#"表示用戶叫目錄和root帳號。

基本Shell命令

 cat 
 echo a>a & echo b>b 
 cat a b 
 cat a 
 cat 

從上面這個實驗中,可以引出一個概念,輸入和輸出,cat是一段程序,輸入給cat一些內容,得到一些輸出結果。其實計算機本質上就是一個根據用戶的輸入,通過計算、解釋給用戶的一種機器。計算機的程序也是在做類似的事,一個程序調用內存的運行起來後,它要接受一些人為或者其它程序輸入的內容,程序運行起來之後叫做進程,Linux為每一個進程配備了輸入流與輸出流,注意輸入和輸出可以是文件、設備、終端、甚至另一個進程的I/O,Linux為每個進程分配了默認的輸入和輸出稱為stdin/stdout。比如上面使用的cat命令的stdin/stdout就都是終端。除了上面兩個標準流,還有第三個標準流stderr(錯誤輸出),進程出現錯誤時便會使用stderr。兩個快捷鍵:

"Ctrl +D":結束當前輸入

"Ctrl+C":無論當前情況強制結束

ls 
-l 
-a 
-d 
-i 
-S 
-r 
-t 
-h 
drwxr-xr-x  2 xiaowu xiaowu 4.0K Apr 24 20:09  Test 
"d"文件類型是目錄 "rwx"屬主權限可讀可寫可執行 "r-x"屬組權限可讀可執行 "r-x"其它用戶可讀可執行  第二列  文件硬連結或子目錄數  屬主於"xiaowu" 屬助與"xiaowu" 4k大小   "Apr 24 20:09"修改時間  "Test"文件名

這裡解釋下inode編號,文件儲存在硬碟上,硬碟的最小單位叫做」扇區「(Sector),每個扇區儲存512位元組(0.5KB),多個扇區助成的」塊「(常見的是4K),是文件存取的最小單位,作業系統讀取硬碟的時,為了提高效率,一次性連續讀取一個塊,文件數據儲存在」塊「中,文件的元信息(文件創建者、創建日期等)儲存在inode中,每個inode都對應一個號碼,作業系統通過識別不同的inode來識別文件,讀取文件時,是先根據inode找到inode信息,通過inode信息,找到」塊「,讀取數據。

cp 
cp file1 file2 
-R/r 
-L 
-s 
-S 
-u 

可能你學到這裡已經有點頭暈,當你命令只記得開頭字母時,可是使用」TAB「進行自動補全。

mv 
mv file1 file2 
mv file1 file2 /dir 
"-f" 


touch file

rm filename 
-rf 
-i 
-d 
介紹下萬惡之源"rm -rf /"

echo 
\n 
-n 顯示結束不換行
-e 解釋反斜線字符
echo $USER 

目錄結構命令

Linux的目錄結構和windows有很大區別,windows由下至上至盤符(不同分區)結束。Linux下目錄是大於分區。

借用實驗樓它們家的圖,這個圖做的非常簡單明了,也推薦使用他們家的課程學習。

tree / 

FHS(文件系統層次結構標準)是一個標準,不同發行版遵守著這個標準,使類Unix系統使用體驗類似。這裡我們需要引入兩個概念相對路徑和絕對路徑

pwd 
-P 物理路徑 
-L 邏輯路徑 
cd ../ 
cd /home/xiaowu/ 
mkdir filename 

rmdir 

echo * 
ls a* 

grep 
-i 
-v 
-n 
-r 
-c 
grep xiaowu -n /etc/passwd 
grep -f a.txt b.txt 
grep a[123] a.txt 
grep -E '1|2|3' a.txt 

more filename 
less filename 

Z/B 
g/G 
/word 
?word 
n/N 

grep root /etc/passwd | less 

head -n filename 
tail -n filename 

前面介紹了很多命令工具,我們說Linux中只有兩種對象,文件和進程。而進程也只是運行中的文件,那其實只有一種對象,那就是文件。而這就是Linux中「萬物皆文件」。

diff filea fileb 
diff 1.txt 2.txt 
1c1
< aaaaaaa
---
> aaaaaab
"1c1"表示"c-change:內容不同";還有"d-delete 文件一比文件二多";"a-add 文件二文件一多"

下面介紹一個查看文件格式的工具,熟悉Windows的朋友都知道Windows是一文件名後綴來區分文件格式的,一旦更改文件後綴就無法執行原有的功能。Linux使用「file"來識別文件格式,通過識別文件頭部的特殊標識依次匹配測試集,匹配到結果就停止執行並返回結果。測試集依次是:

file filename 
-b 
-i 
stat filename 

Linux下有著大量的文件,找到想要的文件就是一個問題。Linux提供了快速查找的工具

locate filename 
find filename 
sudo find / -type f -user username -mtime +1 -mtime -20 -name 1.txt 

sort filename 
-r 
-n #按數值大小排序
-M #按月份排序
ls -l --sort='size|time|extension' #"ls"命令也可以排序

快捷鍵及VI文本編輯

就和win10一樣,用好快捷鍵能提升你的工作效率,下面介紹一些常用的快捷鍵,這些快捷鍵不僅在命令行下常用,使用SSH終端(例如Xshell)時也經常使用,

Ctrl+P/N/B/F:上下左右

Ctrl+A/E:光標移動至開頭/至結尾

Ctrl+W:刪除光標前一空格分隔段落

Ctrl+U/K :刪除光標到行首/到行尾

Ctrl+Y:黏貼刪除的內容

由於Linux所有對象都是文件,各種服務的配置也基於文件,好用的文本編輯器就非常有必要,常見的vi(vim是它的增強版)、nao、Emacs……,苑老師表示不要有vim和Emac什麼」編輯器之神「透露的優越感,不要執著與工具,工具服務人,按自己使用習慣就好。這裡介紹常用的vim使用方式

vimtutor 
vi filename.txt 





vi的功能按鍵對新手來說有點複雜,你需要的是不斷的使用它,忘記的命令查手冊,隨著你的使用你會逐漸得心應手。











獲取幫助

上面我提到一個操作,查看手冊,你可以記不住命令,但你要知道如何通過文檔找到它,如果整個工作過程都在查手冊就比較尷尬,對幫助手冊有個大概的了解,會讓你更高效率的查找。Linux傳統有完善的文檔體系,Manual是最主要的幫助手冊,使用「man+命令」即可看到對應的命令幫助。

man -k keyword 
man {1~8} command
查看man手冊時,左上角有一個索引編號,每一個索引編號(1~8),代表著一類的手冊,注意,有的命令可能只有部分索引編號,下面說明一下索引編號代表的含義
1:用戶命令 2:系統調用 3:高級Unix編程庫文檔(開發人員常用) 4:設備接口和驅動信息(很少使用)
5:文件描述(系統配置文件) 6:Games 7:文件格式,慣例,編碼(ASCII、UTF8等) 8:系統命令和伺服器

LInux內核的研發者GNU(自有軟體基金會)推出另一種幫助手冊"info"

info command 
很多軟體沒有官方提供的man手冊,開發者往往在軟體包裡留下README文件給使用者一些指導

前面我們演示很多遍的「-h/--help"也是頻繁使用的幫助命令,最後實在找不到幫助,那麼搜尋引擎是一個好的選擇

Shell輸入與輸出

前面在基本Shell命令一章中簡單的介紹下Shell中輸入流、輸出流、輸出錯誤流的概念。大部分進程的默認輸入都是文件或者終端,注意我用了默認這個詞,意思是不是我可以更該呢?答案是可以的,這就是我要介紹的。輸入流、輸出流、錯誤輸出流的文件描述符是0、1、2,文件描述符是LInux內核定義已打開文件所創建的索引,這樣描述你可能依然聽不懂,看下面例子你就明白了。

"|"、">"、">>"、"<" 
ifconfig | grep "inet" 
ls >file 
ls >>file 
ls < 1.txt 
ls osjdijf >stdout 2>stderr 
使用DocKer服務的朋友經常看到這樣的一鍵代碼
"sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://15a26sup.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docke"
這段代碼中使用的EOF是自定義終止符,注意可自定義,結合重定向在腳本中非常好用

使用命令時經常會遇到錯誤,常見的錯誤說明如下

"No such file of directory"(查看不存在的文件目錄)

"File exists"(創建於文件同名的目錄)

"Not a Directory,ls a directory"(把文件當目錄)

「No space left on device"(磁碟空間不足)

"Permission denied"(權限不足,一般加」sudo"解決)

"Operation not permitted"(殺掉不屬於自己的進程)

"Segmentaion fault,Bus error"(程序訪問禁用內存)

前面部分命令中使用了管道符,部分筆記表示的是或的關係,這裡介紹一些在shell命令中常用的有著特殊作用的符號,注意,管道符和管道是不同的概念

」;「:連接符號,可以是命令在同一行內

"&":後臺執行符號

"&&":命令邏輯與

"||":命令邏輯或

…… 還有一些不常用了

進程管理

進程就是運行中的文件,使用"ps" 不加參數執行,結果默認會顯示4列信息,為了區分不同的進程,給進程分配了ID,這就是PID。TIme為進程運行的CPU小號的時間。最後顯示名稱 COMMAND.Linux經常有多個終端同時使用,TTY則註明是哪個終端。進程有不同的狀態,常見的有"R「(Runnable)、"S"(Sleeping)等等。

ps 
-x 
-ax 
-u 
-w 
Linux最初的進程為PID為0,隨後以父進程和母進程的結構關係類似樹形結構,使用"ps fajx"或者"pstree"可查看這個結構
kill pid 
kill -STOP pid 
kill -CONT pid 
kil -l 

歸檔打包和壓縮

在windows下經常使用winrar或者7zip(有Linux版本)等好用的打包工具,在Linux下,也有類似的打包程序

Linux標準的壓縮程序為 gzip file(gunzip解壓),只能對單個文件解壓縮,對多個文常用的是"tar"命令
tar zcvf file.tar.gz  file1  file2 
tar zxvf file.tar.gz 
tar tvf file.tat.gz 
tar jcvf file.bz2 file1 

前面我說遇到權限問題時使用」sudo「,那麼」sudo「的作用是什麼呢,LInux下最高的權限為root,Ubuntu發行版出於安全性的考慮,使用戶創建了普通用戶,需要執行關鍵操作是,使用」sudo"來允許用戶已」root「身份來執行、

cat /etc/group |grep $USER 


sudo vim /etc/sudoers 
sudo adduser username
sudo usermod -aG sudo username 

最後 ,命令純手敲,整個五一假期敲出了這篇筆記,原計劃一天敲出,太高估我自己了,祝各位在學習安全的路上的朋友享受這個過程。

參考連結

Ubuntu Server 從入門到精通

流、管道和重定向

Linux的4個主要部分:內核、Shell、文件結構和實用工具

真正理解linux的inode?

理解inode-阮一峰

linux中的通配符與正則表達式

相關焦點

  • 安裝Ubuntu 18 Server 系統
    所以這次寫一個Ubuntu server 系統的安裝教程。系統鏡像下載地址https://cn.ubuntu.com/download  ---> 下載Ubuntu伺服器版,選擇帶LTS的,LTS是長期支持版的!
  • 怎樣在 ubuntu 和 debian 中通過命令行管理 KVM
    然而,如果你想要在沒有圖形窗口的伺服器環境下使用 KVM ,那麼基於圖形界面的解決方案顯然是行不通的。事實上,你可以單純使用包裝了 kvm 命令行腳本的命令行來管理 KVM 虛擬機。作為替代方案,你可以使用 virsh 這個容易使用的命令行程序來管理客戶虛擬機。
  • Ubuntu Server 第九章 文件服務
    pantu |grep 21 #查看埠是否開啟,默認使用21,可修改sudo systemctl start vsftpd.service #開啟服務sudo service vsftpd status #查看服務運行狀態vsftpd使用系統用戶帳號來作為FTP用戶帳戶的,如果狀態正常(active),可以使用同一網絡下的ftp客戶端訪問,命令行下使用
  • Dockerfile 命令介紹及實例
    當你在使用Docker構建鏡像的時候,每一個命令都會在前一個命令的基礎上形成一個新層。這些基礎鏡像可以用於創建新的容器。本篇文章將手把手教您如何從基礎鏡像,一步一步,一層一層的從Dockerfile構建容器的過程。 Docker簡介Docker項目提供了構建在Linux內核功能之上,協同在一起的的高級工具。
  • 《地圖發布服務中間件》在 Linux 純命令行系統 Ubuntu Server 中的安裝部署
    今天我們再來分享一下在Linux Ubuntu 純命令行系統中發布離線地圖的方法。離線地圖發布準備工作在 Ubuntu Server 系統中發布離線地圖數據,需要先將地圖發布軟體《水經注地圖發布服務中間件》 for Linux 版軟體安裝包和示例地圖數據複製到本地系統中。系統啟動後,會首先顯示登錄提示,如下圖所示。
  • Ubuntu 16.04搭建LAMP開發環境
    右鍵,選擇open-terminal進入終端命令行(如果出現了讓你輸入密碼的情況,就請輸你之前設置的那個,按下回車,密碼都是不顯示在屏幕上的哈,然後如果出現了E:Invalid operation updata,沒關係,重新輸入sudo apt-get updata回車就好了,出現了下面那一堆就好了) 安裝常用軟體1.SSHsudo apt-get install openssh-server
  • Docker基礎篇(常用命令)-雲原生核心
    工欲善其事必先利其器,本文我們首先來給大家介紹下docker中的常用命令,只用對這些常用命令非常熟悉我們才能更好的來使用docker。1.幫助命令  首先我們來看看docker中的幫助命令命令說明docker version查看docker的版本信息docker info查看docker詳細的信息docker --helpdocker的幫助命令,可以查看到相關的其他命令docker version在這裡插入圖片描述docker info
  • 幾個命令,為你的GPU迅速降溫
    https://zhuanlan.zhihu.com/p/27682206這篇文章寫的是在ubuntu X server環境下,通過修改nvidia-settings來修改GPU風扇速度,因為默認的nvidia-settings設置是,即使GPU在計算的時候溫度已經達到85度,風扇速度最高不會超過70%,這樣就無法很好地為GPU進行散熱,因此需要手動修改GPU風扇速度。
  • 四十一、Linux基礎命令,用戶管理和文件系統總結
    「@Author:Runsen」基礎命令Linux系統的命令通常都是如下所示的格式:命令名稱 [命名參數] [命令對象]獲取登錄信息將標準輸入轉成命令行參數將標準輸入轉成命令行參數 - 「xargs」。下面的命令會將查找當前路徑下的html文件,然後通過xargs將這些文件作為參數傳給rm命令,實現查找並刪除文件的操作。
  • 內置frida-gadget so文件和frida-server可執行文件到系統(Android10)
    Android.mk中預編譯腳本可以參考上一章中的說明。  PRODUCT_COPY_FILES:  在Android源碼中可以使用使用PRODUCT_COPY_FILES 預拷貝文件和目錄。如下所示:qiang@ubuntu:~/lineageOs$ mkdir -p frameworks/base/cmds/mycmdsqiang@ubuntu:~/lineageOs$ cd frameworks/base/cmds/mycmds/qiang@ubuntu:~/lineageOs/frameworks/base/cmds/mycmds
  • 如何巧妙的用Xshell連接Ubuntu server服務主機
    ——餘華《活著》我們在安裝Ubuntu server的時候默認是不安裝openssh服務的,導致今天小編在使用Xshell連接時顯示連接失敗。之前小編介紹了如何在PVE下安裝Ubuntu server系統,那麼這裡將繼續探索如何巧妙的用Xshell連接自己的Ubuntu server主機。
  • Ubuntu常用命令大全
    1.eth0iface eth0 inet dhcp用下面的命令使網絡設置生效:#sudo /etc/init.d/networking restart當然,也可以在命令行下直接輸入下面的命令來獲取地址#sudo dhclient eth02.
  • 如何在Ubuntu 18.04和Ubuntu 18.10,16.04上安裝Systemback
    在Ubuntu 18.04和Ubuntu 18.10上安裝SystembackUbuntu 16.04和14.04用戶可以通過在終端中運行以下命令從PPA安裝Systemback。如果您在Ubuntu 18.04上運行上述命令,您將看到以下錯誤,E: The repository 'http://ppa.launchpad.net/nemh/systemback/ubuntu bionic Release' does not have a Release file.
  • 完全指南之在 Ubuntu 作業系統中安裝及卸載軟體
    實際上這種命令行方式跟第 1 節中我們看到的安裝方式一樣。只是你沒有使用 Ubuntu 軟體中心來安裝或卸載軟體,而是使用的是命令行接口。別的沒什麼不同。使用 apt-get 命令來安裝軟體超級簡單。3.2 在 Ubuntu 系統下使用 apt 命令來卸載軟體(推薦方式)在命令行下,你可以很輕易的卸載 Ubuntu 軟體中心安裝的軟體,以及使用 apt 命令或是使用 .deb 安裝包安裝的各種軟體。你只需要使用下面的命令,替換 package-name 為你想要刪除的軟體名。
  • 如何在 Ubuntu 18.04 伺服器上安裝和配置 KVM | Linux 中國
    我們可以通過 virt-manager的圖形用戶界面或使用 virt-install 和 virsh 命令在命令行界面來創建和管理基於 KVM 的虛擬機。在本文中,我們將討論如何在 Ubuntu 18.04 LTS 伺服器上安裝和配置 KVM 管理程序。我假設你已經在你的伺服器上安裝了 Ubuntu 18.04 LTS 。接下來登錄到您的伺服器執行以下步驟。
  • Ubuntu系統安裝(虛擬機版)
    名稱不做要求,大家可隨意取,自己記得就行。6.相關命令完善Ubuntu基礎系統在桌面以快捷鍵ctrl+alt+t 打開命令行終端繼續在命令行輸入 su  回車後輸入root密碼 回車 進入root模式(管理者模式)
  • 對 Linux 新手非常有用的 20 個命令!
    3.上面例子中第一個ravisaive 代表了文件文件屬於用戶ravisaive4.上面例子中的第二個ravisaive代表了文件文件屬於用戶組ravisaive5.4096 代表了文件大小為4096位元組.6.May 8 01:06 代表了文件最後一次修改的日期和時間.
  • Linux scp命令
    [[user@]host2:]file2簡易寫法:scp [可選參數] file_source file_target 參數說明:-1: 強制scp命令使用協議ssh1-2: 強制scp命令使用協議ssh2-4: 強制scp命令只使用IPv4尋址-6: 強制scp命令只使用IPv6尋址-B: 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)-C: 允許壓縮。
  • Ubuntu系統的安裝與使用
    顯示桌面:系統設置---外觀---行為:勾選 add show desktop icon to the launcher系統設置---外觀---行為:勾選 Enable Workspaces2. apt源設置:system settings --- software & updates --- ubuntu software --- download