sshでリモートサーバーのフォルダをマウント

sshfsってのを使う。Ubuntuはaptitudeでインストール

$ aptitude install sshfs

MacはFUSE for macOS からFUSE for macOSとSSHFS for macOSをインストールすれば使えるようになる。

マウントは

$ sshfs [email protected]:path_to_remote_dir path_to_local_dir

でいける

アンマウントは

$ unmount mountpoint #Ubuntu
$ diskutil unmount mountpoint #Mac

参考:

sshが切れても標準出力を残す

screenを使うのが無難?

$ screen -S hoge
$ 何かコマンド
$ Ctrl+a c でウィンドウ作成
$ Ctrl+a " でウィンドウ選択
$ screen -ls でxxx.hogeとか出てくる
$ screen -d xxx で元のターミナル?に戻る
$ screen -r xxx でコマンドを行ってるウィンドウに戻る

ファイルのリアルタイム更新状況をチェック

tailとかlessとか使う

$ less +F hoge.log
$ tail -f hoge.log

lessはCtrl+Cで通常のlessに戻る Shift+fでリアルタイム更新チェックに戻る

参考:tail -fやtailfを使うのはやめてless +Fを使おう - Qiita

grepの良く使うオプション

行番号を表示

nオプションを使う

$ cat hoge | grep -n 'hoge'

前後数行を表示

前後3行なら

$ cat hoge | grep -3 'hoge'

参考: grepで該当する行の前後も一緒に表示するには

指定した文字列に当てはまらないもの

vオプションを使う

$ cat hoge | grep -v 'hoge'

出力に行番号を追加

linuxにはnlコマンドがある

hoge.txtの中身をこんな感じに

aaa
bbb
ccc
$ cat hoge.txt | nl nl -s ','
     1,aaa
     2,bbb
     c,ccc

こんな感じ。行頭の空白を消したい場合はsedと組み合わせる

$ cat hoge.txt | nl nl -s ',' | sed 's/^ *//g'
1,aaa
2,bbb
c,ccc

csvっぽく出来る

sedで良く使うメモ

sedはすぐ忘れる。

参考: + sed コマンド + sedコマンドで覚えておきたい使い方12個(+3個)

置換(文字列削除にも使える)

$ sed 's/正規表現/置換文字列/g'

行削除

$ sed '/正規表現/d'

指定行だけ表示

文字列の編集じゃないけど、便利。

$ sed -n 行番号p
$ sed -n 開始行番号,終了行番号p

アクセスログのIPアドレスを集計してみる

参考:Linux サーバーでお手軽にログの集計:こっそりと。 - livedoor Blog(ブログ)

Google Analyticsでリファラ無しの変なアクセスが増えたので、アクセスログからIPを集計してみた。 アクセスログの書式はLTSVでこんな感じ

time:07/Mar/2014:06:25:22 +0900       host::11.22.33.46       forwardedfor:-  req:GET / HTTP/1.1   status:200      size:1       referer:-ua:Mozilla/5.0 (***)      reqtime:0.777   cache:- runtime:-       vhost:hoge.fuga

なんか色々ソフト使うのとか面倒だったのでgrepとかawkでほげほげした。要はhost:11.22.33.44に当たる箇所を取り出して表示回数をまとめれば良い。

$ cat access.log | grep -v -i "bot" | grep "referer:-" | grep "status:200" | awk '{print $3}' | sort | uniq -c

{% include 'includes/ad-content.html' %}↲

軽くbot避けを入れてるけど、crawlerとかspiderとかを避けておくとより正確になるかも。 これだけだと一杯出てくるので100回以上アクセスあったIPだけ取り出してみた。

$ cat access.log | grep -v -i "bot" | grep "referer:-" | grep "status:200" | awk '{print $3}' | sort | uniq -c | grep "[0-9]\{3,\}\s"

ただ、最初の目的には最初の集計の方が役に立った。結局Bingのボットだったみたい。Analyticsではじけなかったアクセスがあったのかな。

大きなファイルを探す

例:100MB以上のファイルを探す

$ find path -size 100M

Windows共有フォルダをマウント

参考:Ubuntu から Windows の共有フォルダをマウントして利用する - Qiitaというかほぼそのまま

$ sudo aptitude install cifs-utils
$ sudo mkdir -p /mnt/windows
$ sudo mount -t cifs -o username=WindowsUsername,password=WindowsPassword //ServerNameOrIp/path/to/share /mnt/windows

ファイルのフルパス一覧を取得

参考:逆引きUNIXコマンド/ファイルのフルパス名を取得する方法 - Linuxと過ごす

単純なlsだとファイル名だけが一覧になるので、フルパスの一覧が欲しい場合は一工夫必要

$ ls -dF /path/to/dir/*
$ find `pwd` -maxdepth 1 -mindepth 1

SSHを使ってリモートでコマンド実行する

単純なコマンド実行

$ ssh [email protected] options... "command"

ローカルのファイルをリダイレクトしてリモートコマンドに使用する。

$ ssh [email protected] options... "command" < localfile

重複行を削除する

$ cat hoge | sort | uniq

参考:[Linux] sort と uniq をパイプでつないで重複行を削除する | CodeNote.net

文字列置換(sed)関連

一番最初にマッチしたものを置換

$ sed 1,/pattern/s/pattern/replace/

1は1行目からの意味。10行目から始めたければ10に変えるとか、数字はパターンにしても良い

$ sed /pattern from/,/pattern/s/pattern/replace/

一行目に文字列を追加する

$ sed -i hoge -e "1i fuga"

参考: sedにて一番最初にマッチしたモノだけを置換するには - 計算機と戯れる日々

ファイルを上書き保存

オプション -iを使う。一括でファイル上書きならこんな感じ

$ find . -name "*.html" | xargs sed -i -e s/hoge/fuga/

参考: sedでファイルを上書き保存

grepで該当行前後を表示する

$ cat hoge.txt | grep "fuga" -3 #前後3行
$ cat hoge.txt | grep "fuga" -B 3 #前3行
$ cat hoge.txt | grep "fuga" -A 3 #後3行

sshでポートフォワーディング

例えばPostgreSQLのポート5432をローカルの6542にポートフォワードする場合は

$ ssh -N -f -L 6543:localhost:5432 [email protected]

時刻調整

ntpをインストールする必要はない。Ubuntuの場合、ntpdate-debianコマンドがあればいける。ntpdateコマンドだとエラーが出た。

$ sudo ntpdate
no servers can be used, exiting
$ sudo ntpdate-debian
step time server xxx.xxx.xxx.xxx offset -914.392749 sec

参考:[SOLVED] ntpdate - No Servers

ntpサーバを指定するには/etc/default/ntpdateを変更する

NTP_USE_NTP_CONF=no
NTPSERVERS="ntp.nict.jp"

毎日のcronjobで動作させる

sudo cd /etc/cron.daily
sudo ln -s /etc/network/if-up.d/ntpdate ./ntpdate

でおk 参考:Ubuntu ntpdate 時刻合わせ - ガットポンポコ

windows共有フォルダをマウント

コマンドはこんな感じ

$ sudo aptitude install cifs-utils
$ sudo mount -t cifs -o username=Windowsユーザー名,password=Windowsパスワード,uid=Linuxユーザーid,gid=Linuxグループid //windows ip/path/to/share /mnt/path/to/share

こうしておくとファイルの編集も可能。uidとかgidが無いとrootで共有する。

linux(ubuntu)起動時に共有したい場合、fstabを編集する

//windows ip/path/to/share  /mnt/path/to/share  cifs  credentials=/home/username/.windowscredentials,uid=Linuxユーザーid,gid=Linuxグループid,iocharset=utf8  0  0

上のコマンドみたいにWindowsユーザー名、パスワードを入力してもいけるが、fstabは複数人から見ることが出来るので、ユーザーフォルダ内に認証用のファイルを作ってパスワードを隠す

/home/username/.windowscredentialsを次のようにして600で保存すればおk

username=Windowsユーザー名
password=Windowsパスワード

参考:MountWindowsSharesPermanently - Ubuntu Wiki

LANで利用されているIPアドレスを調べる

arp-scanコマンドを使う。 まずはインストール

$ sudo aptitude install arp-scan

使い方

$ sudo arp-scan -I eth0 -l

eth0はスキャンしたいネットワークアダプタ

csvからカラム切り出し

例としてhoge.csvの2カラム目を取り出す

$ cut -f 2 hoge.csv

この場合タブ区切り、カンマ区切りしたい場合は

$ cut -d , -f 2 hoge.csv

参考:逆引きUNIXコマンド/指定したフィールドを抜き出す - Linuxと過ごす

csvのソート

$ sort --field-separator=',' --key=2

こうやるとカンマ区切りのデータの2番目のカラムでソートしてくれる

数値でソートしたい場合は-nをオプションに加える

逆順の場合は--reverseをオプションに加える

参考:unix - Sort CSV file by column priority using the "sort" command - Stack Overflow

cronjobの一覧

$ crontab -l
$ sudo crontab -l -u username
$ ls /etc/cron.d
$ ls /etc/cron.hourly
$ ls /etc/cron.daily
$ ls /etc/cron.weekly
$ ls /etc/cron.monthly

これくらいチェックすればよさげ

iconvでエラーをスキップ

cオプションを付ければ良い

$ iconv -c -f SJIS -t UTF-8 hoge.txt

ip, gateway, DNSの手動設定

\/etc\/network\/interfaces

を編集する

auto eth0
iface eth0 inet static
address アドレス
netmask 255.255.255.0
gateway ゲートウェイ

dns-namaservers ネームサーバーのアドレス