# 基本指令

```
ls
```

列出當前目錄的內容

```
ls -la
```

列出當前目錄的內容包含隱藏目錄

<p class="callout info">Linux隱藏目錄或檔案的作法，是在檔名前面加 .</p>

```
ls ~/
```

列出自己的家目錄

<p class="callout info">一般使用者的家目錄位於 /home/ ; 最高權限管理者家目錄位於 /root/</p>

---

```
mkdir test
```

建立目錄

```
mkdir -p test/a
```

於目錄下建立目錄

---

```
cp a.php b.php
```

複製檔案

<p class="callout info">一般最常用在當我需要再新增網站，copy nginx 設定檔 cp /etc/nginx/sites-enabled/site1 /etc/nginx/sites-enabled/site2</p>

```
cp -r ~/abc /var/www/
```

移動目錄，把家目錄中的abc 移到 /var/www/

<p class="callout info">分享一個小技巧，按鍵盤的tab，可以幫你索引檔案或目錄，例如輸入 /var/w 按鍵盤tab 就會自動跑出 /var/www/</p>

---

```
rm xxx.txt
```

刪除檔案

```
rm -r xxx
```

刪除目錄

<p class="callout warning">在管理linux檔案管理有一件非常重要的事情要交待，linux沒有資源回收桶，檔案刪了就沒了</p>

<p class="callout danger">如果你不小心下了這個指令，整個系統就GG了 rm -rf /</p>

---

```
mv ~/abc /var/www/
```

搬動檔案，相當於剪下貼上

---

```
tar zcf abc.tar.gz abc
```

壓縮檔案，把目錄abc壓縮成 abc.tar.gz

```
tar zxvf abc.tar.gz
```

解壓縮檔案，把 abc.tar.gz 解開

```
unzip abc.zip
```

如果要解開zip就用這個指令

---

```
cat /var/log/nginx/access.log
```

在螢幕列印出檔案的內容，一般也蠻常會運用在查詢log檔

```
cat /var/log/nginx/access.log | more
```

如果內容太多，可以在最後加上 | more，就可以由上到下查看，查看模示按空白鍵會一直往下，按Ctrl + C，可退出

```
cat /var/log/nginx/access.log | less
```

與加上more能達到大同小異的功能

```
zcat /var/log/nginx/access.log.10.gz
```

在查詢log檔時，會蠻有機會用到zcat去查看已被壓縮.gz的文件

---

```
htop
```

查看主機的資訊，CPU、記憶體、程式運作情形

---

```
vi xxx.txt
nano xxx.txt
```

編輯檔案，我是習慣用vi，nano比較易學

---

```
ssh name@ip
```

透過ssh連線到主機

```
scp -r /var/www/ name@ip:/var/www/
```

透過ssh複製檔案至另一台主機

```
rsync -av --delete /var/www/wp/wp-content/uploads/ root@ip:/var/www/wp/zfun/wp-content/uploads/
rsync -av --delete /var/www/wp/wp-content/plugins/ root@ip:/var/www/wp/zfun/wp-content/plugins/
```

透過rsync同步檔案

<p class="callout info">免密碼登入遠端主機的方式如下  
本機端執行 ssh-keygen -t rsa  
cat .ssh/id\_rsa.pub  
連線遠端主機 .ssh/authorized\_keys 貼上cat複製的內容  
退出再重登一次，如果不用密碼即成功</p>

---

```
crontab -e
```

設定排程，一般會用作在指定的時間幫你執行特定的程式

---

```
/etc/init.d/nginx reload
```

重新讀取nginx設定檔，正常情況，當我有新增或修改conf檔時，會先用 nginx -t 查看看有沒有問題

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

出現上情的內容確認沒問題後，再執行reload

```
/etc/init.d/nginx restart
```

重新啟用服務

<p class="callout info">伺服器的服務管理，通常會針對他執行 reload, restart, stop, start 進行維護及管理  
Nginx: /etc/init.d/nginx  
PHP: /etc/init.d/php7.4-fpm  
MySQL: /etc/init.d/mysql  
我會在網站的離峰時間用cron執行restart，以確保服務能順暢</p>

---

**一些shell script筆記**

<p class="callout success">以上最基本的指令及觀念務必要學會，其他的話2023年AI開始普及使用後，在系統管理非常有幫助，建議大家可以多多利用</p>