Unix 實用指令
推薦閱讀:
https://www.tecmint.com/10-most-dangerous-commands-you-should-never-execute-on-linux/
Here document
用來創建檔案,並且檔案內容為多行
cat <<EOF >> setup_env.sh
#!/bin/bash
export APP_NAME=$APP_NAME
export ENVIRONMENT=$ENVIRONMENT
export IMAGE_NAME=$IMAGE_NAME
EOF
或使用
echo "Line 1
Line 2
Line 3" > myfile.txt
查看 sh 執行期間的 log (xtrace)
When
set -o xtrace
command in a shell script or shell session enables the "xtrace" option, which is also known as "set -x." When this option is enabled, the shell displays each command before it is executed, along with the values of variables and the results of command substitutions.
#!/bin/bash
set -o xtrace
# Your script commands go here
# Disable xtrace when you no longer need it
set +o xtrace
讀取 Node.js 專案版本
VERSION=$(node -p "require('./package.json').version")
移除包含檔案的目錄
sudo rm -rf folderName
或是Rf
無法使用cat組合檔案內容,產生permission deny時
sudo bash -c 'cat certificate.crt ca_bundle.crt >> bundle.crt'
Debian相關筆記
更改網路: /etc/network/interfaces
其中需設定如下: 1.ip 2.netmask 3. gateway
之後重啟網路: /etc/init.d/networking restart
apt-get update 之 url 位置: vim /etc/apt/sources.list
dns位置 vim /etc/resolv.conf 範例:nameserver 192.168.0.1
----------------
apt-get update後出現public key問題
使用如下指令加入key
($key為其error顯示的key號碼)
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
如果出現一些lib版本不符合則輸入 apt-get -f install
目前nginx無法安裝 但可安裝apache2 (apt-get apache2)
----------------
使用git:
直接輸入apt-get install git
之後git clone時可能會出現不信任憑證的錯誤
輸入以下即可
git config --global http.sslverify false
之後git clone可正常執行
搜尋資料夾
find / -name "dir-name-here"
http://www.cyberciti.biz/faq/howto-find-a-directory-linux-command/
查看現在占用的PORT
sudo netstat -tulpn
OSX
lsof -nPi -sTCP:LISTEN
netstat -an | grep LISTEN
找出特定port的PID
lsof -i :port
(以下為給windows使用並可關閉指定port的process )
C:\Users\username>netstat -o -n -a | findstr 0.0:3000
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
C:\Users\username>taskkill /F /PID 3116
複製資料夾並移動
記得先mkdir
sudo cp -R ~/Desktop/um1215-webclient/ ./um1215-webclient
創建多個路徑下的資料夾
如果不存在都會創建
mkdir -p
打開當前資料夾
open .
移動檔案,或是更改檔案名稱
mv <source> <dist>
上傳檔案
scp -i ~/Downloads/pem1.pem /path/file1 ubuntu@ec2-13-112-175-93.ap-northeast-1.compute.amazonaws.com:~/home
上傳資料夾(加上-r)
scp -i ~/Downloads/pem1.pem -r ./dist ubuntu@ec2-13-112-175-93.ap-northeast-1.compute.amazonaws.com:~/dist
切換當前使用者
sudo su <username>
加入環境變數
Mac
假設原本要指定完整路徑才可執行檔案,可直接把他加入環境變數的PATH中
export PATH=/Volumes/FFmpeg\ 83544-g965f35b:$PATH
但這樣會在重啟terminal後變數就消失,並且把原本變數覆蓋,解決方法為加入bashrc
如使用zsh則是~/.zshrc
寫入path如下
export PATH=/usr/local/bin:/usr/local/sbin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/Volumes/FFmpeg\ 83544-g965f35b
記得是用 : 分隔
之後重啟zsh
. ~/.zshrc
Linux
但Linux的環境變數路徑可能寫在~/.profile,~/.bashrc或是 ~/.bash_profile
可參考此篇文章http://www.yunweipai.com/archives/2305.html
解決方法:
1.先輸入echo $PATH
現在的所有路徑變數,然後先複製起來
2.輸入~/.bashrc
在開頭寫export
空一格把剛才的貼上,最後加上:
然後加上你要加上的路徑及可
e.g.
export PATH=/home/eason/bin:/home/eason/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/eason/Desktop/bitcoin-0.14.1/bin
之後Reload 設定即可
source ~/.bashrc
列出資料夾裡面的大容量檔案
Linux 與 macOS:
sudo du -sh ./* | sort -h
或是
du -a * | sort -r -n | head -10
在mac中通常
~/Library/Caches/
會需刪除以及刪除 docker images
docker system prune -a
Windows :
forfiles /S /M * /C "cmd /c if @fsize GEQ 1073741824 echo @path"
或是 ( 推薦 )
powershell -command "$fso = new-object -com Scripting.FileSystemObject; gci -Directory | select @{l='Size'; e={$fso.GetFolder($_.FullName).Size}},FullName | sort Size -Descending | ft @{l='Size [MB]'; e={'{0:N2} ' -f ($_.Size / 1MB)}},FullName"
找出當前資料夾的絕對路徑
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
搜尋檔案
http://www.techradar.com/how-to/computing/apple/terminal-101-using-the-find-command-1305633
/
意思為搜尋整台電腦,也可指定路徑
sudo find / -name "eng.traineddata"
順序執行script
各個指令後加入;
,如果要同時執行則是&
刪除遠端的目錄但不刪除本地
git rm --cached <filename>
git rm --cached -r <dir_name>
git commit -m "Removed folder from repository"
git push origin master
讓程式在背景跑
有時沒加sudo關掉後會斷了
或是記得執行nohub後要先ctrl+c離開然後再關閉視窗
sudo nohup <command> &
功能是接到任何離開SIGHUP訊號都不會離開 並且會產生log文件(nohup.out)
OSX設定全域變數
vim /etc/paths
同步檔案
scp
scp -i private_key your_username@remotehost.edu:foobar.txt /some/local/directory
rsync
rsync --progress -r --exclude "node_modules/" --exclude ".*/" -e "ssh -i ~/Downloads/pem1.pem" ubuntu@ec2-52-198-155-128.ap-northeast-1.compute.amazonaws.com:/home/ubuntu/ ./
rsync可參考 https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/
更改螢幕解析度
Windows
下載nircmd,之後 cd 到執行檔目錄
nircmd.exe setdisplay 1920 1080 32
修改Domain對應IP
OSX:
sudo vim /private/etc/hosts
然後記得重整DNS cache
sudo dscacheutil -flushcache
https://www.inmotionhosting.com/support/website/how-to/how-to-edit-your-hosts-file-on-a-mac
尋找檔案路徑
sudo find / -name <檔案名稱>
列出所有PID
ps -A
或是
ps aux
開啟資料夾權限
sudo chmod -R 777 /Users//...
-R可開啟該資料夾底下所有檔案權限
查看持續更新的 log
-f 參數會持續更新顯示畫面
tail -f filename
建立別名
alias c='echo cc'
之後輸入 c 就會執行
echo cc
查看檔案 LESS
less 可以上下滾動,並且不會修改到檔案
less <filename>
取得參數 xargs
將前面的參數用 pipeline 傳給 xargs,然後用 less 查看
echo ./test.txt | xargs less
或是
echo a b c d e f | xargs
設置資源限制 Cgroup
建立 high 群組,cpu share 設為 2048
$ sudo mkdir /sys/fs/cgroup/cpu/high
$ sudo chown behappy:users -R /sys/fs/cgroup/cpu/high
$ echo 2048 > /sys/fs/cgroup/cpu/high/cpu.shares
http://guildwar23.blogspot.com/2013/01/linux-control-group.html
查詢網路傳送封包路徑與掉包
brew install mtr
sudo mtr google.com
記得要用sudo

SSH tunnel
當你想要連線檔遠端電腦網路環境下的其他內網主機時,可以用 tunnel
以下假設想要連線到遠端電腦網域的 http://192.168.95.90:9090/ 為例子
ssh -NfD 1080 <遠端server ip>
用chrome 開啟
open --new -a "Google Chrome Canary" --args --proxy-server="socks5://localhost:1080" http://192.168.95.90:9090/
google chrome 正常版通常會阻擋 loopback ,建議用 canary 版本
https://superuser.com/questions/1441133/google-chrome-ignorning-localhost-for-socks5-proxy
-N : 不執行任何指令 -f : 在背景執行 -L : 將 local port 轉向 -R : 將 remote port 轉向 -D : socks proxy
SSH 自動輸入密碼
brew install hudochenkov/sshpass/sshpass
sshpass -p my_password ssh m_username@hostname
在本機下遠端指令
sshpass -p testpass ssh admin@192.168.4.125 "cd testt && git pull origin master && pm2 restart all"
Last updated
Was this helpful?