前端學習 linux —— 第一篇
前端學習 linux - 第一篇
本文主要介紹“linux 發行版本”、“cpu 架構”、“Linux 目錄結構”、“vi 和 vim”、“使用者管理”、“檔案目錄指令”、“docker 安裝 ubuntu20.04”。
注 :筆者使用的是 ubuntu 20.04 桌面版。
linux 發行版本
linux 主要發行版有 ubuntu、redhat、centos等等,都是 linux 核心 ,其他的可能就不同了。不同發行版的很多指令都類似,比如你學會了 ubuntu,在 centos 上也能快速上手。
unix 和 linux 關係
首先有 unix,但它的價格昂貴,不能運行於 x86 的 PC。
有個荷蘭的教授寫了一個叫 MINIX 的作業系統,向學生展示作業系統的內部原理,並將其程式碼開源。全世界學計算機的學生都通過鑽研 MINIX 來作業系統,其中有一位芬蘭大學學生,於 1991 年寫出了 Linux 0.01。
Tip :更多介紹請看百度百科
cpu 架構
cpu 架構有 aarch64
、 loongarch64
、 mips64
、 x86_64
(也是 AMD64
)
不同的架構可以簡單理解為指令集不同。
Linux 目錄結構
windows 分 C盤、D盤,而 linux 已經幫我們分好了,例如我們在 /
目錄下檢視檔案資訊:
[email protected]:/$ ls bin boot cdrom data dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys tmp usr var
每個目錄的作用請看下文。
bin
/bin
,存放最經常使用的命令。例如裡面有 whoami
、 su
、 sudo
等命令
[email protected]:/$ ll /bin lrwxrwxrwx 1 root root 7 12月 7 2021 /bin -> usr/bin/ [email protected]:/$ ll usr/bin/ |grep 'whoami' -rwxr-xr-x 1 root root 39256 9月 5 2019 whoami*
家目錄
/home
,存放普通使用者的主目錄。例如我增加一個使用者 pjl,home目錄下也會增加一個 pjl 的目錄。請看示例:
[email protected]:/$ sudo adduser pjl [sudo] pjl 的密碼: 正在新增使用者"pjl"... 正在新增新組"pjl" (1004)... 正在新增新使用者"pjl" (1004) 到組"pjl"... 建立主目錄"/home/pjl"... 正在從"/etc/skel"複製檔案... 新的 密碼: 重新輸入新的 密碼: passwd:已成功更新密碼 正在改變 pjl 的使用者資訊 請輸入新值,或直接敲回車鍵以使用預設值 全名 []: 房間號碼 []: 工作電話 []: 家庭電話 []: 其它 []: 這些資訊是否正確? [Y/n] [email protected]:/$
home 目錄下增加使用者 pjl 同名的家目錄:
[email protected]:/$ ll /home 總用量 32 drwxr-xr-x 8 root root 4096 6月 8 20:22 ./ drwxr-xr-x 23 root root 4096 6月 8 10:48 ../ drwxr-xr-x 2 pjl pjl 4096 6月 8 20:22 pjl/
root
/root
,超級許可權者的使用者主目錄。普通使用者不能檢視:
[email protected]:/$ ll /root ls: 無法開啟目錄 '/root': 許可權不夠
切換 root 使用者後檢視:
[email protected]:/$ su 密碼: su: 認證失敗 [email protected]:/$ su 密碼: [email protected]:/# ll /root 總用量 2012 drwx------ 28 root root 4096 6月 8 11:18 ./ drwxr-xr-x 23 root root 4096 6月 8 10:48 ../ drwxr-xr-x 2 root root 4096 6月 6 10:52 公共的/ drwxr-xr-x 2 root root 4096 6月 6 10:52 模板/ drwxr-xr-x 2 root root 4096 6月 6 10:52 影片/ drwxr-xr-x 2 root root 4096 6月 6 10:52 圖片/ drwxr-xr-x 2 root root 4096 6月 6 10:52 文件/ drwxr-xr-x 2 root root 4096 6月 6 10:52 下載/ drwxr-xr-x 2 root root 4096 6月 6 10:52 音樂/ drwxr-xr-x 2 root root 4096 6月 6 10:52 桌面/ ...
lib
/lib
,系統開機所需要的最基本的動態連結共享庫,類似 windows 中 DLL
檔案。幾乎所有應用程式都需要用到這些共享庫
lost+found
/lost+found
,通常為空,系統非法關機後,就存放一些檔案
[email protected]:~$ ls /lost+found/ ls: 無法開啟目錄 '/lost+found/': 許可權不夠 [email protected]:~$ sudo ls /lost+found/ [sudo] pjl 的密碼:
etc
/etc
,系統管理所需的配置檔案和子目錄。例如 nginx、mysql、python、docker:
[email protected]:~$ ls /etc |grep -E 'mysql|nginx|docker|python' docker mysql nginx python2.7 python3 python3.8
nginx 的配置檔案:
[email protected]:~$ ls /etc/nginx | grep '.conf' fastcgi.conf nginx.conf
usr
/usr
,使用者很多的應用程式和檔案都在此,類似 windows 下的 Program Files
:
[email protected]:~$ ls /usr bin games include lib lib32 lib64 libexec libx32 local sbin share src
boot
/boot
,存放啟動 linux 時使用的一些核心檔案。包括一些連結檔案和映象檔案:
[email protected]:~$ ls /boot config-5.13.0-41-generic efi initrd.img-5.13.0-41-generic initrd.img.old memtest86+_multiboot.bin System.map-5.13.0-48-generic vmlinuz-5.13.0-44-generic config-5.13.0-44-generic grub initrd.img-5.13.0-44-generic memtest86+.bin System.map-5.13.0-41-generic vmlinuz vmlinuz-5.13.0-48-generic config-5.13.0-48-generic initrd.img initrd.img-5.13.0-48-generic memtest86+.elf System.map-5.13.0-44-generic vmlinuz-5.13.0-41-generic vmlinuz.old
proc
/proc
,虛擬目錄,它是系統記憶體的對映,訪問這個目錄獲取系統資訊
[email protected]:/# ls /proc 1 cmdline dma ioports kpagecgroup modules schedstat thread-self zoneinfo 10 config.gz driver irq kpagecount mounts self timer_list 160 consoles execdomains kallsyms kpageflags mtrr softirqs tty acpi cpuinfo filesystems kcore loadavg net stat uptime buddyinfo crypto fs key-users locks pagetypeinfo swaps version bus devices interrupts keys meminfo partitions sys vmallocinfo cgroups diskstats iomem kmsg misc sched_debug sysvipc vmstat
srv
/srv
,service縮寫,存放一些服務啟動之後需要提取的資料
[email protected]:~$ ls /srv ftp
sys
/sys
,這是 linux 2.6 核心的一個很大的變化
[email protected]:~$ ls /sys block bus class dev devices firmware fs hypervisor kernel module power
tmp
/tmp
,存放一些臨時檔案
dev
/dev
,類似 windows 的裝置管理器,把所有硬體用檔案儲存。比如筆者 cpu 有 4 核
[email protected]:~$ ls /dev/cpu 0 1 2 3 microcode
media
/media
,linux 會自動識別一些裝置,例如 U 盤,識別後將會把該裝置掛載到這個目錄下。
mnt
/mnt
,用於讓使用者臨時掛載別的檔案系統
opt
/opt
,給主機額外安裝軟體的目錄。例如安裝資料庫,預設為空。筆者安裝了百度網盤
[email protected]:~$ ls /opt baidunetdisk google sogoupinyin teamviewer
usr/local
/usr/local
,另一個給主機額外安裝軟體的目錄。一般通過編譯原始碼方式安裝的程式
[email protected]:~$ ls /usr/local bin etc games include lib man rvm sbin share src
var
/var
,存放不斷擴充的東西,習慣將經常修改的目錄放在這裡,例如日誌檔案
[email protected]:~$ ls /var backups cache crash lib local lock log mail metrics opt run snap spool tmp www
vi 和 vim
linux 會內建 vi 文字編輯器。vim 是增強版。
編輯器模式
編輯器有三種模式:
- 正常模式
- 插入模式
- 命令列模式
Tip
:通過 vim 預設進去的就是正常模式,退出( :q!
)或儲存退出( :wq
)屬於命令模式,通過輸入 i
進入編輯模式。
模式切換:
-
正常模式 輸入
i
進入編輯模式 -
編輯模式 輸入
esc
進入正常模式 -
正常模式 輸入
:
或/
進入命令模式 -
命令模式 輸入
esc
進入正常模式
Tip :退出有以下三種:
-
:wq
儲存退出 -
:q
退出。有時退出失敗,提示我們使用強制退出:E37: 已修改但尚未儲存 (可用 ! 強制執行)
-
:q!
強制退出,不儲存
快捷鍵
拷貝貼上
複製一行 yy
,複製 5 行 5yy
,貼上輸入 p
。需要在正常模式下進行。
在正常模式,游標在第一行,輸入 yy,接著輸入 p:
a b c d e
檔案內容變為:
a a b c d e
刪除
刪除當前行 dd
,刪除當前行向下3行,輸入 3dd
即可。需在正常模式下進行。
檔案中查詢單詞
正常模式輸入 /
進入命令模式,輸入要找的單詞,例如 test,然後輸入回車,接著輸入 n
就能匹配下一個,到底了會提示“已查詢到檔案結尾,再從開頭繼續查詢”,繼續輸入 n
就會從頭開始。
如果需要找其他單詞,輸入 /
,在輸入其他單詞例如 apple,如果要編輯找到的這個 apple,輸入 i
進入編輯模式即可。
行號
命令列下輸入 :set nu
,顯示行號。如下所示:
... 7 # the default umask is set in /etc/profile; for setting the umask 8 # for ssh logins, install and configure the libpam-umask package. 9 #umask 022
Tip
:輸入 :set nonu
隱藏行號
檔案首行或末行
正常模式下, gg
首行, G
末行。
撤回
比如輸入在某行輸入 aa bb cc
,想撤回,回到正常模式,輸入 u
即可。對刪除的某行(dd)等操作同樣適用
切換到某行
一般模式下輸入行號,例如 99,然後輸入 shift+g
即可
使用者管理
linux 是多使用者,多工的作業系統。
建立使用者
通過 adduser
建立使用者。請看示例:
[email protected]:/# adduser test11 正在新增使用者"test11"... 正在新增新組"test11" (1007)... 正在新增新使用者"test11" (1007) 到組"test11"... 建立主目錄"/home/test11"... 正在從"/etc/skel"複製檔案... 新的 密碼: 重新輸入新的 密碼: passwd:已成功更新密碼 正在改變 test11 的使用者資訊 請輸入新值,或直接敲回車鍵以使用預設值 全名 []: 房間號碼 []: 工作電話 []: 家庭電話 []: 其它 []: 這些資訊是否正確? [Y/n]
家目錄下已增加新增使用者 test11:
[email protected]:/# ll /home 總用量 40 drwxr-xr-x 10 root root 4096 6月 14 16:40 ./ drwxr-xr-x 23 root root 4096 6月 8 10:48 ../ drwxr-xr-x 2 test11 test11 4096 6月 14 16:40 test11/
更改使用者密碼
通過 passwd 可以修改使用者密碼。請看示例:
[email protected]:/$ passwd test11 更改 test11 的密碼。 Current password: 新的 密碼: 重新輸入新的 密碼: passwd:已成功更新密碼
Tip :遠端工具通過 test11 登入成功後,預設會進入該使用者的家目錄:
[email protected]:~$ pwd /home/test11 [email protected]:~$
切換使用者
通過 su -
切換使用者。例如切換到 root 使用者:
[email protected]:~$ su - root 密碼: [email protected]:~# su - test10 [email protected]:~$ su - test11 密碼: su: 認證失敗 [email protected]:~$ su - test11 密碼:
Tip :許可權高的使用者切換到許可權低的無需輸入密碼。反之卻需要輸入密碼。
刪除使用者
通過 userdel
可以刪除使用者。比如刪除使用者 test200,但保留家目錄:
[email protected]:/home# userdel test200 [email protected]:/home# ls test200
通過 -r
刪除使用者,同時刪除其家目錄:
[email protected]:/home# ls test201 vncuser [email protected]:/home# userdel -r test201 userdel:test201 信件池 (/var/mail/test201) 未找到
test201 使用者的家目錄已刪除:
[email protected]:/home# ls vncuser
Tip :比如張三離職,一般情況保留其家目錄,萬一留有重要成果。更多介紹請通過 -h 檢視:
[email protected]:/home# userdel -h 用法:userdel [選項] 登入名 選項: -f, --force 即使不屬於此使用者,也強制刪除檔案 -h, --help 顯示此幫助資訊並退出 -r, --remove 刪除主目錄和信件池 -R, --root CHROOT_DIR chroot 到的目錄 -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files --extrausers Use the extra users database -Z, --selinux-user 為使用者刪除所有的 SELinux 使用者對映
查詢使用者資訊
通過 id 可查詢使用者資訊。請看示例:
[email protected]:/home# id root 使用者id=0(root) 組id=0(root) 組=0(root) [email protected]:/home# id test10 使用者id=1006(test10) 組id=1006(test10) 組=1006(test10)
[email protected]:/home# id test111 id: “test111”:無此使用者
whoami
,查詢當前使用者:
[email protected]:/home# whoami root
Tip
:通過 who am i
可以檢視什麼時間(2022-06-14 16:46),從哪臺機器(192.168.1.225),什麼使用者(test11)登入這個 linux 終端。
[email protected]:/home# who am i test11 pts/6 2022-06-14 16:46 (192.168.1.225)
使用者組
使用者組類似角色,方便管理。
增加組、刪除組
增加組使用 groupadd
,刪除組使用 groupde
。請看示例:
# 增加組 agroup [email protected]:/home# groupadd agroup
# 刪除組 agroup [email protected]:/home# groupdel agroup
建立使用者並指定所屬組
建立使用者 test30 並放入 agroup 組中:
[email protected]:/home# useradd -g agroup test30
test30 確實已經屬於 agroup 組:
[email protected]:/home# id test30 使用者id=1010(test30) 組id=1010(agroup) 組=1010(agroup)
注 :如果建立使用者時不指定組,系統會建立一個與使用者同名的組:
[email protected]:/home# adduser test40
[email protected]:/home# id test40 使用者id=1011(test40) 組id=1011(test40) 組=1011(test40)
切換使用者所屬組
usermod
切換使用者所屬組。例如將 test40 放入 bgroup 組:
[email protected]:/home# groupadd bgroup [email protected]:/home# usermod -g bgroup test40 [email protected]:/home# id test40 使用者id=1011(test40) 組id=1012(bgroup) 組=1012(bgroup)
使用者和組相關檔案
使用者和組相關的有三個檔案:
- 使用者的配置檔案
- 使用者的口令配置檔案
- 組的配置檔案
/etc/passwd
使用者的配置檔案,記錄使用者的各種資訊。請看示例:
[email protected]:~$ cat /etc/passwd // 使用者名稱:口令:使用者id:組id:註釋性描述:家目錄:使用的shell test40:x:1011:1012:,,,:/home/test40:/bin/bash ...
/etc/shadow
口令配置檔案:
[email protected]:/home/test11# cat /etc/shadow // ! 這裡是密碼 // 19157 等資訊都是處理過,看不懂的 test40:!:19157:0:99999:7:::
比如給 test40 設定密碼(比如 123456
)
[email protected]:/home/test11# passwd test40 新的 密碼: 重新輸入新的 密碼: passwd:已成功更新密碼
再次檢視 /etc/shadow
,發現密碼加密顯示了:
test40:$6$JF.ed3d.S9RHucx.$13bXH9Ji3P8AGB2tsCnjRI8AFhp301F3HWzquzKCBTQWzS3..D6lvgKTsOLWuY1nwogtBcGdiZp5mGN69Ar7E.:19158:0:99999:7:::
/etc/group
組的配置檔案:
[email protected]:/home/test11# cat /etc/group bgroup:x:1012:
上面我們將 test40 使用者放入 bgroup。這裡的 1012 與使用者配置檔案中的組 id 相對應。
幫助指令
man
比如通過 man
檢視 ls
命名。請看示例:
[email protected]:/home/test11# man ls NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . ... -l use a long listing format
點選 空格
能翻頁,輸入 q
就能退出:
Tip :筆者使用mobaxterm 能通過滑鼠向上向下滾動。
[email protected]:/home/test11#
ls 較常用的兩個引數, a
顯示所有檔案檔案。linux 中,隱藏檔案以 .
開頭:
[email protected]:/home/test11# ls [email protected]:/home/test11# ls -a . .. .bash_history .bash_logout .bashrc .cache .config .local .profile .Xauthority
l
是以列表的形式顯示資訊。引數可以組合使用,不要求順序:
[email protected]:/home/test11# ls -l 總用量 0 [email protected]:/home/test11# ls -la 總用量 40 drwxr-xr-x 5 test11 test11 4096 6月 15 18:55 . drwxr-xr-x 12 root root 4096 6月 14 17:21 .. -rw------- 1 test11 test11 86 6月 14 17:27 .bash_history -rw-r--r-- 1 test11 test11 220 6月 14 16:40 .bash_logout -rw-r--r-- 1 test11 test11 3771 6月 14 16:40 .bashrc drwx------ 4 test11 test11 4096 6月 14 16:46 .cache drwx------ 4 test11 test11 4096 6月 14 16:46 .config drwxr-xr-x 3 test11 test11 4096 6月 14 16:46 .local -rw-r--r-- 1 test11 test11 807 6月 14 16:40 .profile -rw------- 1 test11 test11 108 6月 15 18:55 .Xauthority
help
help 能檢視 shell 內建命令。例如 cd
,請看示例:
[email protected]:/home/test11# help cd cd: cd [-L|[-P [-e]] [[email protected]]] [目錄] 改變 shell 工作目錄。 改變當前目錄至 DIR 目錄。預設的 DIR 目錄是 shell 變數 HOME 的值。 變數 CDPATH 定義了含有 DIR 的目錄的搜尋路徑,其中不同的目錄名稱由冒號 (:)分隔。 一個空的目錄名稱表示當前目錄。如果要切換到的 DIR 由斜槓 (/) 開頭,則 CDPATH 不會用上變數。 如果路徑找不到,並且 shell 選項 `cdable_vars' 被設定,則引數詞被假定為一個 變數名。如果該變數有值,則它的值被當作 DIR 目錄。 選項: -L 強制跟隨符號連結: 在處理 `..' 之後解析 DIR 中的符號連結。 -P 使用物理目錄結構而不跟隨符號連結: 在處理 `..' 之前解析 DIR 中的符號連結。 -e 如果使用了 -P 引數,但不能成功確定當前工作目錄時,返回非零的返回值。 [email protected] 在支援拓展屬性的系統上,將一個有這些屬性的檔案當作有檔案屬性的目錄。 預設情況下跟隨符號連結,如同指定 `-L'。 `..' 使用移除向前相鄰目錄名成員直到 DIR 開始或一個斜槓的方式處理。 退出狀態: 如果目錄改變,或在使用 -P 選項時 $PWD 修改成功時返回 0,否則非零。
注 :man 檢視 cd 失敗;help 檢視 ls 也失敗。請看示例:
[email protected]:/home/test11# man cd 沒有 cd 的手冊頁條目 [email protected]:/home/test11# help ls bash: help: 沒有與“ls”匹配的幫助主題。嘗試使用“help help”、“man -k ls”或“info ls”。
pwd
用這兩個幫助指令都可以。
info
如果覺得 ls --help
不詳細,可以使用 info ls
:
[email protected]:/# info ls Next: dir invocation, Up: Directory listing 10.1 'ls': List directory contents ================================== The 'ls' program lists information about files (of any type, including directories). Options and file arguments can be intermixed arbitrarily, as usual. ...
檔案目錄指令
pwd
pwd
,檢視當前目錄所在的絕對路徑。請看示例:
[email protected]:/home/test11# pwd /home/test11
cd
cd ~
回到家目錄。請看示例
// 目前在 tmp [email protected]:~/tmp$ pwd /home/test11/tmp [email protected]:~/tmp$ cd ~ // 已回到test11 使用者的家目錄 [email protected]:~$ pwd /home/test11
cd ..
返回上一層目錄。
mkdir
mkdir
,建立目錄,預設建立一級目錄,多級目錄需要使用 -p
引數。例如建立 e、f、g 三個目錄:
[email protected]:/tmp$ mkdir -p e/f/g [email protected]:/tmp$ cd e/f/g/ [email protected]:/tmp/e/f/g$
rmdir
rmdir
,刪除空目錄。非空目錄可以使用 rm -rf
。請看示例:
[email protected]:~/tmp$ rmdir e rmdir: 刪除 'e' 失敗: 目錄非空 [email protected]:~/tmp$ rm -rf e
通過 rm --help
知道: r 表示遞迴,f 指強制刪除
。
rm 也能刪除檔案,或同時刪除非空目錄 a 和 a.txt 檔案。請看示例:
[email protected]:~/tmp$ rm -rf a a.txt
touch
touch
建立一個空檔案。
[email protected]:~/tmp$ touch b.txt [email protected]:~/tmp$ ls b.txt
cp
cp
拷貝檔案或目錄。例如將 b.txt 拷貝到 資料夾 c 中:
# 建立多級目錄 [email protected]:~/tmp$ mkdir -p a/b/c # 將 b.txt 拷貝到資料夾 c 中 [email protected]:~/tmp$ cp b.txt a/b/c [email protected]:~/tmp$ ls a/b/c b.txt
通過引數 -r
將非空目錄 a 整個拷貝到上層目錄。請看示例:
# 拷貝非空目錄失敗 [email protected]:~/tmp$ cp a ../ cp: 未指定 -r;略過目錄'a' [email protected]:~/tmp$ cp a -r ../ [email protected]:~/tmp$ ls ../ a tmp
多次執行拷貝,未提示是否需要覆蓋。
[email protected]:~/tmp$ cp a -r ../
Tip :筆者是ubuntu20.04,並且也修改了 a/b/c/b.txt 這個檔案。
mv
mv
移動目錄或檔案,也可以重新命名。請看示例:
[email protected]:~$ ls a tmp # 將 a 重新命名為 a2 [email protected]:~$ mv a a2 [email protected]:~$ ls a2 tmp
移動並重新命名。將 b.txt 移動到上一層目錄,並重命名:
[email protected]:~/tmp$ mv b.txt ../b-rename.txt [email protected]:~/tmp$ ls ../ b-rename.txt tmp
移動 a 資料夾,並重命名:
[email protected]:~/tmp$ mv a ../a-rename [email protected]:~/tmp$ cd ../a-rename/b # 檢驗:a中有b [email protected]:~/a-rename/b$
cat
cat
檢視檔案內容。只讀,更安全。請看示例:
# n 顯示行號 [email protected]:~/a-rename/b$ cat -n /etc/profile ... 10 fi 11 else 12 if [ "`id -u`" -eq 0 ]; then 13 PS1='# ' 14 else 15 PS1='$ ' 16 fi 17 fi
可配合 more
使用:
[email protected]:~/a-rename/b$ cat -n /etc/profile | more 1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) 2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). 3 4 if [ "${PS1-}" ]; then 5 if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then 6 # The file bash.bashrc already sets the default PS1. 7 # PS1='\h:\w\$ ' 8 if [ -f /etc/bash.bashrc ]; then 9 . /etc/bash.bashrc 10 fi 11 else 12 if [ "`id -u`" -eq 0 ]; then 13 PS1='# ' 14 else 15 PS1='$ ' 16 fi 17 fi 18 fi 19 20 if [ -d /etc/profile.d ]; then 21 for i in /etc/profile.d/*.sh; do 22 if [ -r $i ]; then 23 . $i --更多--
more
more
,適合螢幕檢視的檔案閱讀輸出工具。基於 vi
編輯器的文字過濾器,以全螢幕的方式顯示檔案內容。可以配合管道使用,也可以單獨使用。
例如檢視檔案:
[email protected]:~/a-rename/b$ more /etc/profile # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i --更多--(77%)
內建許多快捷鍵:
q 空格 回車 ctrl + f ctrl + b = :f
less
less
,功能與 more
類似,功能比 more 更強大。less 顯示檔案內容時,不是一次將整個檔案載入之後才顯示,對顯示大型檔案有較好的效率。
內建許多快捷鍵:
-
q
- 退出 -
空格
- 向下翻頁 -
page down
- 向下翻頁 -
page up
- 向上翻頁 -
/字串
- 向下搜尋字串。n
向下查詢;N
向上查詢。
echo
echo
,輸出內容到控制檯。請看示例:
# 輸出字串 [email protected]:/# echo 'hello world' hello world # 輸出內建變數 [email protected]:/# echo $SHELL /bin/bash
head
head
,用於顯示檔案開頭部分,預設前 10 行。請看示例:
[email protected]:~/a-rename/b$ head /etc/profile # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi
假如只要顯示前 5 行,可以使用引數 n
。請看示例:
[email protected]:~/a-rename/b$ head /etc/profile -n 5 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
tail
tail
, 與 head 對應,預設顯示檔案末尾 10 行。也能指定顯示末尾 5 行。
[email protected]:~/a-rename/b$ tail /etc/profile if [ -r $i ]; then . $i fi done unset i fi export ANDROID_HOME=/home/pjl/software/android-studio-2021.1.1.22-linux/android-studio/bin export PATH=$PATH:$ANDROID_HOME
tail -f filename
,隨檔案增長 即時
輸出新增資料,也就是能監聽檔案。請看示例:
# 新建檔案 a.txt [email protected]:~/a-rename/b$ touch a.txt # 監聽檔案輸出。此刻終端不會結束,一直監聽著 [email protected]:~/a-rename/b$ tail -f a.txt
另開一個終端,將字串( apple
)輸出(或重定向)到 a.txt 檔案中:
[email protected]:~/a-rename/b$ echo 'apple' > a.txt
立刻監聽到並輸出:
[email protected]:~/a-rename/b$ tail -f a.txt apple
> 和 >>
>
輸出重定向。例如將 pwd 結果輸出到 a.txt,這是一個覆蓋操作:
[email protected]:~/tmp$ touch a.txt [email protected]:~/tmp$ pwd > a.txt [email protected]:~/tmp$ cat a.txt /home/test11/tmp [email protected]:~/tmp$ ls > a.txt [email protected]:~/tmp$ cat a.txt a.txt
>>
則是追加。例如將 pwd 的結果追加到 a.txt 檔案中:
[email protected]:~/tmp$ pwd >> a.txt [email protected]:~/tmp$ cat a.txt a.txt /home/test11/tmp
ln
ln -s
建立軟連結,類似 windows 下快捷鍵。
語法: ln -s 檔案或目錄 軟連線名
例如給 a 建立一個軟連結 ln-a:
[email protected]:~/tmp$ ln -s a ln-a [email protected]:~/tmp$ ll 總用量 16 drwxrwxr-x 3 test11 test11 4096 6月 17 14:22 ./ drwxr-xr-x 8 test11 test11 4096 6月 17 14:13 ../ drwxrwxr-x 3 test11 test11 4096 6月 17 14:22 a/ lrwxrwxrwx 1 test11 test11 1 6月 17 14:22 ln-a -> a/
刪除軟連線可以使用 rm
,類似刪除一個檔案:
[email protected]:~/tmp$ ls a ln-a # 刪除軟連結 [email protected]:~/tmp$ rm ln-a # 軟連結已被刪除 [email protected]:~/tmp$ ls a
Tip
:為什麼要加 -s
,通過 ln --help
有這麼一段資訊: -s, --symbolic 建立符號連結而非硬連結
,也就是說加上 s
就是建立軟連結。
history
history
檢視已執行過的歷史命令,也可以執行歷史命令。
檢視所有歷史命令:
$ history ... 170 ls 171 cd .. 172 ls 173 rm ln-a 174 ls 175 history 176 history |more 177 ls 178 history
檢視最近 5 條歷史命令:
[email protected]:~/tmp$ history 5 176 history |more 177 ls 178 history 179 ls 180 history 5
執行第 177(這裡是 ls
命名) 條歷史命令:
[email protected]:~/tmp$ !177 ls a a.txt
執行級別
常用的執行級別有 3
和 5
:
- 0 關機
- 3 多使用者有網路服務
- 5 多使用者圖形
- 6 系統重啟
可以通過 init
來切換執行級別,例如 init 0
等於關機。
Tip
:可以通過 --help
檢視 init
命名。
[email protected]:/home/test11# init --help init [OPTIONS...] COMMAND Send control commands to the init daemon. Commands: 0 Power-off the machine 6 Reboot the machine 2, 3, 4, 5 Start runlevelX.target unit 1, s, S Enter rescue mode q, Q Reload init daemon configuration u, U Reexecute init daemon Options: --help Show this help --no-wall Don't send wall message before halt/power-off/reboot See the telinit(8) man page for details.
當前執行級別是圖形化。請看示例:
[email protected]:/home/test11# systemctl get-default graphical.target
比如將執行級別設定為 3:
[email protected]:/home/test11# systemctl set-default multi-user.target Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target. [email protected]:/home/test11# systemctl get-default multi-user.target
注
:如果這麼做,重啟( reboot
)後直接進入級別 3,能夠節省資源。
docker 安裝 ubuntu20.04
筆者不想安裝虛擬機器,為圖方便,直接在筆記本中安裝 ubuntu。
筆者已經在 win10 中安裝 Docker Desktop。
Tip : 有關 docker 的介紹請看初步認識 docker。
下載映象:
$ docker pull ubuntu:22.04
建立一個名為 ubuntu-test 的容器:
PS C:\Users\78614> docker run -itd --name ubuntu-test ubuntu:20.04
通過 exec 命令進入 ubuntu 容器,指定通過 bash 進行互動:
PS C:\Users\78614> docker exec -it ubuntu-test /bin/bash [email protected]:/# whoami root
安裝 vi
docker 下的 ubuntu 映象沒有 vi 命令。
[email protected]:/# vi bash: vi: command not found [email protected]:/# vim bash: vim: command not found
如果需要 vi ,我們需要安裝它。
據網友介紹:
-
apt-get
/dpkg
:適用於Debian、Ubuntu等平臺 -
rpm/yum
:適用於 Redhat、CentOS、Suse等平臺 -
zypper
:適合於Suse平臺
筆者依次輸入 rpm
、 yum
、 apt-get
,發現 apt-get
生效:
[email protected]:~# rpm bash: rpm: command not found [email protected]:~# yum bash: yum: command not found [email protected]:~# apt-get apt 2.0.8 (amd64) Usage: apt-get [options] command apt-get [options] install|remove pkg1 [pkg2 ...] apt-get [options] source pkg1 [pkg2 ...]
通過 --help
檢視 apt-get
:
[email protected]:/# apt-get --help apt 2.0.8 (amd64) Usage: apt-get [options] command apt-get [options] install|remove pkg1 [pkg2 ...] apt-get [options] source pkg1 [pkg2 ...] apt-get is a command line interface for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies. Most used commands: update - Retrieve new lists of packages upgrade - Perform an upgrade install - Install new packages (pkg is libc6 not libc6.deb) reinstall - Reinstall packages (pkg is libc6 not libc6.deb) remove - Remove packages purge - Remove packages and config files autoremove - Remove automatically all unused packages dist-upgrade - Distribution upgrade, see apt-get(8) dselect-upgrade - Follow dselect selections build-dep - Configure build-dependencies for source packages satisfy - Satisfy dependency strings clean - Erase downloaded archive files autoclean - Erase old downloaded archive files check - Verify that there are no broken dependencies source - Download source archives download - Download the binary package into the current directory changelog - Download and display the changelog for the given package See apt-get(8) for more information about the available commands. Configuration options and syntax is detailed in apt.conf(5). Information about how to configure sources can be found in sources.list(5). Package and version choices can be expressed via apt_preferences(5). Security details are available in apt-secure(8). This APT has Super Cow Powers.
使用 apt-get
安裝 vi,報錯:
[email protected]:~# apt-get install vi Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vi
通過 apt-get update
檢索新的包列表:
[email protected]:~# apt-get update Get:1 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB] Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB] Get:3 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1324 kB] Get:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB] Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB] Get:6 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB] Get:7 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB] Get:8 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB] Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB] Get:10 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [30.3 kB] Get:11 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [1404 kB] Get:12 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1170 kB] Get:13 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2407 kB] Get:14 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [54.2 kB] Get:15 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [27.1 kB] Get:16 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [1974 kB] 91% [16 Packages 710 kB/1974 kB 36%] ... Reading package lists... 80% Reading package lists... Done
再次通過 apt-get 安裝 vi,依然失敗:
[email protected]:~# apt-get install vi Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vi
嘗試安裝 vim,成功:
[email protected]:~# apt-get install vim Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: alsa-topology-conf alsa-ucm-conf file libasound2 libasound2-data libcanberra0 libexpat1 libgpm2 libltdl7 libmagic-mgc libmagic1 libmpdec2 libogg0 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libreadline8 libsqlite3-0 libssl1.1 libtdb1 libvorbis0a libvorbisfile3 mime-support readline-common sound-theme-freedesktop vim-common vim-runtime xxd xz-utils Suggested packages: libasound2-plugins alsa-utils libcanberra-gtk0 libcanberra-pulse gpm readline-doc ctags vim-doc vim-scripts The following NEW packages will be installed: alsa-topology-conf alsa-ucm-conf file libasound2 libasound2-data libcanberra0 libexpat1 libgpm2 libltdl7 libmagic-mgc libmagic1 libmpdec2 libogg0 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libreadline8 libsqlite3-0 libssl1.1 libtdb1 libvorbis0a libvorbisfile3 mime-support readline-common sound-theme-freedesktop vim vim-common vim-runtime xxd xz-utils 0 upgraded, 30 newly installed, 0 to remove and 7 not upgraded. Need to get 14.9 MB of archives. After this operation, 70.6 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic-mgc amd64 1:5.38-4 [218 kB] Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic1 amd64 1:5.38-4 [75.9 kB] Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 file amd64 1:5.38-4 [23.3 kB] Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libexpat1 amd64 2.2.9-1ubuntu0.4 [74.4 kB] Get:5 http://archive.ubuntu.com/ubuntu focal/main amd64 libmpdec2 amd64 2.4.2-3 [81.1 kB] Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2.13 [1321 kB] Get:7 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8-minimal amd64 3.8.10-0ubuntu1~20.04.4 [717 kB] Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 mime-support all 3.64ubuntu1 [30.6 kB] Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 readline-common all 8.0-4 [53.5 kB] Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 libreadline8 amd64 8.0-4 [131 kB] Get:11 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libsqlite3-0 amd64 3.31.1-4ubuntu0.3 [549 kB] 22% [11 libsqlite3-0 158 kB/549 kB ... update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn't exist Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
命令列輸入 vi 或 vim,發現 vi 和 vim 都已安裝成功。
注 :vi 和 vim 只在這個容器中安裝,如果通過 unbuntu 映象執行另一個容器,需要重新安裝 vi。我們可以通過停止和啟動這個安裝好 vi 的容器,反覆使用它即可。
- 執行緒池底層原理詳解與原始碼分析
- 30分鐘掌握 Webpack
- 線性迴歸大結局(嶺(Ridge)、 Lasso迴歸原理、公式推導),你想要的這裡都有
- 【前端必會】webpack loader 到底是什麼
- 中心化決議管理——雲端分析
- HashMap底層原理及jdk1.8原始碼解讀
- 詳解JS中 call 方法的實現
- 列印 Logger 日誌時,需不需要再封裝一下工具類?
- 初識設計模式 - 代理模式
- 密碼學奇妙之旅、01 CFB密文反饋模式、AES標準、Golang程式碼
- Springboot之 Mybatis 多資料來源實現
- CAS核心思想、底層實現
- 面試突擊86:SpringBoot 事務不回滾?怎麼解決?
- 基於electron vue element構建專案模板之【打包篇】
- MiniWord .NET Word模板引擎,藉由Word模板和資料簡單、快速生成檔案。
- 認識執行緒,初始併發
- 1-VSCode搭建GD32開發環境
- 初識設計模式 - 原型模式
- 執行緒安全問題的產生條件、解決方式
- 2>&1到底是什麼意思?