「bash」の編集履歴(バックアップ)一覧はこちら
「bash」(2011/03/04 (金) 03:56:43) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
[http://x68000.q-e-d.net/~68user/unix/genre.html#genre1 ジャンル別UNIXコマンド一覧] システムコールなどの解説もあり。
[http://www.c.csce.kyushu-u.ac.jp/~seiichirou/wiki/index.php?bash%2Cawk%2Csed (九大) bash,awk,sed スキルアップ輪講]
[http://www15.wind.ne.jp/~ray7/linux/basic.htm Linux便利帳]
sh は bash
csh は違う系列
----
== 3つのクオーテーション ==
"$var" : 無くても変わらない。スペースを含むときに1つの文字列として認識させるのに使う。
'$var' : メタキャラクタとか変数指定子$の働きを殺す。
`ls -a` : コマンドを囲んで,その出力を値に持つ。パイプでは対応できない複雑な引数のときに活躍。
'''Ex. '''
バッククオーテーションは grep などと連携して威力無限大
> tar hoge.tar.gz `ls -F | egrep [^*/~]`
== メタキャラクタ ==
*の役割が正規表現と違うので注意!
* : 任意文字列
? : 任意1文字
[a-z] : 指定された中から任意の1文字
{hoge,hage,tako} : 指定された文字列の中から任意のどれか
== 正規表現 ==
sed, grep, perl, ruby などで使用
* は,直前の文字の0回以上の繰り返しになる。
^ : 行頭
$ : 行末
[...] : いずれか1文字
[^...] : 禁止文字
'''or検索'''
grep "one|two|three"
grep -e "one" -e "two" -e "three"
'''マッチしたものを表示しない'''
grep -v ".eps$|.o$|~$"
----
== 所有者と権限 ==
'''所有者とパーミッションの表示'''
> ls -l
'''実行パーミッション'''
> chmod 755 <hoge>
'''所有者の変更'''
> chown owner_name file_name
> chown -R owner_name dir_name
----
== プロセス管理 ==
ジョブというのは,例えばパイプとかでつないで1機能をなしているプロセスのまとまりのこと。
^Z による中断とか,& 付きの実行とかは,要するに bg してることになる。
===間違って ^Z で Suspended してしまったのを復活させたい。===
> ^Z # 中断
> jobs # まず落ち着いてジョブの番号を調べる。
[1] - Suspended ほげほげ
[2] + Suspended (tty output) emacs なんとか
'''思い切って殺す'''
> kill %2
'''復活させる'''
> fg %1
----
== シェルスクリプトを通常のプログラムのように実行させる ==
'''hoge.sh'''
> #!/bin/sh ←スクリプトを実行するプログラムのパスを書いておく。
> (スクリプト)
'''実行方法'''
> chmod u+x hoge.sh ←実行属性を付ける。
> ./hoge.sh
'''Cf. '''
コマンドから実行するときは #! も chmod も不要。
> sh hoge.sh
のみでおk
----
== 変数 ==
'''代入'''
> var=val
'''参照'''
> echo $var
実際には,$ は変数の内容で'''置き換える'''演算子
'''スクリプト実行時にもらった変数'''
$1,$2,...で指定できる。
'''ちょっと削る'''
fpath=foo/var/baz
echo ${fpath%/*} -> 後ろから match する min 部分を削る。 -> foo/var
echo ${fpath%%/*} -> 後ろから match する max 部分を削る。 -> foo
echo ${fpath#*/} -> 前から match する min 部分を削る。 -> var/baz
echo ${fpath##*/} -> 前から match する max 部分を削る。 -> baz
----
== 制御 ==
改行はむやみやたらに入れられない。セミコロンで置き換えられる。
機能語との間のスペースも必ず「1つ」必要なので注意!
'''if文'''
> if <式>
> then <なにがし>
> else <それがし>
> fi
'''Ex. ディレクトリが無ければ作る'''
> if [ ! -d hoge/hage]; then mkdir -p hoge/hage; fi
'''for文'''
for <target> in <list>
do <command>
done
'''Ex. .txt を .doc に一括変更'''
> for file in *.txt; do
> mv $file ${file%.txt}.doc; # %なんとか ってのは,マッチした尻を削る命令
> done
'''注. ファイル名の一括変更はコマンド一発'''
> rename *.txt *.doc
== 一括操作 ==
'''階層ディレクトリおっぴろげ'''
> ls -R
'''複数の下位ディレクトリに散在する cpp と hpp から検索'''
> grep hoge */*pp
'''hoge.* を hage.* に変える。'''
for F in *; do mv $F ${F/hoge/hage}; done ←${変数名/置換対象/置換文字列}の順番
'''複数ファイルに含まれる文字列 hoge を hage に置換'''
1. grep hoge *pp で確認
2. for F in *; do cp $F $F.bak; sed -e "s/hoge/hage/g" $F.bak > $F; done
(.bakはあとで消す。.bak を経由しないと上手くいかなかった!)
----
== 印刷 ==
片面白黒(標準)
lpr
lpr -Pps1
両面白黒
lpr -Pps1d
lpr -C,dup
両面白黒 短辺綴じ
lpr -Pps1t
lpr -C,dup,tumble
片面カラー
lpr -Pcps1
両面カラー
lpr -Pcps1d
lpr -Pcps1-duplex
両面カラー 短辺綴じ
lpr -Pcps1t
== マウント ==
マウントしたらアンマウントを忘れずに!
> umount/mnt/hoge
===CD/DVD===
===HDD(IDE devices)===
> mount /dev/hdb1 /mnt/hdd
===Image(.iso)===
> mount -o loop ***.iso /mnt/image
> cd /mnt/image
======
----
== アーカイブ ==
=== 圧縮 ===
> tar zcvf hoge.tar.gz (圧縮するターゲット列挙)
> zip hoge.zip (圧縮するターゲット列挙)
===解凍===
tar の解凍先はデフォルトでカレントディレクトリなので、
1. 解凍したい場所に移動してからファイルを指定する。
2. -C <解凍先> オプションを漬ける。
> tar zxvf hoge.''tar.gz''
> bzip2 -dc hoge.''bz2''
> unzip hoge.''zip''
> tar jxvf hoge.''tar.bz2''
> lha e hoge.''lzh''
----
== ファイル操作 ==
'''ファイルの種類を調べる。'''
> file hoge
'''ファイルの詳細な情報を調べる。'''
> stat hoge
'''登録されているコマンドのパスを調べる。'''
> which hoge
----
== ネットワーク ==
誰が入ってるか見る
who
== cygwinから入る ==
> startx してから入る
=== sshで接続 ===
> ssh [ユーザ名]@むにゃむにゃ
> ( login )
> ruptime で空いてるマシン確認
> ssh [マシン名] で入る
> ( 作業ディレクトリに移動 )
> screen に入ることを忘れずに!
=== 自宅からうp ===
ssh でリモートに入ってしまわないこと!
> scp [ローカルのファイル] [ユーザ名]@[アドレス]:[コピー先のファイル名]
----
== 入出力 ==
=== redirection ===
入出力先を変えること。
'''tako.txtに出力'''
> ./a.out > tako.txt
> ./a.out >> tako.txt # こっちは追加モード
'''hage.datから入力'''
> ./a.out < hage.dat
'''応用. ファイルコピー'''
> cat < original.txt > copy.txt
'''標準エラー出力先の変更'''
> ./a.out 2> err.log
'''STDOUTとSTDERRを同じファイルに出力'''
> ./a.out &> output.log
=== pipe ===
左から順に実行される。
左からの出力を右の入力に渡していく。
> command1 | command2 | command3 | ...
----
'''現在地を表示'''
> pwd
=== 時間計測 ===
> time <command>
real : 実行にかかった実時間
user : ユーザーモードだった時間(種々の演算やメモリアクセス)
sys : カーネルモードだった時間(システムコール)
rem.
real = user + sys + ディスクI/Oの時間
----
===情報の表示===
'''画面描画の詳細を表示'''
> xrandr
'''Xの設定を表示'''
> cat /etc/X11/xorg.conf
システムの構成が分かる。
'''メモリ使用状況を表示'''
> free
> top (リアルタイム)
'''現在ログインしている人を表示'''
> who
'''カレントディレクトリのアドレスを表示'''
> pwd
'''CPUの情報を表示'''
> cat /proc/cpuinfo
( /proc/ には,他にも meminfo などがある。)
'''ホスト名を表示'''
> hostname
'''IPアドレスを調べる'''
> ifconfig
'''システムの情報を表示'''
> dmesg
'''カーネルの情報を表示'''
> uname -a
'''デバイスの情報を調べる'''
> lspci ←PCIの情報
> lsusb ←USBの情報
==インストール==
===yum===
> yum install hogehoge
===sourceからインストール===
> ./configure --prefix=/usr/local; make; su
> make install
===パスを通す===
~/.bashrc を書き換える。
'''一時的な方法'''
> export PATH=/usr/local/hoge:$PATH
'''全ユーザーに適用'''
/etc/profile.d/hoge.sh を作る。
'''ライブラリパスは別に作る'''
> export LD_LIBRARY_PATH=/usr/local/lib
===オリジナルコマンド===
> alias hoge='echo "hage"'
> hoge
→ hage
.bashrc にでも書けば毎回使える。
[http://x68000.q-e-d.net/~68user/unix/genre.html#genre1 ジャンル別UNIXコマンド一覧] システムコールなどの解説もあり。
[http://www.c.csce.kyushu-u.ac.jp/~seiichirou/wiki/index.php?bash%2Cawk%2Csed (九大) bash,awk,sed スキルアップ輪講]
[http://www15.wind.ne.jp/~ray7/linux/basic.htm Linux便利帳]
sh は bash
csh は違う系列
----
== 3つのクオーテーション ==
"$var" : 無くても変わらない。スペースを含むときに1つの文字列として認識させるのに使う。
'$var' : メタキャラクタとか変数指定子$の働きを殺す。
`ls -a` : コマンドを囲んで,その出力を値に持つ。パイプでは対応できない複雑な引数のときに活躍。
'''Ex. '''
バッククオーテーションは grep などと連携して威力無限大
> tar hoge.tar.gz `ls -F | egrep [^*/~]`
== メタキャラクタ ==
*の役割が正規表現と違うので注意!
* : 任意文字列
? : 任意1文字
[a-z] : 指定された中から任意の1文字
{hoge,hage,tako} : 指定された文字列の中から任意のどれか
== 正規表現 ==
sed, grep, perl, ruby などで使用
* は,直前の文字の0回以上の繰り返しになる。
^ : 行頭
$ : 行末
[...] : いずれか1文字
[^...] : 禁止文字
'''or検索'''
grep "one|two|three"
grep -e "one" -e "two" -e "three"
'''マッチしたものを表示しない'''
grep -v ".eps$|.o$|~$"
----
== 所有者と権限 ==
'''所有者とパーミッションの表示'''
> ls -l
'''実行パーミッション'''
> chmod 755 <hoge>
'''所有者の変更'''
> chown owner_name file_name
> chown -R owner_name dir_name
----
== プロセス管理 ==
ジョブというのは,例えばパイプとかでつないで1機能をなしているプロセスのまとまりのこと。
^Z による中断とか,& 付きの実行とかは,要するに bg してることになる。
===間違って ^Z で Suspended してしまったのを復活させたい。===
> ^Z # 中断
> jobs # まず落ち着いてジョブの番号を調べる。
[1] - Suspended ほげほげ
[2] + Suspended (tty output) emacs なんとか
'''思い切って殺す'''
> kill %2
'''復活させる'''
> fg %1
----
== シェルスクリプトを通常のプログラムのように実行させる ==
'''hoge.sh'''
> #!/bin/sh ←スクリプトを実行するプログラムのパスを書いておく。
> (スクリプト)
'''実行方法'''
> chmod u+x hoge.sh ←実行属性を付ける。
> ./hoge.sh
'''Cf. '''
コマンドから実行するときは #! も chmod も不要。
> sh hoge.sh
のみでおk
----
== 変数 ==
'''代入'''
> var=val
'''参照'''
> echo $var
実際には,$ は変数の内容で'''置き換える'''演算子
'''スクリプト実行時にもらった変数'''
$1,$2,...で指定できる。
'''ちょっと削る'''
fpath=foo/var/baz
echo ${fpath%/*} -> 後ろから match する min 部分を削る。 -> foo/var
echo ${fpath%%/*} -> 後ろから match する max 部分を削る。 -> foo
echo ${fpath#*/} -> 前から match する min 部分を削る。 -> var/baz
echo ${fpath##*/} -> 前から match する max 部分を削る。 -> baz
----
== 制御 ==
改行はむやみやたらに入れられない。セミコロンで置き換えられる。
機能語との間のスペースも必ず「1つ」必要なので注意!
'''if文'''
> if <式>
> then <なにがし>
> else <それがし>
> fi
'''Ex. ディレクトリが無ければ作る'''
> if [ ! -d hoge/hage]; then mkdir -p hoge/hage; fi
'''for文'''
for <target> in <list>
do <command>
done
'''Ex. .txt を .doc に一括変更'''
> for file in *.txt; do
> mv $file ${file%.txt}.doc; # %なんとか ってのは,マッチした尻を削る命令
> done
'''注. ファイル名の一括変更はコマンド一発'''
> rename *.txt *.doc
== 一括操作 ==
'''階層ディレクトリおっぴろげ'''
> ls -R
'''複数の下位ディレクトリに散在する cpp と hpp から検索'''
> grep hoge */*pp
'''hoge.* を hage.* に変える。'''
for F in *; do mv $F ${F/hoge/hage}; done ←${変数名/置換対象/置換文字列}の順番
'''複数ファイルに含まれる文字列 hoge を hage に置換'''
1. grep hoge *pp で確認
2. for F in *; do cp $F $F.bak; sed -e "s/hoge/hage/g" $F.bak > $F; done
(.bakはあとで消す。.bak を経由しないと上手くいかなかった!)
----
== 印刷 ==
片面白黒(標準)
lpr
lpr -Pps1
両面白黒
lpr -Pps1d
lpr -C,dup
両面白黒 短辺綴じ
lpr -Pps1t
lpr -C,dup,tumble
片面カラー
lpr -Pcps1
両面カラー
lpr -Pcps1d
lpr -Pcps1-duplex
両面カラー 短辺綴じ
lpr -Pcps1t
== マウント ==
マウントしたらアンマウントを忘れずに!
> umount/mnt/hoge
===CD/DVD===
===HDD(IDE devices)===
> mount /dev/hdb1 /mnt/hdd
===Image(.iso)===
> mount -o loop ***.iso /mnt/image
> cd /mnt/image
======
----
== アーカイブ ==
=== 圧縮 ===
> tar zcvf hoge.tar.gz (圧縮するターゲット列挙)
> zip hoge.zip (圧縮するターゲット列挙)
===解凍===
tar の解凍先はデフォルトでカレントディレクトリなので、
1. 解凍したい場所に移動してからファイルを指定する。
2. -C <解凍先> オプションを漬ける。
> tar zxvf hoge.''tar.gz''
> bzip2 -dc hoge.''bz2''
> unzip hoge.''zip''
> tar jxvf hoge.''tar.bz2''
> lha e hoge.''lzh''
----
== ファイル操作 ==
'''ファイルの種類を調べる。'''
> file hoge
'''ファイルの詳細な情報を調べる。'''
> stat hoge
'''登録されているコマンドのパスを調べる。'''
> which hoge
== 画像フォーマット変換 ==
Imagemagicを使う。ただしコマンド名は convert
'''Ex. epsをpngに変換'''
> convert hoge.eps hage.png
詳しくは[http://www.proton.jp/main/apps/imagemagick.html ココ]など参照
----
== ネットワーク ==
誰が入ってるか見る
who
== cygwinから入る ==
> startx してから入る
=== sshで接続 ===
> ssh [ユーザ名]@むにゃむにゃ
> ( login )
> ruptime で空いてるマシン確認
> ssh [マシン名] で入る
> ( 作業ディレクトリに移動 )
> screen に入ることを忘れずに!
=== 自宅からうp ===
ssh でリモートに入ってしまわないこと!
> scp [ローカルのファイル] [ユーザ名]@[アドレス]:[コピー先のファイル名]
----
== 入出力 ==
=== redirection ===
入出力先を変えること。
'''tako.txtに出力'''
> ./a.out > tako.txt
> ./a.out >> tako.txt # こっちは追加モード
'''hage.datから入力'''
> ./a.out < hage.dat
'''応用. ファイルコピー'''
> cat < original.txt > copy.txt
'''標準エラー出力先の変更'''
> ./a.out 2> err.log
'''STDOUTとSTDERRを同じファイルに出力'''
> ./a.out &> output.log
=== pipe ===
左から順に実行される。
左からの出力を右の入力に渡していく。
> command1 | command2 | command3 | ...
----
'''現在地を表示'''
> pwd
=== 時間計測 ===
> time <command>
real : 実行にかかった実時間
user : ユーザーモードだった時間(種々の演算やメモリアクセス)
sys : カーネルモードだった時間(システムコール)
rem.
real = user + sys + ディスクI/Oの時間
----
===情報の表示===
'''画面描画の詳細を表示'''
> xrandr
'''Xの設定を表示'''
> cat /etc/X11/xorg.conf
システムの構成が分かる。
'''メモリ使用状況を表示'''
> free
> top (リアルタイム)
'''現在ログインしている人を表示'''
> who
'''カレントディレクトリのアドレスを表示'''
> pwd
'''CPUの情報を表示'''
> cat /proc/cpuinfo
( /proc/ には,他にも meminfo などがある。)
'''ホスト名を表示'''
> hostname
'''IPアドレスを調べる'''
> ifconfig
'''システムの情報を表示'''
> dmesg
'''カーネルの情報を表示'''
> uname -a
'''デバイスの情報を調べる'''
> lspci ←PCIの情報
> lsusb ←USBの情報
==インストール==
===yum===
> yum install hogehoge
===sourceからインストール===
> ./configure --prefix=/usr/local; make; su
> make install
===パスを通す===
~/.bashrc を書き換える。
'''一時的な方法'''
> export PATH=/usr/local/hoge:$PATH
'''全ユーザーに適用'''
/etc/profile.d/hoge.sh を作る。
'''ライブラリパスは別に作る'''
> export LD_LIBRARY_PATH=/usr/local/lib
===オリジナルコマンドを作る===
> alias hoge='echo "hage"'
> hoge
→ hage
.bashrc にでも書けば毎回使える。