2020年2月26日 星期三

Linux script 與 sorce scitp 差異

觀念
執行script時,預設使用子shell,若要在原shell執行,要使用
. script檔 或 source script檔
子shell會繼承父shell的環境變數,不會繼承父shell的變數
檢查目錄是否存在
檢查檔案是否存在
在 Shell Script 檔案和函式往往需要透過傳入參數來設定執行程式的內容。在 Shell Script 支援許多好用的特殊變數,可以方便我們透過使用變數方式來設置程式執行的流程。
指令描述註解
$0目前的檔案檔名
$nn 從 1 開始,代表第幾個參數
$#傳遞到程式或函式目前有幾個參數
$*傳遞到程式或函式所有參數
$@類似 $* 但是在被雙引號包含時有些許不同
$?上一個指令退出狀態或是函式的返回值
$$目前 process PID

於 Bash shell echo 輸入換行字元的寫法

echo 可以使用 -e 的參數,或者直接使用 printf 來達成,範例如下:
  1. $ echo -e "1\n2\n3\n4\n5\n" > filename
  2. $ printf "hello\nworld\n" > filename
  3. $ printf "\n" > filename
  4. $ cat filename # 就可以看到換行的內容
  5. printf "\n" | iconv -f utf-8 -t utf-16 >> filename # UTF-16 的 newline 換行
    printf "\n" | iconv -f utf-8 -t utf-16 | xxd 和 printf "\n" | xxd 可以看到 UTF-8 和 UTF-16 的差異
另外一種是把 \n 獨立出來,不過這不太好記憶,先列範例即可
  • $ echo $'hello\nworld' > filename
  • $ echo Hello$'\n'world > filename

解決shell指令碼中 echo 怎麼寫入換行到檔案




Linux echo命令25個實用案例


1. 前言
echo是一種最常用的與廣泛使用的內置於Linux的bash和C shell的命令,通常用在腳本語言和批處理文件中來在標準輸出或者文件中顯示一行文本或者字符串。




Linux echo命令
echo命令用於在shell中列印shell變量的值,或者直接輸出指定的字符串。linux的echo命令,在shell編程中極為常用, 在終端下列印變量value的時候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。




echo命令默認輸出
2. echo命令選項
echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。
該命令的一般格式為: echo [ -n ] 字符串
其中選項n表示輸出文字後不換行;字符串能加引號,也能不加引號。用echo命令輸出加引號的字符串時,將字符串原樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各字符串之間用一個空格分割。
功能說明:顯示文字。
語 法:echo [-ne][字符串]或 echo [--help][--version]
補充說明:echo會將輸入的字符串送往標準輸出。輸出的字符串間以空白字符隔開, 並在最後加上換行號。
參 數:-n 不要在最後自動換行
-e 若字符串中出現以下字符,則特別加以處理,而不會將它當成一般
文字輸出:
\a 發出警告聲;
\b 刪除前一個字符;
\c 最後不加上換行符號;
\f 換行但光標仍舊停留在原來的位置;
\n 換行且光標移至行首;
\r 光標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
\ 插入\字符;
\nnn 插入nnn(八進位)所代表的ASCII字符;
–help 顯示幫助
–version 顯示版本信息
3. echo使用實例演示
3.1 列印字符串string
Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用於字符串的輸出。命令格式:
[root@zcwyou ~]# echo string
您可以使用echo實現更複雜的輸出格式控制。
3.2 列印一段字符:
[root@zcwyou ~]# echo "It is a test"
這裡的雙引號完全可以省略,以下命令與上面實例效果一致:
[root@zcwyou ~]# echo It is a test




linux使用echo列印內容
3.3 結合轉義符
把特殊字符轉義為普通字符
[root@zcwyou ~]# echo "\"It is a test\""
結果將是:
"It is a test"




linux把特殊字符轉義為普通字符
同樣,雙引號也可以省略
3.4 查詢變量
read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變量
#!/bin/sh
read name 
echo "$name It is a test"
以上代碼保存為 zcwyou.sh,name接收標準輸入的變量,結果將是:
[root@zcwyou ~]# sh zcwyou.sh
OK #標準輸入
OK It is a test #輸出
3.5 換行
使用轉義符\n換行
[root@zcwyou ~]# echo -e "OK! \n" # -e
[root@zcwyou ~]# echo "It is a test"
輸出結果:
OK!
It is a test
3.6 輸出不換行
使用轉義符 \c 不換行
腳本文件內容:
#!/bin/sh
echo -e "OK! \c" # -e 
echo "It is a test"
輸出結果:
OK! It is a test
3.7 回顯結果定向至文件
[root@zcwyou ~]# echo "It is a test" > test.log
檢查:
cat test.log
3.8 原樣輸出字符串,不進行轉義或取變量(用單引號)
[root@zcwyou ~]# echo '$name\"'
輸出結果:
$name\"
3.9 顯示命令執行結果
[root@zcwyou ~]# echo `date`
注意: 這裡使用的是反引號 , 而不是單引號 '。 結果將顯示當前日期 Mon Nov 19 00:45:23 EST 2018 ¨K44K ¨G11G 會輸出下面的文本: hi hello ¨K45K 比如,聲明變量x並給它賦值為10。 ¨G12G 會輸出它的值: ¨G13G ¨K46K 『-e『後帶上'\b'會刪除字符間的所有空格。 注意: Linux中的選項『-e『扮演了轉義字符反斜線的翻譯器。 ¨G14G ¨K47K 『-e『後面的帶上『\n』行會在遇到的地方作為新的一行 ¨G15G ¨K48K 『-e『後面跟上『\t』會在空格間加上水平制表符。 ¨G16G 也可以同時使用換行『**\n**『與水平制表符『**\t**『 ¨G17G ¨K49K 『-e『後面跟上『\v』會加上垂直制表符。 ¨G18G 也可以同時使用換行『**\n**『與垂直制表符『**\v**『 ¨G19G 注意: 你可以按照你的需求連續使用兩個或者多個垂直制表符,水平制表符與換行符。 ¨K50K 『-e『後面跟上『\r』來指定輸出中的回車符。(LCTT 譯註:會覆寫行開頭的字符) ¨G20G ¨K51K 『-e『後面跟上『\c』會抑制輸出後面的字符並且最後不會換新行。 ¨G21G ¨K52K ¨G22G Tecmint is a community of Linux Nerds Tecmint is a community of Linux[root@zcwyou ~]# ¨K53K 『-e『後面跟上『\a』選項會聽到聲音警告。 ¨G23G 注意: 在你開始前,請先檢查你的音量設置。 ¨K54K ¨G24G ¨K55K 比如,讓我們假設你想要列印所有的『.jpeg『文件,使用下面的命令。 ¨G25G ¨K56K ¨G26G 檢查: ¨G27G ¨K57K ¨G28G This is red text ![linux echo輸出彩色文字](http://images.linuxrumen.com/linux/linuxecho/linuxecho05.png-1)\e[1;31m將顏色設置為紅色 \e[0m` 將顏色重新置回
顏色碼:重置=0,黑色=30,紅色=31,綠色=32,黃色=33,藍色=34,洋紅=35,青色=36,白色=37
3.24 使用echo設置輸出的背景色
[root@zcwyou ~]# echo -e "\e[1;42mGreed Background\e[0m"
Greed Background




linux echo使用echo設置輸出的背景色
顏色碼:重置=0,黑色=40,紅色=41,綠色=42,黃色=43,藍色=44,洋紅=45,青色=46,白色=47
3.25 使用echo輸出閃動的文字
[root@zcwyou ~]# echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
紅色數字處還有其他數字參數:0 關閉所有屬性、1 設置高亮度(加粗)、4 下劃線、5 閃爍、7 反顯、8 消隱




linux echo使用echo輸出閃動的文字

2020年2月25日 星期二

[Ubuntu 18.04] SAMBA 架設


1.  安裝 samba

    sudo apt-get install samba


2.  Samba使用的TCP連接埠為139(共享檔案用),UDP連接埠為137(名稱解析用)和138(少量資料傳遞用),

    可以使用以下指令來查看Samba是否有確實安裝成功。

    sudo netstat -tulnp | grep -e '[sn]mbd'

    netstat指令可以顯示出網路連線、路由表、介面統計、偽裝連線和多播成員的資訊。

    -l參數可以只顯示正在監聽中的連線。若使用netstat指令時都沒給任何參數的話,會忽略掉監聽中的連線。

    -t參數可以只顯示TCP連線。

    -u參數可以只顯示UDP連線。

    -t參數和-u參數一起用時就表示可以只顯示TCP和UDP連線。

    -n參數可以讓IP可以直接被輸出,而不需透過DNS反查其對應的網域名稱。-p參數可以顯示佔用連線的行程。



**  ufw (UncomplicatedFirewall) 是 Ubuntu 內建用來提供給使用者快速設定防火牆的程式,

    1. 啟用和停用防火牆

    下面這一行指令會啟用防火牆功能,而且,之後的每次開機都會自動載入和啟用的,要注意的是,如果沒有特別的設定的話,ufw 在啟用後,預設是會關閉所有的連入要求的哩 !

    $ sudo ufw enable

    如果要停用的話,則是用下面這一行,一旦停用後,也會同時停止在開機後自動載入的哩 !

    $ sudo ufw disable


    2. 允許和關閉連入

    下面的第一行指令會讓所有的連入要求都通過,等於防火牆對別台電腦的連接要求都接受的意思,而第二行指令則是不允許任何的連入要求,至於要用那一種,就要看你是先全部都打開再各別設定要封鎖的服務還是全部都先關閉,然後,再依需要來個別開通囉 !

    $ sudo ufw default allow

    $ sudo ufw default deny


    3. 新增防火牆規則

    下面幾種是常用的規則新增方式,都可適用在 deny 和 allow 的操作上。

    $ sudo ufw allow ssh  ( 使用服務名稱來允許連入,服務名稱請參考 /etc/services 檔案 )

    $ sudo ufw allow  in 8080   ( 使用 Port 號來允許連入 )

    $ sudo ufw deny out 4662  ( 使用 Port 號來拒絕連出到別台電腦的指定 Port 號 )

    $ sudo ufw deny in 4662/udp ( 使用 Port 號來拒絕接受指定 Port 號的 UDP 連入要求 )



    4. 刪除規則防火牆規則

    要刪除現有的規則的話,會比較麻煩一點點,因為,為了要能精準的刪除指定規則,所以,就需要明確的指出要刪除的規則的編號是多少,因此,可以要先用下面的第一行的指令的來查詢規則的編號,然後,才能用第三行的指令方式來刪除規則哩 !

    $ sudo ufw status numbered

    $ sudo ufw delete 規則號碼



    5. 啟用日誌記錄

    如果想知道防火牆到底有沒有用或是規則有沒有達到效果的話,可以用下面的指令來啟用日誌功能,在啟用後,ufw 會把記錄寫到 /var/log/ufw.log 日誌檔。

    $ sudo ufw logging on

    6. 檢視規則和狀態

    除了前面提到的「status numbered」選項之外,ufw 還提供有下面二種選項來供查看 ufw 的規則和狀態哩 !

    sudo ufw status

    sudo ufw status verbose


3.  編輯 /etc/samba/smb.conf

    [Sam shared]         

        comment = Sam Shared Files

        path = /home/sam/SMB_share

        guest ok = no

        browseable = yes

        writable = yes


    創建 Folder

    sudo smbpasswd -a sam

    chmod -R 777 SMB_share/



4.  設定好後必須讓Samba重新載入設定檔,可以使用以下指令:

    sudo /etc/init.d/samba restart

5.  用testparm檢查Samba的設定檔是否有誤

    testparm指令可以檢查Samba的設定檔是否有誤,不需要讓Samba重啟或是重新載入設定檔。


6.  以下指令可以查看Samba的連線狀態:

    sudo smbstatus



7.  掛載SMB

    先使用以下指令安裝CIFS的工具:

    sudo apt install cifs-utils



8.  接著就可以直接使用mount指令來手動掛載SMB了。檔案系統的部份必須使用cifs,指令格式如下:

    sudo mount -t cifs -o username=使用者名稱 //IP位址/區塊[/路徑] 掛載點

    mount指令的-o參數可以是檔案系統的選項設定,可以透過username和password的設定值來指定存取CIFS所需的使用者帳號和密碼。

    不過通常我們不會把密碼直接打在指令上,如果不設定password的話,mount指令會在之後才要求使用者輸入。



    例如:

    sudo mount -t cifs -o username=MagicLen '//192.168.56.201/Users' /mnt/windows/
 
    mount -t cifs -o username=sam,password=accusys //10.10.8.155/Sam_shared  /home/sam/Samba_share

    smbclient '//10.10.8.155/SMB_share' -U sam

    如果要自動掛載的話,可以在/etc/fstab設定檔中加上如以下格式的資料:

    //IP位址/區塊[/路徑] 掛載點 cifs username=使用者名稱,password=密碼 0 0


    以下是簡單的介紹...
 
    可以先用smbclient來檢視網芳的狀況...
 
    格式 : smbclient -L //[IP|hostname] [-U username]
 
    ex..
 
    smbclient -L //127.0.0.1 -U vieriking
 
 
 
    接下來有兩種方法可以連結,一種是用類似ftp方法,另外一種就是像mount一樣...
 
 
 
    ftp方式..
 
    格式 : smbclient '//[IP|hostname]/資源名稱' [-U username]
 
    ex..
 
    smbclient '//127.0.0.1/SHARE' -U vieriking
 
    Password:
 
    Domain=[xxxxx] OS=[Unix] Server=[Samba 3.0.28a]
 
    smb: \>
 
    接下來你就可以用類似ftp的方式來讀取或寫入資料囉~~



Samba使用的TCP連接埠為139(共享檔案用),UDP連接埠為137(名稱解析用)和138(少量資料傳遞用),可以使用以下指令來查看Samba是否有確實安裝成功。
sudo netstat -tulnp | grep -e '[sn]mbd'
ubuntu-server-18-04-samba
netstat指令可以顯示出網路連線、路由表、介面統計、偽裝連線和多播成員的資訊。-l參數可以只顯示正在監聽中的連線。若使用netstat指令時都沒給任何參數的話,會忽略掉監聽中的連線。-t參數可以只顯示TCP連線。-u參數可以只顯示UDP連線。-t參數和-u參數一起用時就表示可以只顯示TCP和UDP連線。-n參數可以讓IP可以直接被輸出,而不需透過DNS反查其對應的網域名稱。-p參數可以顯示佔用連線的行程。





2020年2月7日 星期五

Mac 10.15.3 kext driver cache update


Mac 10.15.3 kext driver cache update


1. 先確定 Boot security 關閉. 沒關只會讀取OS內建版.
2. 先將DRIVER 移到 /Library/Extensions/
3.  改變 driver  權限
    chown -R root:wheel ACS6x.kext/
    chmod -R 755 ACS6x.kext/
4. kextunload 現在版本 driver, 重新kextload 在 /Library/Extensions/ 下  driver.
5.   Update system cache.
         kextcache -i /

 舊版如 10.9 
1. 先將DRIVER 移到 /System/Library/Extensions/ 
3.  改變 driver  權限
    chown -R root:wheel ACS6x.kext/
    chmod -R 755 ACS6x.kext/
4. kextunload 現在版本 driver, 重新kextload 在 /System/Library/Extensions/ 下  driver.
5.   Update system cache.
sudo kextcache -i /
sudo kextcache -u /
sudo kextcache -system-caches 

or

touch  /System/Library/Extensions/