2011-04-07

[Linux] 列出指定位置下的所有資料夾

任務目標:

針對指定的路徑,列出底下所有的資料夾,但是不列出檔案

用 find
$ find . -type d

用 ls 跟 grep
$ ls -lR | grep '^d'

用 tree
$ tree -d

2011-02-18

[Linux] ln 製作 Linux 上的捷徑

ln - make links between files
要在 Linux 底下建立捷徑,只要用 ln 這個指令就 OK 啦


$ ln [參數] 來源檔案或資料夾 要建立的 link 名稱

沒有參數的時候是建立 hard link,沒辦法跨 file system,沒辦法 link directory
-s : symbolic link
-f : 要建立的 link 如果存在,會先移除掉再建立


比較常用的似乎是 symbolic link

在修改 link 裡的資料時,實際上就是去修改 link 所指向的原資料


鳥哥的 Linux 私房菜 - 實體連結與符號連結: ln
凍仁的 Ubuntu 筆記 - 【Ubuntu】ln - Linux 上的捷徑

2011-02-14

[Linux] 釋放虛擬記憶體

Linux Kernel 2.6.16 之後新加入了 drop caches 的機制,可以讓系統空出大量的記憶體

Freeing the page cache:
$ echo 1 > /proc/sys/vm/drop_caches
$ sysctl -w vm.drop_caches=1


Free dentries and inodes:
$ echo 2 > /proc/sys/vm/drop_caches

Free the page cache, dentries and the inodes:
$ echo 3 > /proc/sys/vm/drop_caches

這使 kernel 更勤於回收 cache
$ sysctl -w vm.vfs_cache_pressure=n (n > 100)

Tsung's Blog - Linux 手動回收 已經被 Cache 的記憶體

2011-01-20

[Linux] netstat 查看網路連線的好工具

netstat 可以讓你看到網路連線等等許多的資料,
不過也要會用才找的到你想要的東西...


鳥哥介紹的指令:
列出目前的路由表狀態,且以 IP 及 port number 顯示
$ netstat -rn

列出目前的所有網路連線狀態,使用 IP 與 port number
$ netstat -an

秀出目前已經啟動的網路服務
$ netstat -tulnp

觀察本機上頭所有的網路連線狀態
$ netstat -atunp


以下是其他實用的 netstat 語法,可以檢查主機的連線數量:
顯示主機上所有已建立的連線。
$ netstat -na

顯示所有 port 80 的連線,並把結果排序。
$ netstat -an | grep :80 | sort

列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
$ netstat -n -p|grep SYN_REC | wc -l

同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
$ netstat -n -p | grep SYN_REC | sort -u

列出發送 SYNC_REC 的所有 ip 地址。
$ netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

計算每一個 ip 在主機上建立的連線數量。
$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出從 TCP 或 UDP 連線到主機的 ip 的數量。
$ netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出每個 ip 建立的 ESTABLISHED 連線數量。
$ netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

列出每個 ip 建立的 port 80 連線數量。
$ netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1


鳥哥的 Linux 私房菜 - 察看本機的網路連線與後門: netstat
使用 netstat 找出不正常的連線 | Tsung's Blog

2010-12-28

[SSH] 以 key authentication 連 remote host

SSH


平常用 ssh 登入主機時,都是以打密碼的方式進行驗證
還有另一個驗證的方法,就是用 public key 跟 private key 來驗證

ssh-keygen 可以產生的 key 有三種
rsa1, rsa2, dsa
這邊以 rsa2 為例

ssh-keygen

openSSH 本身就有包含 ssh-keygen 這個產生 key 的工具
$ ssh-keygen -t rsa

ssh-keygen 會跑出以下訊息:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nyo/.ssh/id_rsa):
# 設定存放 key 的位置,按 enter 使用預設值
Enter passphrase (empty for no passphrase):
# 輸入 passpharse,想要不打密碼就登入的話,就讓它空白;或是打上 passpharse 之後再交由 ssh-agent 或任何 key 管理系統保管
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:18:XX:19:XX:XX:XX:XX:XX:13:XX:XX:05:XX:XX user@Ubuntu


現在在 ~/.ssh/ 裡我們有一把 public key (id_rsa.pub) 跟一把 private key (id_rsa)
只要把這兩隻 key 保管好,把 public key 放到你要連線的主機就可以了!

把 public key 放到你要連線的主機
$ scp ~/.ssh/id_rsa.pub username@server:~/
連到該主機上,這時你還是只能用打密碼的方式登入
$ ssh username@server
將 public key 加到系統預設放 public key 的地方:authorized_keys
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

設定完成,你再次登入該主機就是以 key authentication
如果你沒打 passphrase 就可以直接登入
有打 passphrase 就打 passphrase

之後如果還要連到其他的主機,只要再將原本的 public key 送到該主機的 authorized_keys 就可以了

SSH 免密碼登入 - JosephJ
ssh keygen 免輸入密碼 - Tsung