發表文章

目前顯示的是 12月, 2020的文章

echo "text" > file 發生 Permission denied

若想寫一份內容簡單的文件,尤其是只有1行內容時,常會選用簡單的指令格式 echo "text" > file 例如在test.txt中寫「abc」,常會選用簡單的指令 echo "abc" > text.txt  要創一個空檔案,也可以用 echo "" > empty_file echo "text" > file 這種格式,真是建立輕量文字檔的好工具。 但若使用者沒有寫檔案的資料夾權限時,會顯示「Permission denied」的錯誤訊息,告知權限不足,這時,若使用者為superdoer,直覺上,在前面加上「sudo」就好了。 sudo echo "text" > file 輸入後仍然顯示「Permission denied」,為什麼呢? 因為這種格式實際上有2個指令「echo」和「 > (寫入)」,擁有sudo權限的,只有接在sudo後面的echo指令,寫入的指令並未獲得。 要解決這樣的窘境,要利用 sh -c command 將shell執行指令完全寫出來,再加上sudo sudo sh -c "echo text > file" 簡單了解系統中的sh是什麼? $ whereis sh sh: /bin/sh /bin/sh.distrib /usr/share/man/man1/sh.1.gz $ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Jun 19 2020 /bin/sh -> dash 發現sh預設為dash的連結,若習慣用bash的朋友們,是不是也習慣在shell腳本第一行寫上 #!/bin/bash ? 不想用dash,除了將sh更改為bash的連結,也可以直接將sh改用/bin/bash取代 sudo /bin/bash -c "echo text > file" 當然,/bin/已經被系統預設路徑所包函,所以可以省略/bin/ sudo bash -c "echo text > file" 查看系統預設路...

Shell Script 判斷式邏輯運算參數

路徑(檔案、目錄) 檔案/目錄 是否存在? if [ -e "$path" ]; then echo "$path is exist." else echo "$path not found." fi 檔案/目錄 是否為檔案? if [ -f "$path" ]; then echo "$path is a file." fi 檔案/目錄 是否為資料夾? if [ -d "$path" ]; then echo "$path is a directory." fi 檔案 大小是否大於0? if [ -s "$file" ]; then echo "$file is not empty." else echo "The file size of $file is 0." fi 其他判斷式 [ -b /dev/sda ]      /dev/sda 是否為Block Device [ -c /dev/tty ]      /dev/tty 是否為Character Device [ -p "$file" ]      檔案 是否為Pipe檔 [ -S "$file" ]      檔案 是否為Socket檔 [ -L "$file" ]      檔案 是否為連結檔 [ -g "$path" ]      檔案/目錄 是否為SGID的屬性? [ -u "$path" ]      檔案/目錄 是否為SUID的屬性? [ -k "$path" ]      檔案/目錄 是否為Sticky Bit的屬性? [ -r "$path" ]      檔案/目錄 權限是否可讀? [ -w "$path" ]      檔案/目錄 權限是否可寫? [ -x "$path" ]      檔案/目錄 權限是否可執行? ...