複数コマンドの実行制御
複数コマンドは以下のように実行制御がされる。
コマンド | 説明 |
---|---|
コマンド 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