1. よく使うor注目コマンド

・rm -rf directory :ディレクトリごと削除
・nano :使い勝手の良いエディタ
・at
 ・5分後にファイル実行
   at -f filename now + 5minute
 ・8時にファイル実行
   at -f filename 08:00
 ・コマンドを手動入力して5分後にコマンド実行
   at now + 5minute
	at>コマンドを入力 → 終わるにはctrl+D
 ・キューのジョブ確認はatq
 ・キューのジョブを消す
   atrm 番号(atqで確認可能)
・簡易ファイル送受信(netcast)
 送信側PC:nc -l 1234 < file
 受信側PC:nc ip 12345 > file


2. 変換

■ファイル名一括変換
rename "s/置換前文字列/置換後文字列/" 対象ファイル

■FLV to  MP3
ffmpeg -i s.flv -acodec copy s.mp3:flv変換
 →mp4の場合は -acodec copyを指定しない

■URLエンコーディング
echo 'url encode' | tr % = | nkf -mQ

■文字化け対策
env "LANG=en_US.UTF-8" 実行するコマンド

■imgファイルをvirtualbox形式に変換
VBoxManage convertfromraw -format VDI [filename].img [filename].vdi

■pdf jpeg変換
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r600 -sOutputFile=./image%04d.jpeg

■文字コード変換
・iconvコマンド
・find+xargs+nkf → すべてinstallされてる前提
 find -type f | xargs -n 10 nkf -w --overwrite
 →カレントディレクトリ下のファイルの文字コードをUTF8に
 →-typeの指定の箇所を、find -name '*.txt'、とすれば、テキストファイルに限定

3. 文字列・ファイル関連

■find関連
  ・find . -type f -exec コマンド '{}' \;
   →ピリオドはカレントディレクトリから検索の意味
   →type fは通常ファイルを指し、ディレクトリ等含まず
   →検索して、コマンドを実行。{}がfindの結果
  ・find . -type f -print0 | xargs -0 コマンド
   →同じく、検索して実行

・kcc -c ファイル名→文字コード調査
・cutコマンド:指定ファイル指定行指定文字の取り出し
  cut -c 1-10 ファイル名 (-cは文字単位というオプション)
・ftpで複数のhtmlファイルをUPするbashスクリプト
	USER="ユーザー名"
	PASS="パスワード"
	SERVER="FTPサーバー"

	#-i 複数のファイル転送時に対話型に動作しない / -n 初期接続時に自動ログインしない
	ftp -i -n << EOF
	open $SERVER
	user $USER $PASS
	lcd ローカルのカレントディレクトリ
	cd リモートのカレントディレクトリ
	ascii
	mput *.html
	bye
	EOF

■文字列検索関係
 →別記




4. マルチメディア

■plusaudioリスタート
 pluseaudio -k




5. グラフィック

■スクリーンキャプチャ
・printscreenキーによるのが一番簡単

・importコマンド
 e.g.指定範囲をキャプチャ
  import -frame filename.tif
 e.g.10秒後に全画面キャプチャ
  sleep 10;import -window root filename.tif

・xwdコマンド
 xwd -root > filename.xwd
 →パイプを通して他のソフトの連携が図りやすいかも




6. 高度なもの

■ダウンロード関連
・curl(apt-getする):高機能なwget的なもの
・エンコーディング:echo 壁紙 | nkf -wMQ | tr = %
・Web公開されているAPIの(Ajax的な)使い方
 http://ajax.googleapis.com/ajax/services/search/images?q=%E5%A3%81%E7%B4%99&v=1.0

■expect
 ・実行されているけれども、結果が表示されずにエラーが出るとエラー箇所を特定しにくい
 ・#はコメント
 ・プロンプトは、$や#でなく、]をexpectすると良い
 ・sshのパスワード要求はspawnでなくsend
 ・send ${変数}\nのように書く
 ・スペースの含むものは send fdsa\ \fdsalと""無しに書ける
 ・
	expect -c "
	・・・処理・・・
	expect eof
	"
	としてシェルスクリプトの中に書ける
 ・例
	#!/bin/bash

	SOURCE_FILE="/home/toshi/a.txt"
	KINDLE_IP="192.168.11.6"
	KINDLE_PASS="kindlepassword"

	expect -c "
	spawn scp ${SOURCE_FILE} root@${KINDLE_IP}:/mnt/us/documents
	expect "password:"
	send ${KINDLE_PASS}\n
	send "exit"\n
	spawn ssh root@${KINDLE_IP}
	expect "password:"
	send ${KINDLE_PASS}\n
	expect "]"
	send dbus-send\ \--system\ \/default\ \com.lab126.powerd.resuming\ \int32:1\n
	expect "]"
	send "exit"\n
	expect eof
	"

■cron
・service cron status
  →起動しているかどうか

■python
python -c $'...\n.....\n' param
→pythonのスクリプトを1行実行

■コアダンプ
・ulimit -c 10000000 コアダンプの出力設定
  gdb 実行ファイル コアダンプファイル として、
  gdb where

7. 情報表示

■ハードウェア情報一覧
・sudo lshw -short
・GUI用にlshw-gtkもある

■稼働中のプロセスを1行ずつ表示
 ps ax | less
 →スペースで頁めくり。qで終了

■プロセスツリー表示
 pstree

■デバイス関連
 lsusb -v:接続されているUSBデバイスの情報
 lsmod:ロードされているデバイスのモジュール(ドライバ)を表示

 dmesgと/var/log/messages
  →起動時のエラーチェック


■ドライバ関係のコマンド
 dmesg
  iwconfig
  lsusb

8. 基礎コマンド

 su - :rootに
 gksudo :GUIのsudo  
 ls	:ファイルリスト表示
   -l:パーミッションも
 pwd   :カレントディレクトリ表示
   -a:隠しファイルも

 chown :所有者変更
    :chown 変更後所有者 ファイル名
     e.g.所有者をred、グループをadminにしたいなら「chown red:admin public」とする

 cp	:コピーもと→先(ディレクトリがあれば、ディレクトリへ移動) :所有者変わる
   -r:ディレクトリの移動
   -p:所有者をコピーしたユーザーに「しない」

 mv	:ファイル移動、名前変更(移動元File→移動先ディレクトリ) :所有者変わらず
    :mv Filename Filenameで、リネーム
    
 rm	:削除
   -r:ディレクトリ削除
   -f:削除確認なし 

 mkdir:ディレクトリ作成					  :所有者は作成ユーザー

 chmod :パーミッション変更
     e.g. chmod 777 /var/samba/public
		=rwxrwxrwx
     ①
		r  	4  	読み出しの許可
		w 	2 	書き込みの許可
		x 	1 	実行の許可
		- 	0 	許可しない
		の和
     ②それを、
		所有者 グループ ほかのユーザー、の順で並べる

 ルートのパス忘れた
  →シングル・ユーザー・モードで起動(e.g.最初の画面でESC)
   、passwdコマンドで変更

・マニアックコマンド
 uname :OS情報表示
   -a :マシンタイプも

 cat /proc/cpuinfo :CPU
 cat /proc/meminfo :メモリ情報

 実行中のプロセス確認
   1. ps aux  →PID指定してkill出来る
   2. pstree -a
   3. top

 df:HDD要領

 netstat -ea ネットワーク接続状況

 whois ドメイン名
  dig @(問い合わせ先ネームサーバ) (確認したいドメイン) any


・ユーザー追加
 useradd
  passwd
 なお、loginさせないためには、useradd -s /sbin/nologin ××




・メール送信テスト等 
 メール送信
   1. telnet hogehoge.com 25
   2. mail from: hogehoge@fugafuga
   3. rcpt to: hogehoge@fugafuga
   4. data
   5. Subject: メールタイトル
   6. From: hogehoge@fugafuga
   7. To: hogehoge@fugafuga
   8. body
   9. 本文本文
  10. .

 メール受信
   1. telnet host 25
   2. ehlo host
   3. auth plain (base64パスワード文字列)
   4. mail from: hogehoge@fugafuga
   5. rcpt to: hogehoge@fugafuga
   6. data
   7. Subject: メールタイトル
   8. From: hogehoge@fugafuga
   9. To: hogehoge@fugafuga
  10. body
  11. 本文本文
  12. .

 HTTP
  telnet hogehoge.com 80
  GET /index.html HTTP/1.1
  Host: hogehoge.com
  User-Agent: telnetdayo
# (Enterもう一回)





9. bash文法

9.1. はじめに

shファイルの先頭に、
  #!/bin/bash
と記載して実行権限を付ければ、bashファイルとして実行される。


9.2. 変数

#■変数の扱い方と表示 - スペース厳禁/letは文字列の計算式を計算
val1=こんにちは
val2=5
echo ${val1}
let val2="${val2}+1"
echo ${val2}

val_mo1=hello
val_mo2=world
val_mo3=${val_mo1}${val_mo2}
echo ${val_mo3}


9.3. コマンドライン引数

#■引数$1〜、引数の数$#、スクリプトのPID$$
#$1 = "tmp"は引数が無いとエラーになる。∵型がよくわからないものと比較することに
# → "$1"とするとOK
echo ${1}は引数。${#}は引数の数。


9.4. 配列

val_a=(aa bb cc)
echo 要素:${val_a[0]}\配列${val_a}

9.5. コマンド実行結果の引用

#■実行結果を返す/$()は``と違い、入れ子にできる
echo lsの実行結果は、$(ls)です。


9.6. 条件分岐

#■if文 [はコマンドなので、[]内はスペース入れる
# -eq : = / -ne(nagation) : !=
# -lt(less than) : < / -le(less equal) : <=
# -gt > / -ge >=
val3=445
val4=445
if [ ${val3} -eq ${val4} ];then
	echo val3=val4
elif [ ${val3} -gt ${val4} ];then
	echo "val3 > val4"
else
	echo "val3 < val4"
fi

#■文字列比較
# -n:文字列が0より大きい/-z:文字列がゼロ/=や!=はそのまま
if [ -z $1 ];then
	echo 文字列比較:引数はありません。 
fi


9.7. 反復

#■ループ
val_it=0
while [ $val_it -lt  5 ];do
	echo ${val_it}
	let val_it="${val_it}+1"
done

#■配列とforループ
val_ita=""
val_a=(da ffdsa fda sf dsa)
for val_ita in ${val_a[@]};do
	echo ${val_ita}
done
echo ${val_a[@]}


9.8. その他小技

#■${0}はコマンド名、##*/で「先頭から最長一致で/まで」
${0##*/}



10. その他

・graph-easy
 →グラフを描くコマンドだが、ぶっちゃけOpenOfficeのDrawで事足りる
・データを同期: rsync -auvz --delete コピー元/ コピー先/
・make -n :メイクテスト
・nm:シンボリックテーブル表示
・ldd:プログラムにリンクされているライブラリを表示