ちょっと進んだbashの使い方

前置き

技術評論社の「UNIXシェル入門」という本を読みました。平凡なbash入門書ですが、覚えておけば役に立ちそうな情報もあったのでまとめてみます。

本文

  • ワイルドカード
 $ ls [cs]*            # cかsで始まるファイル。
 clock  consolefont  cpufrequtils  crypto-loop  samba  sshd  syslog-ng
 $ ls [!a-s]*          # a~sで始まらないファイル。
 tomcat-6  udev  urandom  wireless.example  xinetd
 $ ls *[0-9]*          # 数字を含むファイル。
 apache2  ip6tables  pydoc-2.6  tomcat-6
 $ shopt -s extglob    # より多彩なワイルドカードが使えるようになる(詳細は割愛)。
  • ブレース展開
 $ echo {ma,fa,bro}ther
 mather father brother
 $ echo {a..c}pache2
 apache2 bpache2 cpache2
  • コマンドの実行結果に展開
 $ cat foo
 foo bar
 $ ls $(cat foo) -l
 -rw-r--r-- 1 root root 0 2010-06-11 13:42 bar
 -rwx------ 1 root root 8 2010-06-11 13:41 foo
 $ ls `cat foo` -l
 -rw-r--r-- 1 root root 0 2010-06-11 13:42 bar
 -rwx------ 1 root root 8 2010-06-11 13:41 foo
  • 複数コマンドをまとめる
 $ (ls -l; ps -a) |less
  • リダイレクト
 $ ls 1>ls.txt     # 1:stdout, 2:stderr, デフォルトは1。
 $ ls >|ls.txt     # noclobberオプションがsetされていても上書く。
 $ ls &>ls.txt     # stdoutとstderr両方をリダイレクト。
 $ ls >ls.txt 2>&1 # stderrをstdoutへ。
  • 仮想端末の設定
 $ stty -a
 speed 38400 baud; rows 25; columns 80; line = 0;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
 eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
 werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
 ...
 $ stty stop undef # Ctrl+Sで停止しないように変更。
  • コマンドラインの設定
 $ set -o
 allexport       off
 braceexpand     on
 emacs           on
 errexit         off
 ...
 $ set -o noclobber      # オプションをセット
 $ echo $-
 himBCH
 $ set +o noclobber      # オプションを解除
 $ echo $-
 himBH
  • ヒストリの検索
 $ Ctrl+R                # 検索モード開始。
 (reverse-i-search)`':   # 検索文字を入力してCtrl+Rで検索。
                         # Ctrl+Sで順方向検索(sttyのstopがundefなら)。
 (reverse-i-search)`vi': vi settings.py
                         # Ctrl+EかCtrl+Aで検索モード終了。
 $ vi settings.py
  • ヒストリを置換して再実行
 $ ls *2*
 apache2  pydoc-2.6
 $ ^2^6
 ls *6*
 ip6tables  pydoc-2.6  tomcat-6
  • プロンプト(PS1)用のメタキャラクタ
\a    ビープ
\A    時分(24時間表記)
\d    日付
\h    ホスト名
\s    シェル名
\t    時分秒(24時間表記)
\T    時分秒(12時間表記)
\@    時分AM/PM(12時間表記)
\u    ユーザー名
\v    bashバージョン
\w    ワークディレクトリ
\W    ワークディレクトリのベース名
\#    コマンド番号
\!    ヒストリ番号
\$    root(UIDが0)なら「#」、それ以外なら「$」
\nnn  8進数での文字コード
\\    バックスラッシュそのもの
\[    非表示文字の開始
\]    非表示文字の終了
  • cdの取り消し
 $ pwd
 /etc/conf.d
 $ cd /
 $ cd -
 /etc/conf.d
  • kill
 $ ps -A |grep crond
  6605 ?        00:00:00 crond
 $ kill 6605
 -bash: kill: (6605) - 許可されていない操作です
 $ kill -QUIT 6605
 -bash: kill: (6605) - 許可されていない操作です
 $ kill -KILL 6605
 -bash: kill: (6605) - 許可されていない操作です
 $ sleep 1000 &
 [1] 29396
 $ jobs
 [1]+  実行中               sleep 1000 &
 $ kill %1
 [1]+  終了しました      sleep 1000
  • シェル変数/環境変数
 $ var=3                 # =の前後に空白を入れない。
 $ echo ${var}days
 3days
 $ echo $var-day trip    # 変数名の切れ目が明確なら{}は不要。
 3-day trip
 $ export var            # 環境変数(グローバルなシェル変数)へ昇格。
 $ export var2=4
 $ env |grep var         # 環境変数の一覧表示。
 var2=4
 var=3
 $ unset var             # 未定義化。
  • 関数の一覧
 $ declare -f            # 関数と定義内容を表示。
 $ declare -F            # 関数名を表示。
  • 組み込みコマンド
[       alias   bg        bind      break     builtin   cd
command compgen complete  compopt   continue  declare   dirs
disown  echo    enable    eval      exec      exit      export
fc      fg      getopts   hash      help      history   jobs
kill    let     local     logout    mapfile   popd      printf
pushd   pwd     read      readonly  return    set       shift
shopt   source  suspend   test      times     trap      type
typeset ulimit  umask     unalias   unset     wait
Last modified:2010/06/11 17:20:10
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.