2018年7月23日 星期一

【Linux】如何分辨/dev/底下的裝置名稱,是SATA硬碟 或是 USB硬碟

使用下面的方法可以分辨:
SATA:
ls -l /sys/class/block | grep ata


usb:
ls -l /sys/class/block | grep usb


M.2:
ls -l /sys/class/block | grep nvme

【Linux】mount fat32 格式,chown 回應 "operation not permitted"

事由:
今天我有一支USB隨身碟,他是Fat32格式的,我在Linux使用mount指令把它掛載起來

後來要透過Samba到遠端電腦來修改此USB碟的內容,出現權限不足的問題

因此我使用chown想把它的owner改為nobody,卻出現"operation not permitted"的錯誤訊息









原因&解決方法:
查了一下原因如下:
因為chown(或是chmod)是在Linux的檔案系統才能夠使用的,FAT32或NTFS是無法使用這個指令來操作,而解決方法只有在mount的時候,指定你要操作的人的uidgid

例如我原本想要把owner改為 nobody:nobody
===> 首先,先去確認你的passwd當中,nobody的uid與gid








如上圖,uid與gid都為99
所以我只需要在掛載時,使用下面的指令即可:
mount -t vfat -o rw,uid=99,gid=99 /dev/sdc1 /mnt/USB1


2018年7月20日 星期五

除錯工具strace的用法


strace   [parameter]   [除錯的執行檔]

執行 strace 相關參數
-o ( strace 程式的過程寫至指定的 file )
-s (最多一次 print xxx bytes 的訊息)
-p (strace pid 程序的執行過程)
-f (strace 某子程序的執行過程)

例如:   我執行smbd遇到無法跑在背景,卻又沒有任何錯誤訊息
就可以使用strace來觀察錯誤的原因
===> ./strace -o aa.log -s 1024 /sbin/smbd -D

2018年7月3日 星期二

【shell script】[ :Unexpected operator in shell

今天把一支寫好的script放到Ubuntu跑,原本在板子上的Linux上跑是沒有問題的,但在Ubuntu上Run出現了錯誤訊息,簡單的程式如下所示:

############## test.sh ################
#!/bin/sh

NAME="danny"
NUM=56

if [ $NAME == "david" ]; then
    echo "This is david"
else
    echo "This is danny"
fi

if [ $NUM -gt 48 ]; then
    echo "num great then 48"
fi
####################################

執行程式後的錯誤訊息:
./test.sh: 6: [: danny: unexpected operator


找了一下原因,原來是因為 sh的語法並沒有 "==" 這種語法,而是必須使用單一個"="

而"=="這語法,是bash在使用的

因此解決方法有兩個:

    1. 把程式第一行的 #!/bin/sh 改成 #!/bin/bash

    2. 把語法 "==" 改為 "="