Linux指令和shell腳本

来源:https://www.cnblogs.com/zissh/archive/2020/06/11/13091655.html
-Advertisement-
Play Games

對Linux的shell腳本基本概念進行簡單的講解,列舉了一些常見的linux指令 ...


關於Shell

在電腦科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作界面”的軟體(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程式。

shell分類:

一:圖形界面shell(Graphical User Interface shell 即 GUI shell)

例如:應用最為廣泛的 Windows Explorer (微軟的windows系列操作系統),還有也包括廣為人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 XFCE。

二:命令行式shell(Command Line Interface shell ,即CLI shell)

例如:

在Unix/linux中主要有:

Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
TENEX/TOPS C shell ( tcsh)

MS-DOS系統:

cmd.exe/ 命令提示字元(Windows NT 系統)
Windows PowerShell(支持 .NET Framework 技術的 Windows NT 系統)

傳統意義上的shell指的是命令行式的shell,以後如果不特別註明,shell是指命令行式的shell。

互動式與非互動式shell

shell提供了你與操作系統之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,並且可以立即得到響應),或者以shell script(非交互)方式執行。shell script是放在文件中的一串shell和操作系統命令,它們可以被重覆使用。本質上,shell script是命令行命令簡單的組合到一個文件裡面。

互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退後,shell也終止了。

shell也可以運行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾,shell也就終止了。

常用指令:

文件管理

cat 命令:

用於連接文件並列印到標準輸出設備上

cat [-AbeEnstTuv] [--help] [--version] fileName

ex:把 textfile1 和 textfile2 的文檔內容加上行號(空白行不加)之後將內容附加到 textfile3 文檔里:

cat -b textfile1 textfile2 >> textfile3

類似的命令:echo僅用於輸出命令後面的字元串到標準輸出設備上。

diff命令:

用於比較文件的差異,以逐行的方式,比較文本文件的異同處。如果指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄。

diff [-abBcdefHilnNpPqrstTuvwy][-<行數>][-C <行數>][-D <巨集名稱>][-I <字元或字元串>][-S <文件>][-W <寬度>][-x <文件或目錄>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目錄1][文件或目錄2]

mv 命令:

用來為文件或目錄改名、或將文件或目錄移入其它位置。

mv [options] source dest
mv [options] source... directory

參數說明

  • -i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
  • -f: 在 mv 操作要覆蓋某已有的目標文件時不給任何指示;

rm命令:

用於刪除一個文件或者目錄。

rm [options] name...

參數

  • -r 將目錄及以下之檔案亦逐一刪除。

直接刪除當前目錄下的所有文件及目錄,命令行為:

rm -rf * 

cp命令:

主要用於複製文件或目錄。

cp [options] source dest

cp [options] source... directory

磁碟管理

cd命令:

用於切換當前工作目錄至 dirName(目錄參數)。

其中 dirName 表示法可為絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的 home 目錄 (也就是剛 login 時所在的目錄)。

另外,"~" 也表示為 home 目錄 的意思,"." 則是表示目前所在的目錄,".." 則表示目前目錄位置的上一層目錄。

cd [dirName]
  • dirName:要切換的目標目錄。

du命令:

用於顯示目錄或文件的大小。

du會顯示指定的目錄或文件所占用的磁碟空間。

ex:以以K,M,G為單位,顯示test文件的大小(--human-readable)

du -h test

mkdir命令:

用於建立名稱為 dirName 之子目錄。

mkdir [-p] dirName

參數說明

  • -p 確保目錄名稱存在,不存在的就建一個。

rmdir命令:

刪除空的目錄。

rmdir [-p] dirName

參數

  • -p 是當子目錄被刪除後使它也成為空目錄的話,則順便一併刪除。

tree命令:

用於以樹狀圖列出目錄的內容。

執行tree指令,它會列出指定目錄下的所有文件,包括子目錄里的文件。

tree [-aACdDfFgilnNpqstux][-I <範本樣式>][-P <範本樣式>][目錄...]

ls命令:

用於顯示指定工作目錄下之內容(列出目前工作目錄所含之文件及子目錄)。

 ls [-alrtAFR] [name...]

系統管理

shutdown命令:

可以用來進行關機程式,並且在關機以前傳送訊息給所有使用者正在執行的程式,shutdown 也可以用來重開機。

使用許可權:系統管理者。

shutdown [-t seconds] [-rkhncfF] time [message]

參數說明

  • -t seconds : 設定在幾秒鐘之後進行關機程式。
  • -k : 並不會真的關機,只是將警告訊息傳送給所有使用者。
  • -r : 關機後重新開機。
  • -h : 關機後停機。
  • -n : 不採用正常程式來關機,用強迫的方式殺掉所有執行中的程式後自行關機。
  • -c : 取消目前已經進行中的關機動作。
  • -f : 關機時,不做 fcsk 動作(檢查 Linux 檔系統)。
  • -F : 關機時,強迫進行 fsck 動作。
  • time : 設定關機的時間。
  • message : 傳送給所有使用者的警告訊息。

su命令:

用於變更為其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。

使用許可權:所有使用者。

su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

參數說明

  • -f 或 --fast 不必讀啟動檔(如 csh.cshrc 等),僅用於 csh 或 tcsh
  • -m -p 或 --preserve-environment 執行 su 時不改變環境變數
  • -c command 或 --command=command 變更為帳號為 USER 的使用者並執行指令(command)後再變回原來使用者
  • -s shell 或 --shell=shell 指定要執行的 shell (bash csh tcsh 等),預設值為 /etc/passwd 內的該使用者(USER) shell
  • --help 顯示說明文件
  • --version 顯示版本資訊
  • - -l 或 --login 這個參數加了之後,就好像是重新 login 為該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)為主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root
  • USER 欲變更的使用者帳號
  • ARG 傳入新的 shell 參數

變更帳號為 clsung 並改變工作目錄至 clsung 的家目錄(home dir)(不加 - 則不改變環境)

su - clsung

sudo命令:

以系統管理者的身份執行指令,也就是說,經由 sudo 所執行的指令就好像是 root 親自執行。

使用許可權:在 /etc/sudoers 中有出現的使用者。

ps命令:

用於顯示當前進程 (process) 的狀態。

ps [options] [--help]

ex:顯示當前全部進程

ps -A 顯示進程信息

kill命令:

用於刪除執行中的程式或工作。

kill可將指定的信息送至程式。預設的信息為SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用SIGKILL(9)信息嘗試強制刪除程式。程式或工作的編號可利用ps指令或jobs指令查看。

kill [-s <信息名稱或編號>][程式] 或 kill [-l <信息編號>]

系統設置

passwd命令:

用來更改使用者的密碼

passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]

必要參數

  • -d 刪除密碼
  • -S 顯示密碼信息

修改用戶信息

$ passwd runoob  //設置runoob用戶的密碼
Enter new UNIX password:  //輸入新密碼,輸入的密碼無回顯
Retype new UNIX password:  //確認密碼
passwd: password updated successfully
# 

export 命令:

用於設置或顯示環境變數。

在 shell 中執行程式時,shell 會提供一組環境變數。export 可新增,修改或刪除環境變數,供後續執行的程式使用。export 的效力僅限於該次登陸操作

export [-fnp][變數名稱]=[變數設置值]

參數說明

  • -f  代表[變數名稱]中為函數名稱。
  • -n  刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
  • -p  列出所有的shell賦予程式的環境變數。

set 用來顯示本地變數
env 用來顯示環境變數
export 用來顯示和設置環境變數

備份壓縮

gzip命令:

用於壓縮文件。

gzip是個使用廣泛的壓縮程式,文件經它壓縮過後,其名稱後面會多出".gz"的擴展名。

gzip [-acdfhlLnNqrtvV][-S &lt;壓縮字尾字元串&gt;][-&lt;壓縮效率&gt;][--best/fast][文件...] 
gzip [-acdfhlLnNqrtvV][-S <壓縮字尾字元串>][-&lt;壓縮效率&gt;][--best/fast][目錄]

參數

  • -q 不顯示指令執行過程。
  • -r 遞歸處理,將指定目錄下的所有文件和子目錄一併處理。
  • -v 顯示指令執行過程或顯示版本信息。
  • -d或--decompress或----uncompress  解開壓縮文件。

tar命令:

用於備份文件。

tar是用來建立,還原備份文件的工具程式,它可以加入,解開備份文件內的文件。

tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <區塊數目>][-C <目的目錄>][-f <備份文件>][-F <Script文件>][-K <文件>][-L <媒體容量>][-N <日期時間>][-T <範本文件>][-V <捲冊名稱>][-X <範本文件>][-<設備編號><存儲密度>][--after-date=<日期時間>][--atime-preserve][--backuup=<備份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<範本樣式>][--force-local][--group=<群組名稱>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用戶名稱>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<區塊數目>][--recursive-unlink][--remove-files][--rsh-command=<執行指令>][--same-owner][--suffix=<備份字尾字元串>][--totals][--use-compress-program=<執行指令>][--version][--volno-file=<編號文件>][文件或目錄...]

參數

  • -x或--extract或--get 從備份文件中還原文件。
  • -c或--create 建立新的備份文件。
  • -t或--list 列出備份文件的內容。
  • -z或--gzip或--ungzip 通過gzip指令處理備份文件。
  • -v或--verbose 顯示指令執行過程。
  • -f<備份文件>或--file=<備份文件> 指定備份文件。

ex:

壓縮文件 非打包

$ touch a.c       
tar -czvf test.tar.gz a.c   //壓縮 a.c文件為test.tar.gz
a.c

列出壓縮文件內容

$ tar -tzvf test.tar.gz 
-rw-r--r-- root/root     0 2010-05-24 16:51:59 a.c

解壓文件

$ tar -xzvf test.tar.gz 
a.c

zip 命令:

用於壓縮文件。

zip 是個使用廣泛的壓縮程式,壓縮後的文件尾碼名為 .zip

zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字元串>][-t <日期時間>][-<壓縮效率>][壓縮文件][文件...][-i <範本樣式>][-x <範本樣式>]

unzip命令:

用於解壓縮zip文件

unzip為.zip壓縮文件的解壓縮程式。

unzip [-cflptuvz][-agCjLMnoqsVX][-P <密碼>][.zip文件][文件][-d <目錄>][-x <文件>] 或 unzip [-Z]

總結

本文僅簡單解釋shell和記錄部分常見的互動式命令,詳細信息請參考如下引文:

[1] 菜鳥教程-Linux命令

[2] 菜鳥教程-Shell

[3] 百度百科-Shell


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 手頭一臺Linux伺服器(Red Hat Enterprise Linux Server release 6.6),寫了一個shell腳本,在上面測試運行時,發現Kerberized ftp client命令不存在。註意這裡所說的是ftp命令,不是ftp工作站。 [root@KerryDB ~]# ... ...
  • 案例1: crond服務異常或停止了。或是安裝服務後,忘記啟動服務。 操作系統 Red Hat Enterprise Linux Server release 6.6 # yum list cronie# yum install cronie 安裝後,沒有啟動服務,然後作業就沒有執行。 # serv... ...
  • 2017年的時候我發表過一篇樹莓派 編譯安裝Python3.5 + PyQT5.8 + Eric6 的文章 鏈接在此,由於當時搞完了再寫的,回憶過程中有些遺漏,導致留言里抱怨問題太多……這次特地邊搞邊寫…… 之前上一篇已經交代了系統已經編譯安裝了Python 3.8.3 和Vscode ,VSCod ...
  • (持續修改更新) 從2015年的二代開始,到三代,到現在四代……一路走過來,5年裡知識內容更新了不少,整理了不少 一直沒有發佈出來,最新官方測試版本發佈,發現很多以前不一樣的地方,測試版很多東西也沒有,就要自己搞一搞了……本文基於樹莓派4 8GB版本,官方Buster系統 64bit(beta 20 ...
  • 結論: HHKB升級後就不連鍵了。HHKB Pro Hybrid Type-S無刻,升級前的固件是A0.41版本,使用了一個多月,總是會感覺太敏感,本來按一個鍵,時常會出現按兩個鍵情況,連鍵啊!快速按鍵時不會連鍵,而按鍵慢時經常就會出現連鍵。想想,可能是判斷按鍵電容變換的閾值問題,開和關是同一個閾... ...
  • 為了提高平時辦公效率,今天介紹一款Linux下常用終端連接工具Secure CRT的快捷鍵,平時常用命令有如下: Tab 命令補全命令,如果按tab出不來,那就是沒有這樣的路徑,或者是許可權不對。 Ctrl+c 終止當前任務命令或者程式。 Ctrl+d 退出當前用戶環境,相當於exit,logout. ...
  • 一,序言 1,實際操作部署,只針對伺服器uefi模式下引導 2,解析每一步的操作與擴展 參考文檔:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/chap ...
  • 在很長一段時間里,我對於在樹莓派上搭建Kubernetes集群極為感興趣。在網路上找到一些教程並且跟著實操,我已經能夠將Kubernetes安裝在樹莓派上,併在三個Pi集群中工作。然而,在master節點上對於RAM和CPU的要求已經超過了我的樹莓派所能提供的,因此在執行Kubernetes任務時性 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...