bash

「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

== 画像フォーマット変換 ==
 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 にでも書けば毎回使える。
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。