シェルコマンド

May 14, 2018

複数コマンドの実行制御

複数コマンドは以下のように実行制御がされる。

コマンド 説明
コマンド 1; コマンド 2 コマンド 1 に続いてコマンド 2 を実行する
コマンド 1 && コマンド 2 コマンド 1 が正常終了したときのみコマンド 2 を実行する
コマンド 1
(コマンド 1; コマンド 2) コマンド 1 とコマンド 2 をひとまとまりのコマンドグループとして実行する
{コマンド 1; コマンド 2} 現在のシェル内でコマンド 1 とコマンド 2 を実行する
$ echo "test" > test.txt  
$ cat test.txt; ls test.txt   
test  
test.txt  
$ cat test.txt && ls test.txt  
test  
test.txt  
$ cat test2.txt || ls test.txt  
cat: test2.txt: No such file or directory  
test.txt  

引用符

「’」: 全て文字列と解釈
「”」: 変数があれば展開される
「`」: コマンドがあれば、コマンドの実行結果が展開される

$ DATE=date  
$ echo $DATE  
date  
$ echo '$DATE'  
$DATE  
$ echo "$DATE"  
date  
$ echo `$DATE`  
Mon May 14 00:29:59 UTC 2018  

コマンド履歴

コマンド履歴は history コマンドで見れる。

$ history | head -10  
    1  ls  
    2  sudo yum install emacs -y  
    3  ls  
    4  sudo yum install emacs -y  
    5  ls  
    6  emacs  
    7  mkdir LinuxBootCamp  
    8  cd LinuxBootCamp/  
    9  ls  
   10  mkdir Chapter2  

履歴番号が 5 のコマンドを実行するには !5 と入力する。

$ !5  
ls  
httpd-2.2.34-1.16.amzn1.src.rpm  LinuxBootCamp  mnt  testfile-overwrite  

他にも !? だと履歴の中で指定した文字列含むコマンドを実行したり、!! だと直前のコマンドを実行したり。
! に文字列をつけると、履歴の中で指定した文字列から始まるコマンドを実行する。

$ !!  
ls  
httpd-2.2.34-1.16.amzn1.src.rpm  LinuxBootCamp  mnt  testfile-overwrite  
$ !? ls  
man 2 lseek  

マニュアルの参照

Linux ではオンラインマニュアルページが用意されているが、man コマンドで参照できる。
マニュアルファイルは /usr/share/man に配置されており、man ページの検索ディレクトリは環境変数 MANPATH に保存される。
MANPATH に何も指定がない場合は、/etc/man(_db).conf(ig) に指定されている。

以下のようなオプションがある。

オプション 説明
-a すべてのセクションのマニュアルを表示
-f 指定されたキーワードを含む (完全一致) ドキュメントを表示
-k 指定されたキーワードを含む (部分一致) ドキュメントを表示
-w マニュアルの置かれているディレクトリを表示
$ cat /etc/man_db.conf | head -10  
#   
#  
# This file is used by the man-db package to configure the man and cat paths.  
# It is also used to provide a manpath for those without one by examining  
# their PATH environment variable. For details see the manpath(5) man page.  
#  
# Lines beginning with `#' are comments and are ignored. Any combination of  
# tabs or spaces may be used as `whitespace' separators.  
#  
# There are three mappings allowed in this file:  
  
$ man -f sleep  
sleep (1)            - delay for a specified amount of time  
sleep (3)            - sleep for a specified number of seconds  
sleep (3p)           - suspend execution for an interval of time  
sleep (1p)           - suspend execution for an interval  
  
$ man -k sleep   
clock_nanosleep (2)  - high-resolution sleep with specifiable clock  
clock_nanosleep (3p) - high resolution sleep with specifiable clock  
nanosleep (2)        - high-resolution sleep  
nanosleep (3p)       - high resolution sleep  
rtcwake (8)          - enter a system sleep state until specified wakeup time  
sleep (1)            - delay for a specified amount of time  
sleep (1p)           - suspend execution for an interval  
sleep (3)            - sleep for a specified number of seconds  
sleep (3p)           - suspend execution for an interval of time  
Time::HiRes (3pm)    - High resolution alarm, sleep, gettimeofday, interval timers  
usleep (1)           - sleep some number of microseconds  
usleep (3)           - suspend execution for microsecond intervals  
  
$ man -w sleep  
/usr/share/man/man1/sleep.1.gz  

-f オプション: whatis コマンドで代用可能
-k オプション: apropos コマンドで代用可能

$ whatis sleep  
sleep (1)            - delay for a specified amount of time  
sleep (3)            - sleep for a specified number of seconds  
sleep (3p)           - suspend execution for an interval of time  
sleep (1p)           - suspend execution for an interval  
  
$ apropos sleep  
clock_nanosleep (2)  - high-resolution sleep with specifiable clock  
clock_nanosleep (3p) - high resolution sleep with specifiable clock  
nanosleep (2)        - high-resolution sleep  
nanosleep (3p)       - high resolution sleep  
rtcwake (8)          - enter a system sleep state until specified wakeup time  
sleep (1)            - delay for a specified amount of time  
sleep (1p)           - suspend execution for an interval  
sleep (3)            - sleep for a specified number of seconds  
sleep (3p)           - suspend execution for an interval of time  
Time::HiRes (3pm)    - High resolution alarm, sleep, gettimeofday, interval timers  
usleep (1)           - sleep some number of microseconds  
usleep (3)           - suspend execution for microsecond intervals  

 © 2023, Dealing with Ambiguity