###### tags: `informatics` # linux notes ### ==SSH帳密連線== #### ---方法1 : 利用帳密連線方式登入server --- ```= #open firewall ufw enable && ufw allow 22 #要安裝 ssh server, 以下兩行指令都可以 apt install ssh //apt-get install openssh-server #安裝後可以修改一些 ssh 的設定, 如port, 密碼認證, root登入等 nano /etc/ssh/sshd_config Port 22 PermitRootLogin no -> 是否開放 root 登入 PasswordAuthentication yes #更改完存檔後記得重啟服務 /etc/init.d/ssh restart ``` #### ---方法2 : 利用憑證方式登入server --- ##### server端架設ssh ```= #open firewall ufw enable && ufw allow 22 #要安裝 ssh server, 以下兩行指令都可以 apt-get install ssh //apt-get install openssh-server #安裝後可以修改一些 ssh 的設定, 如port, 密碼認證, root登入等 nano /etc/ssh/sshd_config Port 22 PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no #更改完存檔後記得重啟服務 /etc/init.d/ssh restart ``` ##### ssh架設完後,需要把user public key資訊寫到server端對應使用者檔案 \(/home/user/.ssh/authorized_keys) ```= #先在server找到/user/.ssh/authorized_keys文件(若沒有則創建一個) #複製client的公鑰資訊到server的 /user/.ssh/authorized_keys文件中 or (ssh-copy-id -i {public_key.pub} -p 22 user@host) #可以到server端檢查是否成功寫入 nano /user/.ssh/authorized_keys ``` ##### 登入server ```= ssh -i {private_key} -p 22 user@host ``` ##### optional : 建立新的key pair ```= #user端產生新公鑰 ssh-keygen #產生檔案會放在 user端使用者的 .ssh 目錄 id_rsa.pub 為pub key id_rsa 為 private key ``` #### ---方法3 : ssh-setup自動化腳本 --- ```= #ssh.sh #!/bin/bash # auto-setup-ssh apt update ufw enable && ufw allow 22 apt install ssh -y echo 'Include /etc/ssh/sshd_config.d/*.conf KbdInteractiveAuthentication no UsePAM yes X11Forwarding yes PrintMotd no AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server Port 22 PubkeyAuthentication yes PasswordAuthentication no' > /etc/ssh/sshd_config /etc/init.d/ssh restart echo 'ssh setup done !' exit 0 ``` ### ==linux 更改使用者密碼== ##### ---需要sudo全限--- ``` passwd ``` ### ==linux 增加使用者== ##### ---ubuntu user管理,建立使用者、刪除使用者--- *需要root權限,所以要先切換到 root* ``` 新增使用者 adduser [username] 刪除使用者 userdel [username] ``` ``` 使用者檔案存放在/etc/passwd 使用tail指令來檢視/etc/passwd檔案 tail 從後面觀看,這個指令對比較長的檔案檢視比較方便。 指令:tail -[要觀看的行數] ``` ### ==linux 變更程式的權限== ``` r:可讀 w:可寫入 x:可執行 ``` ``` owner/group/others r w x r w x r w x 4 2 1 4 2 1 4 2 1 ``` ``` chmod 777 file ``` ### ==Droopy== ##### ---簡單的檔案分享server--- ``` 一、下載至/usr/bin並賦予執行權限 sudo wget -P /usr/bin http://stackp.online.fr/wp-content/uploads/droopy sudo chmod +x /usr/bin/droopy 二、在終端機中執行 droopy -d DIRECTORY -m MESSAGE -p PICTURE --dl PORT DIRECTORY 為接收上傳檔案的目錄 MESSAGE 為Droopy網頁上的宣言 若其中有空格請用單引號夾住整句 PICTURE 為Droopy網頁上代表自己的圖像 若有加 --dl 則分享該目錄中的檔案 若有加 PORT(通訊埠的埠號) 則使用該通訊埠 沒加則使用預設的8000 EX: droopy -d ~/share -m 'folder share' -p /share/ccc.jpg --dl 8888 若是無法執行 > whereis droopy > 並用nano開啟droopy >apt install python2 > #!/usr/bin/python修改為#!/usr/bin/python2 >表示採用Python2編譯 三、關閉droopy Ctrl+c ``` ### ==強制刪除 process== ``` sudo kill -KILL [process_ID] ``` ### ==ffmpeg 指令== ``` ffmpeg -i "[m3u8]" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 media.mp4 ``` ### ==port 占用== ##### ---找出誰占用並且kill--- *需要root權限,所以要先切換到 root* ``` netstat -ltnp | grep :[port] ``` ### ==內部防火牆設定== ##### ---先檢查防火牆狀態--- ``` sudo ufw status 檢查防火牆狀態 ------------------------------------------------ 啟用和停用防火牆 $ sudo ufw enable $ sudo ufw disable ------------------------------------------------ $ sudo ufw default allow 允許任何的連入要求 $ sudo ufw default deny 不允許任何的連入要求 ------------------------------------------------ 使用服務名稱 或 port來允許連入 <服務名稱請參考 /etc/services 檔案> $ sudo ufw allow [name] $ sudo ufw allow in [port] ------------------------------------------------ 使用 Port 號來拒絕連出到別台電腦的指定 Port 號 $ sudo ufw deny out [port] ------------------------------------------------ 使用 Port 號來拒絕接受指定 Port 號的 UDP 連入要求 $ sudo ufw deny in [port]/udp ------------------------------------------------ 刪除規則防火牆規則 $ sudo ufw status numbered (確認規則編號) $ sudo ufw delete 規則號碼 ------------------------------------------------ 啟用日誌記錄 如果想知道防火牆到底有沒有用或是規則有沒有達到效果的話 可以用下面的指令來啟用日誌功能,在啟用後,ufw 會把記 錄寫到 /var/log/ufw.log 日誌檔。 $ sudo ufw logging on ``` ### ==port 占用== ##### ---找出誰占用並且kill--- *需要root權限,所以要先切換到 root* ``` netstat -ltnp | grep :[port] ``` ### ==下載google drive 檔案== ##### ``` 取得檔案的 ID編號 如果是別人給的連結,可以找到像這樣的編碼,粗體的部分就是ID編號:https://drive.google.com/file/d/1TQYQYCoPtdXN2rQ1mR2jisjUztmOzfZr/view 如果是要下載自己雲端硬碟中的檔案,可以點兩下開啟半透明黑色預覽介面或是按「共用」-> 「透過連結共用」-> 複製連結。 接著網址或連結中就會有很像這樣的編碼,粗體的部分就是ID編號:https://drive.google.com/file/d/1ugOA150E29M-ff4xZQ-khZunpmh9fQiZ/view?usp=sharing 2. 使用指令下載。以100MB為分界,區分Google雲端硬碟檔案為大檔案 或 小檔案: 對於大檔案 wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=ID編號' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=ID編號" -O 下載後的檔名 && rm -rf /tmp/cookies.txt 對於小檔案 wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=ID編號' -O 下載後的檔名 把這段貼到Terminal中,就能用wget下載啦! ``` ### ==rsync 備份== ##### ---使用 rsync 遠端檔案同步與備份工具--- Linux上最常被用來複製與備份檔案的工具,它可以處理本機或遠端的檔案同步工作 ``` 1.安裝rsync $ sudo apt-get install rsync ------------------------------------- <rsync 參數 來源檔案 目的檔案> -v:verbose 模式,輸出比較詳細的訊息。 -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。 -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下 的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。 -z:啟用壓縮。自動將資料壓縮後再傳送, 並在遠端接收到資料後自動解壓縮,減少網路傳輸的資料量 -h:將數字以比較容易閱讀的格式輸出。 --progress : 可以即時顯示進度 ------------------------------------- 2.複製local端的檔案或目錄,到目標位置 執行第二次時,rsync就會自動跳過沒有變動的檔案 $ rsync -avh [filename or folder] [target folder] 特殊port (ex:port11) rsync -avzh --rsh='ssh -p11' [localfiles] root@ip:/remotebackup/ ------------------------------------- 3.遠端備份 (不同機器間備份) $ rsync -avzh [filename or folder] user@ip:[targetfolder] example: rsync -avzh /folder/ root@35.194.207.60:/backup/ ------------------------------------- 4.遠端的檔案備份至local端 $ rsync -avzh user@ip:[filename or folder] [target folder] example: rsync -avzh root@35.194.207.60:/folder /mybackup/ ------------------------------------- 5.限制網路頻寬 避免透過網路備份資料時,佔用太大的網路頻寬而影響正常的服務 加上 --bwlimit 指定資料傳輸的速度上限 example: rsync -avzh --bwlimit=100K root@ip:/folder /backup/ ------------------------------------- 6.自訂 SSH 連接埠 若遠端機器ssh連線非預設22,則須改port example: rsync -avzh -e 'ssh -p 123' /folder root@ip:/backup/ ------------------------------------- 7.同步刪除檔案 預設只會將來源端現存的檔案同步更新至目的端 (同步所有新增或修改的檔案),但是如果在來 源端有檔案被刪除的話,rsync 並不會主動刪 除目的端的檔案,這樣可以確保資料被勿刪時, 備份檔不會也跟著被刪除。 如果您想要讓 rsync 也同步將不存在於來源 端的檔案刪除的話,可以加上 --delete 參 數,如果沒有來源檔案只有新增、沒有減少的 話,它就跟一般的複製動作相同: $ rsync -avh --delete [folder/] [backup/] ------------------------------------- 備份特定檔案 ------------------------------------- rsync -avzh /home/clarkgcp root@34.138.89.69:~/backup/ ------------------------------------- ``` ### ==顯示外部ip== ``` #apt-get install curl #!curl ifconfig.me ``` ### ==檢查ubuntu版本== ``` lsb_release -a ``` ### ==Linux 更改檔案擁有者與群組,chown== ``` ``` https://blog.gtwang.org/linux/linux-chown-command-tutorial/ ### ==掛載硬碟== https://clay-atlas.com/blog/2020/01/16/linux-chinese-tutorial-mount-disk-uuid/ ```= (1)格式化 lsblk #可以確認你的硬碟是哪顆,然後接著進行分割。以下假設我們要將 sda 這顆硬碟進行分割。 fdisk /dev/sda 遇到 “Command (m for help): ” 時,輸入 “n” 開始分割。 如果只需要一個分割區,輸入 p 選擇 primary。 選擇 1 (預設分割區數量) 選擇開始的磁柱編號,可以直接使用預設值 選擇結束的磁柱編號,若要使用全部容量,可以直接使用預設值 輸入 w 儲存離開 接著格式化就簡單了: mkfs -t ext4 /dev/sda1 當然,要將 sda1 更改為你自己切割的磁碟。 ----------------------------------------------------------------- (2)mount disk #確認哪顆硬碟,與UUID blkid #建立資料夾 mkdir /home/data #加入開機掛載資訊 echo 'UUID="{Your UUID}" {/direction} ext4 defaults 0 0' >> /etc/fstab #mount mount /home/data #確認是否成功 df -h ``` ### == apt VS apt-get == |功能 |apt |apt-get | | -------- | -------- | -------- | |安裝套件 | apt install |apt-get install| |移除套件 | apt remove |apt-get remove| |升級 | apt update |apt-get update| |升級所有套件 | apt upgrade |apt-get upgrade| |升級所有套件(包含相關依賴)| apt full-upgrade|apt-get dist-upgrade| |搜尋套件 | apt search |apt-cache search| |顯示套件資訊| apt show |apt-cache show| |刪除不需要的依賴| apt autoremove |apt-get autoremove| |刪除不需要的配置| apt purge |apt-get purge| ``` du -chd 1 | sort -h /usr/bin/screen -dmS screenname /bin/bash /path-to-bashscript if ssh failed : sudo systemctl enable ssh.service /etc/init.d/ssh status /etc/init.d/ssh start /etc/init.d/ssh restart apt remove ssh --purge apt autoremove apt autoclean apt update sudo apt install gnome-power-manager sudo apt install upower sudo timedatectl set-timezone Asia/Taipei ``` du -chd 1 | sort -h