網頁

顯示具有 MacOSX 標籤的文章。 顯示所有文章
顯示具有 MacOSX 標籤的文章。 顯示所有文章

2023年3月26日 星期日

解決osx samba網路瀏覽主機圖像變成問號的問題

安裝Debian 11 samba 分享後在osx 網路瀏覽這台主機會變成?問號,如下:

可以修改 /etc/smb.conf 在Global 區段加上 fruit:model = model_name,
model_name 可以有 iMac, MacPro, Macmini, iPhone . . .
例如,加上 fruit:model = iPhone ,
重啟 samba service :service smbd restart

sudo avahi-daemon -k

畫面上看到的主機會是這樣:

如果加上 fruit:model = iMac,
重啟 samba service :service smbd restart

畫面上看到的主機會是這樣:

網路上有人寫了一隻python script 可以列出fruit:model的清單有興趣的人可以試一試,列出的 model有:

ADP2,1,
ADP3,2,
AirPort, AirPort4, AirPort4,102, AirPort4,107, AirPort5, AirPort5,104, AirPort5,105, AirPort5,108, AirPort5,114, AirPort5,117, AirPort6, AirPort6,106, AirPort7,120,
AppleTV, AppleTV1,1,
D201AP, D201AP, D201AP,
D20AP, D20AP, D20AP,
D211AP, D211AP, D211AP,
D21AP, D21AP, D21AP,
D221AP, D221AP,
D22AP, D22AP,
K48AP,
Laptop,
M68AP,
MacBook, MacBook1,1, MacBook1,1,Black, MacBook1,1,White,  MacBook2,1, MacBook2,1,Black, MacBook2,1,White, MacBook3,1, MacBook3,1,Black, MacBook3,1,White, MacBook4,1, MacBook4,1,Black, MacBook4,1,White, MacBook5,1, MacBook5,2, MacBook6,1, MacBook7,1, MacBook8,1, MacBookAir, MacBookAir1,1, MacBookAir10,1,  MacBookPro, MacBookPro1,1, MacBookPro1,2, MacBookPro10,1, MacBookPro10,2, MacBookPro11,1, MacBookPro11,2, MacBookPro11,3, MacBookPro11,4, MacBookPro11,5, MacBookPro12,1, MacBookPro13,1, MacBookPro2,1, MacBookPro2,2, MacBookPro3,1, MacBookPro4,1, MacBookPro5,1, MacBookPro5,2, MacBookPro5,3, MacBookPro5,4, MacBookPro5,5, MacBookPro6,1, MacBookPro6,2, MacBookPro7,1, MacBookPro8,1, MacBookPro8,2, MacBookPro8,3, MacBookPro9,1, MacBookPro9,2,
MacPro, MacPro1,1, MacPro2,1, MacPro3,1, MacPro4,1, MacPro5,1, MacPro6,1, MacPro7,1,
Macintosh,
Macmini, Macmini1,1, Macmini2,1, Macmini3,1, Macmini4,1, Macmini5, Macmini6, Macmini7, Macmini8,1, Macmini9,1,
N18AP,
N45AP,
N72AP,
N81AP,
N82AP,
N88AP,
N90AP,
PowerBook, PowerBook3,2, PowerBook3,3, PowerBook3,4, PowerBook3,5, PowerBook5,1, PowerBook5,2, PowerBook5,3, PowerBook5,4, PowerBook5,5, PowerBook5,6, PowerBook5,7, PowerBook5,8, PowerBook5,9, PowerBook6,1, PowerBook6,2, PowerBook6,3, PowerBook6,4, PowerBook6,5, PowerBook6,7, PowerBook6,8, PowerMac, PowerMac10,1, PowerMac10,2, PowerMac11,2, PowerMac11,2,Quad, PowerMac12,1, PowerMac3,5, PowerMac3,6, PowerMac4,2, PowerMac4,4, PowerMac4,5, PowerMac6,1, PowerMac6,3, PowerMac6,4, PowerMac7,2, PowerMac7,3, PowerMac8,1, PowerMac8,2, PowerMac9,1,
RackMac, RackMac1,1, RackMac1,2, RackMac3,1, RackMount,
TimeCapsule, TimeCapsule6, TimeCapsule6,106, TimeCapsule6,109, TimeCapsule6,113, TimeCapsule6,116, TimeCapsule8,119,
Tower,
Watch,
Windows, Windows2000, Windows2003, Windows2008, Windows7, WindowsVista, WindowsXP,
Xserve, Xserve1,1, Xserve2,1, Xserve3,1,
iMac, iMac10,1, iMac11,1, iMac11,2, iMac11,3, iMac12,1, iMac12,2, iMac13,1, iMac13,2, iMac13,3, iMac14,1, iMac14,2, iMac14,3, iMac14,4, iMac15,1, iMac16,1, iMac16,2, iMac17,1, iMac18,1, iMac18,2, iMac18,3, iMac19,1, iMac19,2, iMac20,1, iMac20,2, iMac21,1, iMac4,1, iMac4,2, iMac5,1, iMac5,2, iMac6,1, iMac7,1, iMac8,1, iMac9,1, iMacPro1,1,
iPad, iPad1,1,
iPhone, iPhone, iPhone, iPhone, iPhone, iPhone, iPhone, iPhone, iPhone, iPhone1,1, iPhone1,2, iPhone10,1, iPhone10,1, iPhone10,1, iPhone10,2, iPhone10,2, iPhone10,2, iPhone10,3, iPhone10,3, iPhone10,4, iPhone10,4, iPhone10,4, iPhone10,5, iPhone10,5, iPhone10,5, iPhone10,6, iPhone10,6, iPhone2,1, iPhone3,1,
iPod, iPod1,1, iPod2,1, iPod3,1, iPod4,1

2023年3月19日 星期日

簡單的 html 表單及 php 接收表單

首先做一個簡單的學生資料表單:

 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<form method="post" action="demo.php">
學生資料建立 <br><br>
學號: <input type="text" name="id" value="">
<span class="error"> <?php echo $nameErr;?> </span>
<br><br>
姓名: <input type="text" name="name" value="">
<span class="error"> <?php echo $nameErr;?> </span>
<br><br>
性别:
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="female">女
<span class="error"> <?php echo $genderErr;?> </span>
<br><br>
手機: <input type="text" name="phone" value="">
<span class="error"> <?php echo $emailErr;?> </span>
<br><br>
郵件: <input type="text" name="email" >
<span class="error"><?php echo $websiteErr;?> </span>
<br><br>
擅長運動:
<input type="checkbox" name="sport[]" value="羽球">羽球
<input type="checkbox" name="sport[]" value="籃球">籃球
<input type="checkbox" name="sport[]" value="桌球">桌球
<input type="checkbox" name="sport[]" value="直排輪">直排輪
<span class="error"> <?php echo $sportErr;?> </span>
<br><br>
<input type="submit" name="submit" value="送出">
<input type="reset" value="清除">
</form>

將此檔案存檔為 demo.html,並在瀏覽器輸入 127.0.0.1/demo.html


 

接著寫一個可以接收 html 表單資料的 php 程式:


<?php
$id = $_POST['id'];
$name = $_POST['name'];
$sex = $_POST['sex'];
$phone = $_POST['phone'];
$email = $_POST['email'];
echo "學號: ".$id;
echo "<br>姓名: ".$name;
echo "<br>性别: ".$sex;
echo "<br>手機: ".$phone;
echo "<br>郵件: ".$email;
echo "<br>擅長運動: ";
$q = isset($_POST['sport'])? $_POST['sport'] : '';
if(isset($q)) {
foreach($q as $val) {
echo $val.', ';
}
}
?>

我們將檔案存成 demo.php ,記得要和 html 表單程式裡呼叫的檔名相同就好。

現在在表單輸入一些資料:

按下送出後會出現:



OSX 設定 Apache、PHP

Mac OSX 已經內建了 Apache 與 PHP,只要幾個動作就可以設定完成。

1.啟動 Apache:
OSX已經安裝好 Apache Server,啟動 Apache 只要輸入:


sudo apachectl start

在瀏覽器網址列輸入http://127.0.0.1,如果畫面上出現 It Works! 就代表啟動 Apache 了!
 

2.編輯Apache設定檔:
由於 Mac 已經內建 PHP 模組,我們只要在 Apache 中將他啟用就可以了
使用編輯器編輯 Apache 設定檔 /etc/apache2/httpd.conf,找到:


LoadModule php7_module libexec/apache2/libphp7.so

將前面 # 號刪除即可。

3.重新啟動 Apache:


sudo apachectl restart

步驟做完了, 當然要驗證一下 PHP 是否有如期運作, 透過下面指令建立一個測試用的 php 檔案

echo "<?php phpinfo();" | sudo tee /Library/WebServer/Documents/info.php

意思是在 /Library/WebServer/Documents/ 目錄下建立一個 info.php 檔案,內容是:

<?php phpinfo();

接著我們就可以在瀏覽器位址欄輸入 http://127.0.0.1/info.php 來檢查一下結果:
 

如果出現如上圖的畫面就代表 PHP 已經正常啟動了!
(PHP Info 可能會因為版本不同而有差異)

 4.設定目錄權限:
OSX 的 Apache 預設工作目錄為 /Library/WebServer/Documents/

由於預設的擁有者是 root,這會導致我們無法直接寫入檔案,可以透過下面指令將所有權限改成使用者的:


sudo chown -R 使用者名稱 /Library/WebServer/Documents/



2021年1月29日 星期五

Python:依檔案清單大量找檔案並拷貝

有一個檔案清單紀錄要找尋在 dir 目錄下的檔案,並將找到的檔案拷貝到桌面 tmp目錄下,
找尋的目錄dir,目錄下有多層目錄共38006個檔案(沒有順序)。

【方法1】:
讀取檔案清單,依清單第一筆資料遞迴搜尋目錄檔名是否符合,然後清單第二筆再遞迴搜尋目錄檔名是否符合 . . . 直到清單最後一筆。
程式碼:https://ideone.com/NSdqT4

圖示範例:


所花費時間 (約3.05s):
 

【方法2 】:
讀取檔案清單存放在Dictionary,遞迴目錄的每一檔案名稱是否是 dict 的 key 值。
程式碼:https://ideone.com/eN5xXP

圖示範例:

 
所花費時間 (約0.75s):






由此看來遍歷目錄的檔案然後判斷是否在Dict 中的 key值(Hash Map)是比每一筆資料都要去遍歷目錄樹一次效率要好得多,當清單的數量多的時候差異會更大。

#【程式碼 】:
import os, re, shutil, sys, time
if len(sys.argv) == 1 or len(sys.argv) == 2:
    lst_file = 'list2.txt' #欲搜尋檔案清單
    search_dir = "./dir"   #搜尋目錄
else:
    lst_file = sys.argv[1]
    search_dir = sys.argv[2]
start = time.time()
tag_dir = os.path.expandvars('$HOME') + "/Desktop/tmp/" #目標目錄
dict = {} #建立Hach map
with open(lst_file) as f:
    for line in f.readlines():
        line = line[:-1]
        dict[line] = 0
num_files = 0 #計算檔案數量變數
if not os.path.isdir(tag_dir): #測試目標目錄存在否
    os.mkdir(tag_dir)
#遞迴目錄樹
for dirPath, dirNames, fileNames in os.walk(search_dir):
    for f in fileNames:
        num_files += 1
        basename = os.path.splitext(f)[0]
        if basename in dict: #如果檔名與hash key相同
            print "finded >>", os.path.join(dirPath, f)
            old = os.path.join(dirPath, f)
            new = tag_dir + f
            shutil.copy(old, new) #複製檔案到目標目錄
print "Total search files:", num_files
end = time.time()
print "Elapsed time:", end - start


2021年1月25日 星期一

OSX 終端機發送 e-mail 方式

OSX 本身已經安裝了Postfix Mail Server,只要稍加設定就可以使用,下面就介紹設定的步驟:

1. 備份原有的 Postfix configuration
$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

2. 設定 Postfix mail server
$ sudo sh -c "cat >> /etc/postfix/main.cf" <<EOF
relayhost = smtp.gmail.com:587
smtp_sasl_mechanism_filter = plain
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_security_level = encrypt
tls_random_source = dev:/dev/urandom
EOF


3. 設定 gmail SASL 認證
$ EMAIL="youremail@gmail.com"
$ PASSWORD="password123"

$ sudo sh -c "cat >> /etc/postfix/sasl_passwd" <<EOF
smtp.gmail.com:587 $EMAIL:$PASSWORD
EOF


4. 產生 hash database
sudo postmap /etc/postfix/sasl_passwd

5. 更改 Postfix hash database and password files 權限
sudo chown root: /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db


6. Restart the Postfix mail server
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master


7. 更改 gmail "低安全性應用程式存取權"


測試一下:
echo "Hello World" | mail -s "Test email" name@mail

此時 gmail 信箱應該就有一封上面發出的信了。

如果要夾帶附件

語法:uuencode [實際檔案] [信件中的檔名] | mail -s '標題' email

uuencode filename infilename | mail -s "Hello" name@mail


2020年9月6日 星期日

解決 csv檔數字前綴0無法顯示的問題

 當我們將資料匯出成 csv 檔後再用Excel開啟會發現數字前綴0會無法顯示,但是用文字編輯軟體去看檔案內容其實是包含0的,要解決這個問題方法如下:






 

1. 首先不要用開啟檔案的方式,於檔案下拉選單選擇【匯入】:









匯入檔案類型點選【文字檔】:








2. 選擇【分隔符號】: 









3. 分隔符號選擇【逗號】,文字識別符用 " :








 

4. 欄資料格式選擇【文字】,在下方預覽選取的資料區點選有數字的欄位:


 

 

 

 

 

 

 

5.  選擇資料放置儲存格位置:






6. 出來的結果如下:









2020年5月20日 星期三

整理 Mac 磁碟空間

硬碟使用一段時間後會發現磁碟空間被一些不知名的檔案佔據空間造成磁碟空間不足或是速度變慢,像是在Mac 磁碟資訊中顯示 (下圖左):


經過清理後磁碟資訊中顯示 (上圖右),下面就來說說如何清理。
 
其中"5.06GB 可清除"的資料佔據磁碟空間,要怎麼找到這是什麼檔案呢?
1. 首先先確認時光機(Time Machine) 自動備份是關閉的 (自動備份不勾選)。

2. 於蘋果選單【關於這台Mac】,點選【儲存空間】:
 按下【管理】:
3. 使用 diskutil 指令釋放磁碟空間:
輸入 df -h 檢視目前掛載磁碟名稱,下圖中 /dev/disk1s1 是我的主要磁碟邏輯名稱。
輸入 diskutil secureErase freespace 0 /dev/disk1s1
過程需要一段時間要耐心等一下


4. 當使用Time Machine自動備份但又沒有裝上備份碟,OSX系統會將備份檔案佇列成快照
(snapshots) 檔案,可以用下面指令檢查並列出:
sudo tmutil listlocalsnapshots /

執行
sudo tmutil deletelocalsnapshots
刪除快照檔
以上面的例子,快照檔是 com.apple.TimeMachine.2020-05-20-084339
所以刪除這個檔案可以輸入:
sudo tmutil deletelocalsnapshots 2020-05-20-084339
 

要是覺得一個一個刪除太慢也可以寫成 shell script 自動執行:
#!/bin/bash
echo "Snapshots file:"
tmutil listlocalsnapshots /
echo "----------------------------------------"
for snapshot_file in $(tmutil listlocalsnapshotdates | grep "-"); do
    sudo tmutil deletelocalsnapshots $snapshot_file;
done




如此可以將佔據磁碟的一些暫存檔清除,釋放出一些磁碟空間。


可以參考:

1. OSX 刪除時光機快照檔案


2020年4月12日 星期日

使用 vim 讀取TSK log 檔案

上一篇介紹了用 C語言來讀取 TSK log 檔,這篇來講講使用 vim 編輯器直接使用搜尋/替換
的方式來轉換 log 檔。

1. 首先,用 vim 開啟 LOG_1.DAT 檔案:

2. 接著你會看到像下面的樣子,資料是用ASCII 0串在一起 (16進制 0x00):

 3. 先按ESC退出編輯模式,按下/\%x00,
   說明: 第一個 "/"是搜尋,"\"跳脫下一個 "%","x00" 就是16進制 0

   然後按Enter 後你會看到有找到的字元都會被高亮起來,
   如果你的 vim 沒有高亮可以用 :set hlsearch 來設定。

4. 接著就將找到的這些字元替換成換行字元(\r)
 輸入 :%s/\%x00/\r/g
 說明: 搜尋/替換的格式為 %s/ 搜尋的字 / 替換的字 /g
 其中 s: search , g: global (全部的意思)

5. 如果沒輸入錯誤應該會看到如下的畫面,如果正確
  用 :w 檔名 ,另存新檔即可。

6. 按下 :q! 離開


2019年10月16日 星期三

OSX 更改使用者全名

1. 開啟系統偏好(System Preferences)設定

2. 使用者和群組 (Users & Groups)。

3. 按下鎖頭,輸入密碼解鎖。

4. 將滑鼠移到欲更改的使用者圖像,按下 Control+滑鼠左鍵
,會出現 進階選項。

5. 在全名的欄位輸入想更改的名稱 。

6. 電腦重新開機。

註:作業系統從 10.12 (Sierra),10.13 (High Sierra),10.14 (Mojave) 都可以依上述方法更改。

2019年10月13日 星期日

ubuntu 18.04 安裝 Samba server

首先安裝 Samba 套件:
$ sudo apt install samba


新增一個 smbuser 使用者:
sudo adduser smbuser --shell /bin/false

接著就是用 smbpasswd 指令的 -a 選項來將這個 smbuser 帳號設定為 Samba 的使用者帳號:
 $ sudo smbpasswd -a smbuser
如果要與使用者同名則:
$ sudo smbpasswd -a jkchang

安裝好 Samba Server 和使用者的設定後,接下來就是要來設定 Samba 的設定檔了,
打開 /etc/samba/smb.conf 檔案,然後在檔案的最後加入下面這幾行後存檔離開。


[public]
path = /home/jkchang # 這個是要分享的資料夾路徑
available = yes
valid users = jkchang #可以使用這個資料夾的使用者,要有 path 所指定的路徑的權限
read only = no
browseable = yes
public = yes
writable =yes

都設定好之後,來重新啟動 Samba Serve:
$ sudo service smbd restart

接著到 client 端,如果上面設定都正確,瀏覽網路應該會看到Samba所分享的主機名稱:
接著先按下 連接身份,選擇 註冊使用者,輸入名稱和密碼:
(名稱必須是剛剛在  /etc/samba/smb.conf 檔案中所設定的)

也可以用 smb 協定來存取,例如,我的 samba 主機在 192.168.1.3,可以用
smb://192.168.1.3/public 來建立連線

 



2019年10月10日 星期四

OSX 刪除時光機快照檔案

有時候是不是會覺得 Mac 的磁碟恨快就不夠用了,用"關於這台Mac" 選單可以看到相關資訊:
再按下"管理":
如果系統的部分大於100G 那可能要檢查到底是什麼檔案佔據了磁碟空間。
其中,Time Machine 時光機造成的備份檔是最常見的。

當使用Time Machine自動備份但又沒有裝上備份碟,OSX系統會將備份檔案佇列成檔案
(Queue Backup files),可以用下面指令檢查並列出:
sudo tmutil listlocalsnapshots /

會需要等一段時間來顯示:
com.apple.TimeMachine.2019-10-09-113009

刪除備份檔案:
sudo tmutil deletelocalsnapshots 2019-10-09-113009

再來,可以下載 OmniDiskSweeper 免費軟體來查看每個目錄(下) 所佔的空間

執行後會掃描每一個目錄(含目錄下) 所戰的空間,方便使用者整理磁碟。



2019年10月9日 星期三

更改終端機標題 (termial title)

有時候終端機有多個連線,為了區別是哪個主機,在終端機的標題欄顯示多一點訊息會比較
方便,下面就介紹 ubuntu 和 Mac OSX 的設定方式:

1. ubuntu:
於個人目錄下的 .bashrc 最後加上
PROMPT_COMMAND='echo -ne "\033]0;`whoami`@$HOSTNAME\007"'


2. OSX:
於個人目錄下的 .profile 最後加上
 PROMPT_COMMAND='echo -ne "\033]0;`whoami`@`hostname -s`\007"'

這樣 terminal title 就會顯示當前的 hostname 和 user:



相關文件可參考:
 XTerm Control Sequences

2019年10月6日 星期日

Mac OSX 無法開啟未識別開發者應用程式

如果遇到 OSX 無法開啟未識別開發者應用程式得時候可以依下面步驟作一次,
以後都可以一勞永逸。(作業環境 OSX Mojave 10.14)

1. 先到「系統偏好設定」->「安全性與隱私權」->「一般」

這時候你會看到系統本身只允許App Store 和 App Store和已識別的開發者 這2個選項,
如果是個人開發的小軟體則會無法執行。

2. 開啟終端機,輸入 sudo -s 切喚到超級使用者,然後輸入:
spctl --master-disable

3. 回到 系統偏好設定 主選單,再選擇 安全性與隱私權 -> 一般,
這時候你會看到多了一個選項 : 任何來源,選擇這個選項並將鎖頭按下。
這樣就可以避開OSX檢查軟體來源了。

如果為了安全上考量只是一次性使用,那可以再執行指令:
 sudo spctl --master-enable

將任何來源的選項隱藏。