1. 基本命令和操作
檔案和目錄操作
- ls:列出目錄內容
- 示例:
ls -l /etc
列出/etc
目錄的詳細內容。
- 示例:
- cd:更改目錄
- 示例:
cd /var/log
切換到/var/log
目錄。
- 示例:
- cp:複製檔案或目錄
- 示例:
cp file1.txt file2.txt
複製file1.txt
為file2.txt
。
- 示例:
- mv:移動或重新命名檔案或目錄
- 示例:
mv oldname.txt newname.txt
重新命名oldname.txt
為newname.txt
。
- 示例:
- rm:刪除檔案或目錄
- 示例:
rm file.txt
刪除file.txt
。
- 示例:
- mkdir:建立目錄
- 示例:
mkdir newdir
建立名為newdir
的目錄。
- 示例:
- rmdir:刪除空目錄
- 示例:
rmdir olddir
刪除名為olddir
的空目錄。
- 示例:
- touch:建立空檔案或更新檔案時間戳
- 示例:
touch newfile.txt
建立newfile.txt
檔案。
- 示例:
檔案內容檢視和編輯
- cat:連線並顯示檔案內容
- 示例:
cat /etc/passwd
顯示/etc/passwd
檔案內容。
- 示例:
- less:分頁顯示檔案內容
- 示例:
less /var/log/syslog
分頁檢視syslog
日誌檔案。
- 示例:
- more:類似 less,但功能較少
- 示例:
more /var/log/syslog
分頁檢視syslog
日誌檔案。
- 示例:
- head:顯示檔案的前幾行
- 示例:
head -n 10 /var/log/syslog
顯示syslog
檔案的前10行。
- 示例:
- tail:顯示檔案的最後幾行
- 示例:
tail -n 10 /var/log/syslog
顯示syslog
檔案的最後10行。
- 示例:
- nano:簡易文字編輯器
- 示例:
nano /etc/hosts
編輯hosts
檔案。
- 示例:
- vim:功能強大的文字編輯器
- 示例:
vim /etc/hosts
編輯hosts
檔案。
- 示例:
檔案許可權和所有權
- chmod:修改檔案許可權
- 示例:
chmod 755 script.sh
將script.sh
的許可權設為 755。
- 示例:
- chown:修改檔案所有者
- 示例:
chown user:group file.txt
將file.txt
的所有者改為user
,組改為group
。
- 示例:
- chgrp:修改檔案所屬組
- 示例:
chgrp group file.txt
將file.txt
的所屬組改為group
。
- 示例:
搜尋和查詢
- find:查詢檔案或目錄
- 示例:
find / -name "file.txt"
從根目錄開始查詢名為file.txt
的檔案。
- 示例:
- grep:在檔案中搜尋字串
- 示例:
grep "root" /etc/passwd
在passwd
檔案中搜尋包含root
的行。
- 示例:
- locate:快速查詢檔案
- 示例:
locate file.txt
查詢系統中所有名為file.txt
的檔案。
- 示例:
2. 使用者和組管理
使用者管理
- useradd:新增使用者
- 示例:
sudo useradd -m newuser
新增一個新使用者newuser
並建立主目錄。
- 示例:
- usermod:修改使用者
- 示例:
sudo usermod -aG sudo newuser
將使用者newuser
新增到sudo
組。
- 示例:
- userdel:刪除使用者
- 示例:
sudo userdel -r olduser
刪除使用者olduser
並刪除其主目錄。
- 示例:
- passwd:修改使用者密碼
- 示例:
sudo passwd newuser
為使用者newuser
設定密碼。
- 示例:
組管理
- groupadd:新增組
- 示例:
sudo groupadd newgroup
新增新組newgroup
。
- 示例:
- groupmod:修改組
- 示例:
sudo groupmod -n newgroupname oldgroupname
將組oldgroupname
重新命名為newgroupname
。
- 示例:
- groupdel:刪除組
- 示例:
sudo groupdel oldgroup
刪除組oldgroup
。
- 示例:
許可權管理
理解檔案和目錄的許可權位:讀(r)、寫(w)、執行(x)。
- 設定特殊許可權:
- SUID:在檔案上設定SUID(Set User ID),執行檔案時臨時獲得檔案所有者的許可權。
- 示例:
chmod u+s /usr/bin/someprogram
設定someprogram
的SUID位。
- 示例:
- SGID:在檔案或目錄上設定SGID(Set Group ID),執行檔案時臨時獲得檔案所屬組的許可權,在目錄上設定時,新建立的檔案和子目錄繼承目錄的組。
- 示例:
chmod g+s /usr/local/somedir
設定somedir
的SGID位。
- 示例:
- 粘滯位:通常設定在目錄上,防止使用者刪除或重新命名其他使用者的檔案。
- 示例:
chmod +t /usr/local/somedir
設定somedir
的粘滯位。
- 示例:
- SUID:在檔案上設定SUID(Set User ID),執行檔案時臨時獲得檔案所有者的許可權。
3. 軟體包管理
Red Hat系(如CentOS、Fedora)
- yum:軟體包管理器
- 示例:
sudo yum install httpd
安裝httpd
包。
- 示例:
- dnf:新的包管理器,替代yum
- 示例:
sudo dnf install httpd
安裝httpd
包。
- 示例:
Debian系(如Ubuntu)
- apt:高階包工具
- 示例:
sudo apt update && sudo apt install apache2
更新軟體包列表並安裝apache2
包。
- 示例:
- dpkg:Debian軟體包管理工具
- 示例:
sudo dpkg -i package.deb
安裝本地package.deb
包。
- 示例:
原始碼安裝
- tar:解壓縮tar包
- 示例:
tar -xzvf package.tar.gz
解壓package.tar.gz
檔案。
- 示例:
- configure:配置原始碼包
- 示例:
./configure
配置原始碼包。
- 示例:
- make:編譯原始碼
- 示例:
make
編譯原始碼。
- 示例:
- make install:安裝編譯好的程式
- 示例:
sudo make install
安裝編譯好的程式。
- 示例:
4. 系統監控和管理
系統資源監控
- top:動態檢視系統資源使用情況
- 示例:執行
top
並檢視CPU、記憶體使用情況。
- 示例:執行
- htop:更友好的top替代工具
- 示例:執行
htop
檢視系統資源使用情況。
- 示例:執行
- free:顯示記憶體使用情況
- 示例:
free -h
顯示記憶體的詳細使用情況。
- 示例:
- df:顯示磁碟使用情況
- 示例:
df -h
顯示磁碟空間的使用情況。
- 示例:
- du:檢視目錄或檔案的磁碟使用情況
- 示例:
du -sh /home/user
檢視user
目錄的大小。
- 示例:
- iostat:顯示CPU和I/O統計資訊
- 示例:
iostat
檢視CPU和I/O的統計資訊。
- 示例:
- vmstat:顯示系統虛擬記憶體統計
- 示例:
vmstat
檢視虛擬記憶體的統計資訊。
- 示例:
程序管理
- ps:顯示當前程序
- 示例:
ps aux
顯示所有程序的資訊。
- 示例:
- kill:終止程序
- 示例:
kill 1234
終止PID為1234
的程序。
- 示例:
- pkill:按名稱終止程序
- 示例:
pkill firefox
終止所有firefox
程序。
- 示例:
- pgrep:查詢程序ID
- 示例:
pgrep sshd
查詢sshd
程序的PID。
- 示例:
- jobs:顯示當前shell中的後臺任務
- 示例:
jobs
檢視當前shell中的任務。
- 示例:
- bg:將任務放到後臺執行
- 示例:
bg %1
將任務編號為1的任務放到後臺執行。
- 示例:
- fg:將任務放到前臺執行
- 示例:
fg %1
將任務編號為1的任務放到前臺執行。
- 示例:
日誌管理
- 日誌檔案位置:大多數日誌檔案位於
/var/log
目錄下。- 示例:`/
var/log/syslog或
/var/log/messages` 是系統日誌檔案。
- 實時檢視日誌:
- tail:
tail -f /var/log/syslog
實時檢視syslog
日誌檔案。 - less:
less +F /var/log/syslog
實時檢視syslog
日誌檔案。
- tail:
5. 網路管理
網路配置
- ifconfig:顯示或配置網路介面
- 示例:
ifconfig eth0
檢視eth0
介面的配置。
- 示例:
- ip:顯示或配置網路介面
- 示例:
ip addr show
顯示所有網路介面的IP地址。
- 示例:
- nmcli:NetworkManager命令列工具
- 示例:
nmcli device status
檢視所有網路裝置的狀態。
- 示例:
- nmtui:NetworkManager圖形介面工具
- 示例:執行
nmtui
進行網路配置。
- 示例:執行
- systemctl:管理系統服務
- 示例:
systemctl restart network
重啟網路服務。
- 示例:
網路測試和診斷
- ping:測試網路連通性
- 示例:
ping google.com
測試到google.com
的連通性。
- 示例:
- traceroute:顯示到目的主機的路由
- 示例:
traceroute google.com
檢視到google.com
的路由。
- 示例:
- netstat:顯示網路連線、路由表、介面統計等
- 示例:
netstat -tuln
顯示所有監聽的TCP和UDP埠。
- 示例:
- ss:類似netstat,但功能更強大
- 示例:
ss -tuln
顯示所有監聽的TCP和UDP埠。
- 示例:
- curl:傳輸資料
- 示例:
curl http://example.com
下載網頁內容。
- 示例:
- wget:網路下載工具
- 示例:
wget http://example.com/file.zip
下載檔案。
- 示例:
6. 安全和許可權管理
防火牆配置
- iptables:設定Linux核心中的資料包過濾規則
- 示例:
sudo iptables -L
檢視當前的防火牆規則。
- 示例:
- firewalld:動態管理防火牆
- 示例:
sudo firewall-cmd --list-all
檢視當前的防火牆設定。
- 示例:
SSH管理
- 配置和使用SSH:透過SSH進行安全遠端登入和傳輸檔案。
- ssh:
ssh user@hostname
遠端登入到主機hostname
。 - scp:
scp file.txt user@hostname:/path/to/destination
複製檔案到遠端主機。 - rsync:
rsync -avz file.txt user@hostname:/path/to/destination
同步檔案到遠端主機。
- ssh:
使用者許可權控制
- sudo:以超級使用者或其他使用者許可權執行命令。
- 示例:
sudo command
以超級使用者許可權執行command
。 - 配置sudoers檔案:使用
visudo
命令編輯/etc/sudoers
檔案,配置使用者的sudo許可權。
- 示例:
7. 自動化和指令碼編寫
Shell指令碼
- 編寫基礎bash指令碼:
- 示例指令碼:
#!/bin/bash echo "Hello, World!"
- 變數:
- 示例:
name="Linux"
定義變數name
。
- 示例:
- 條件判斷:
- 示例:
if [ "$name" == "Linux" ]; then echo "Welcome to Linux!" fi
- 示例:
- 迴圈:
- 示例:
for i in {1..5}; do echo "Number $i" done
- 示例:
- 函式:
- 示例:
function greet() { echo "Hello, $1!" } greet "Linux"
- 示例:
- 示例指令碼:
任務排程
- cron:定時任務排程
- 示例:編輯
crontab
檔案,新增如下條目,每天凌晨2點執行備份指令碼:0 2 * * * /path/to/backup.sh
- 示例:編輯
- at:一次性任務排程
- 示例:
echo "backup.sh" | at now + 1 minute
一分鐘後執行備份指令碼。
- 示例:
8. 備份和恢復
備份工具
- tar:建立歸檔檔案
- 示例:
tar -czvf backup.tar.gz /path/to/directory
備份目錄為backup.tar.gz
檔案。
- 示例:
- rsync:高效的檔案同步工具
- 示例:
rsync -avz /path/to/source /path/to/destination
同步檔案或目錄。
- 示例:
- dd:進行低階別資料備份
- 示例:
dd if=/dev/sda of=/path/to/backup.img
備份整個硬碟。
- 示例:
恢復操作
- 理解備份檔案的恢復過程:
- tar:
tar -xzvf backup.tar.gz -C /path/to/restore
解壓並恢復檔案。 - rsync:
rsync -avz /path/to/backup /path/to/restore
恢復檔案或目錄。 - dd:
dd if=/path/to/backup.img of=/dev/sda
恢復硬碟映象。
- tar:
9. 虛擬化和容器化
虛擬化
- KVM:核心虛擬機器
- 示例:安裝KVM並建立虛擬機器:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils sudo virt-install --name testvm --ram 2048 --disk path=/var/lib/libvirt/images/testvm.qcow2,size=10 --vcpus 2 --os-type linux --os-variant ubuntu20.04 --network bridge=br0 --graphics none --console pty,target_type=serial --location 'http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/'
- 示例:安裝KVM並建立虛擬機器:
- VirtualBox:使用者友好的虛擬機器軟體
- 示例:安裝VirtualBox並建立虛擬機器。
容器化
- Docker:輕量級容器化技術
- 示例:安裝Docker並執行容器:
sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker sudo docker run -it ubuntu /bin/bash
- 示例:安裝Docker並執行容器:
- docker-compose:定義和執行多容器Docker應用
- 示例:編寫
docker-compose.yml
檔案,啟動多容器應用:version: '3' services: web: image: nginx ports: - "80:80" db: image: mysql environment: MYSQL_ROOT_PASSWORD: example
- 示例:編寫
10. 常見服務配置
Web服務
- Apache:安裝和配置Apache
- 示例:
sudo apt install apache2
安裝Apache。
- 示例:
- Nginx:安裝和配置Nginx
- 示例:
sudo apt install nginx
安裝Nginx。
- 示例:
資料庫服務
- MySQL:安裝和配置MySQL
- 示例:
sudo apt install mysql-server
安裝MySQL。
- 示例:
- PostgreSQL:安裝和配置PostgreSQL
- 示例:
sudo apt install postgresql
安裝PostgreSQL。
- 示例:
檔案共享服務
- Samba:安裝和配置Samba
- 示例:
sudo apt install samba
安裝Samba。
- 示例:
- NFS:安裝和配置NFS
- 示例:
sudo apt install nfs-kernel-server
安裝NFS伺服器。
- 示例:
11. DevOps工具
版本控制
- Git:基本操作
- 示例:
git clone https://github.com/user/repo.git
克隆倉庫。
- 示例:
CI/CD
- GitLab CI/CD:瞭解GitLab CI/CD的基本使用
- 示例:編寫
.gitlab-ci.yml
檔案,定義CI/CD流水線。
- 示例:編寫
- Jenkins:自動化構建工具
- 示例:安裝Jenkins並配置流水線。
基礎設施即程式碼
- Ansible:簡單的配置管理工具
- 示例:編寫
playbook.yml
,使用Ansible部署應用。
- 示例:編寫
- Terraform:基礎設施即程式碼工具
- 示例:編寫
main.tf
檔案,使用Terraform管理基礎設施。
- 示例:編寫
12. 雲端計算基礎
常見雲服務商
- AWS:瞭解AWS的基本服務,如EC2、S3、RDS等。
- Azure:瞭解Azure的基本服務,如VM、Blob儲存、SQL資料庫等。
- GCP:瞭解GCP的基本服務,如Compute Engine、Cloud Storage、Cloud SQL等。