Hands-on learning record blog

ハンズオン学習記録、更新のない日は技術本を読む📚

7/6(シェルスクリプトを活用する)

シェルスクリプトの欠点(シェルスクリプトを使うべきではないケース)

→大規模システムのプログラミング

→高速性が必要な処理

 

★演習1

 

・日記作成シェルスクリプト(diary.sh)

#!/bin/bash

vim $(date '+%Y-%m-%d').txt

 

・日記データの保存ディレクトリに対応することもできる

 

★演習2

 

シェルスクリプトを作るときのコツは小さく作っていくこと

 いきなり何でもできるような大規模なものは考えないこと

 

・ファイル一覧表示のシェルスクリプト(tree.sh)

#!/bin/bash

list_recursive ()
{
        local filepath=$1
        
        echo "$filepath"
        
        if [ -d "$filepath" ]; then
                #ディレクトリである場合、その中に含まれるファイルや
                #ディレクトリを一覧表示する
        fi      
}       

list_recursive "$1"

 

・シェル関数内でローカル変数として宣言した場合(localvar.sh)

#!/bin/bash

func1 ()
{
        echo "func1: message = $message"
        local message="Guten tag"
}       

message="Hello"
echo "main(1st): message = $message"
func1
echo "main(2nd): message = $message"

 

→シェル関数内で変更したローカル変数は呼び出し元に影響しない

[cloudshell-user@ip-10-136-34-238 ~]$ ./localvar.sh
main(1st): message = Hello
func1: message = Hello
main(2nd): message = Hello
[cloudshell-user@ip-10-136-34-238 ~]$

 

・再起 - 自分自身を呼び出す

絶対パス表記からファイル名を取り出す

 

 

★演習3

 

・検索コマンドを作る

→xargsコマンド - 標準入力からコマンドラインを組み立てて実行する

 

・findコマンドによる現在のファイルリスト

[cloudshell-user@ip-10-136-34-238 ~]$ find . -type f -name '*.txt'
./0002.txt
./0001.txt
./2024-07-06.txt
./0003.txt
./0004.txt
./0005.txt
[cloudshell-user@ip-10-136-34-238 ~]$

 

・xargsを利用してlsコマンドを実行する例

[cloudshell-user@ip-10-136-34-238 ~]$ find . -type f -name '*.txt' | xargs ls -l
-rw-r--r--. 1 cloudshell-user cloudshell-user  0 Jul  2 13:36 ./0001.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user  0 Jul  2 13:36 ./0002.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user  0 Jul  2 13:36 ./0003.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user  0 Jul  2 13:36 ./0004.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user  0 Jul  2 13:36 ./0005.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user 86 Jul  6 05:07 ./2024-07-06.txt
[cloudshell-user@ip-10-136-34-238 ~]$ 

 

→このように、findコマンドとセットでxargsコマンドを利用すれば、サブディレクトリ内のファイルまで含めてすべてのファイルに対して任意のコマンド(今回はlsコマンド)を実行することができる

 

 

 

 

 

7/3~7/5(シェルスクリプト②)

★for文

→単語のリストに対して繰り返し処理を行う構文

----------------------------

・for文の構造

for 変数名 in リスト

do

 【繰り返す処理】

done

----------------------------

・aaa,bbb,cccを順にシェル変数nameに代入して、echo $name という繰り返し処理を行う簡単なfor文を作成する

#!/bin/bash

for name in aaa bbb ccc
do      
        echo $name
done

 

[cloudshell-user@ip-10-136-56-161 ~]$ ./for.sh
aaa
bbb
ccc
[cloudshell-user@ip-10-136-56-161 ~]$

 

・パス名展開を利用したfor文

#!/bin/bash

for filename in *.html
do      
        head -n 1 "$filename"
done

 

・数値列の出力

seq <開始値> <終了値>

[cloudshell-user@ip-10-136-56-161 ~]$ seq 1 5
1
2
3
4
5
[cloudshell-user@ip-10-136-56-161 ~]$

 

・0001.txtから連番のファイルを作成する(for-touch.sh)

#!/bin/bash

for i in $(seq 1 5)
do      
        touch "000${i}.txt"
done

 

[cloudshell-user@ip-10-136-56-161 ~]$ ./for-touch.sh
[cloudshell-user@ip-10-136-56-161 ~]$ ls -l
total 68
-rw-r--r--. 1 cloudshell-user cloudshell-user   34 Jun 25 13:23 '[]'
-rw-r--r--. 1 cloudshell-user cloudshell-user    0 Jul  2 13:36  0001.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user    0 Jul  2 13:36  0002.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user    0 Jul  2 13:36  0003.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user    0 Jul  2 13:36  0004.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user    0 Jul  2 13:36  0005.txt
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   67 Jul  2 13:28  for-html.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   58 Jul  2 13:20  for.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   62 Jul  2 13:35  for-touch.sh
-rw-r--r--. 1 cloudshell-user cloudshell-user   20 Jun 30 12:48  homesize-noshebang.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   32 Jun 30 12:09  homesize.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user  105 Jul  2 12:33  if-and.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   69 Jul  1 12:43  if-bin.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user  106 Jul  2 12:42  if-or.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user  125 Jun 30 14:06  parameters.sh
-rw-r--r--. 1 cloudshell-user cloudshell-user   33 Jun 25 13:13  reo
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   37 Jun 30 13:20  rootdir.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   34 Jun 30 13:15  rootls.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user   77 Jul  1 13:40  showstatus.sh
-rwxr-xr-x. 1 cloudshell-user cloudshell-user  234 Jul  2 13:03  summary.sh
-rw-r--r--. 1 cloudshell-user cloudshell-user   41 Jun 25 12:42  test
drwxr-xr-x. 2 cloudshell-user cloudshell-user 4096 Jun 29 07:28  work
[cloudshell-user@ip-10-136-56-161 ~]$ 

 

コマンドライン引数$@をリストに指定(parameters.sh)

#!/bin/bash

for parameter in "$@"
do
        echo "$parameter"
done 

→すべてのコマンドライン引数を順に表示する

[cloudshell-user@ip-10-136-56-161 ~]$ ./parameters1.sh readme.txt 38 "Hello World"
readme.txt
38
Hello World
[cloudshell-user@ip-10-136-56-161 ~]$ 

 

※$@を対象とすることが多いため、in <リスト>を省略すると自動的に$@がリストの対象とみなされるようになっている

→つまり、以下の2行は同じ意味である

for parameter in "$@"

for parameter

 

●演習2

・for文を使って、複数ファイルを指定しても、正しく処理できるように修正したい

#!/bin/bash

for file in "$@"
do
        if [ -d "$file" ]; then
                echo "$file is a directory:"
                ls "$file"
        elif [ -f "$file" ]; then
                echo "$file is a regular file:"
                head -n 5 "$file"
        fi
done

 

→複数のファイルを指定しても同時に処理ができるようになる

[cloudshell-user@ip-10-136-56-161 ~]$ ./summary.sh /home /etc/passwd
/home is a directory:
cloudshell-user
/etc/passwd is a regular file:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[cloudshell-user@ip-10-136-56-161 ~]$

 

★case文

→指定された文字列がパターンにマッチするかどうかを判断し、マッチしたパターンに対応する処理を行うための制御構造

 

・case文の構造

case <文字列> in

  <パターン1>

 【   処理1   】

  ;;

  <パターン2>)

 【   処理2   】

  ;;

esac

 

・ファイル名によりlessまたはvimコマンドを実行する(case-test.sh)

#!/bin/bash

case "$1" in
        *.txt)
                less "$1"
                ;;
        *.sh)   
                vim "$1"
                ;;
        *)      
                echo "not supported file : $1"
                ;;
esac

 

・|で複数のパターンを指定する(case-or.sh)

#!/bin/bash

case "$1" in
        start|stop)
                echo "OK"
                ;;
        *)      
                echo "NG"
                ;;
esac

 

[cloudshell-user@ip-10-140-102-150 ~]$ ./case-or.sh stop
OK
[cloudshell-user@ip-10-140-102-150 ~]$ ./case-or.sh sto
NG
[cloudshell-user@ip-10-140-102-150 ~]$

 

★While文

→指定した条件が真である限り繰り返し処理を行う制御構文

 

・while文の構造

while <コマンド>

do

  【  繰り返し処理  】

done

 

・testコマンドによるwhileループ(while.sh)

→シェル変数iの値が10以下である限り、iの値を表示してから2を足すという動作

#!/bin/bash

i=1
while [ "$1" -le 10 ]
do
        echo "$i"
        i=$*1
done

 

※while文のループは、「Ctrl+C」で止めることができる

 

・算術式展開

→シェル変数iに2を足すという処理

 i=`expr $i + 2`

 

 $(( ))と二重の括弧でくくることにより、中に書いた文字列を計算式として扱うことができる。

[cloudshell-user@ip-10-140-102-150 ~]$ i=10
[cloudshell-user@ip-10-140-102-150 ~]$ echo $*2
11
[cloudshell-user@ip-10-140-102-150 ~]$ echo $*3
5
[cloudshell-user@ip-10-140-102-150 ~]$ echo $*4
20

[cloudshell-user@ip-10-140-102-150 ~]$ echo $*5
100
[cloudshell-user@ip-10-140-102-150 ~]$

 

bashの算術式展開は、読みやすく動作も早いという利点を持っている

 bashスクリプトでは積極的に利用することを勧めている

 

★シェル関数

→同じ処理を何度も実行する場面で、処理をひとまとめにして関数にすると便利

 関数はエイリアスと似ており、関数名をつけてから実行するコマンドを定義することで、あとからその名前で処理を呼び出すことができる。

 

・functionによる関数定義

function <関数名> ()

{

 【  処理  】

}

 

→functionの後ろに関数名を定義し、実際の処理は{}内に記述する

 

・カッコを省略した関数定義

function <関数名>

{

 【  処理  】

}

 

・functionを省略した関数定義

<関数名> ( )

{

 【  処理  】

}

 

・シェル関数の定義と使用例(func-test.sh)

#!/bin/bash

homesize ()
{
        date
        du -h ~ | tail -n 1
}

homesize

 

→このシェルスクリプトを実行すると、まずhomesize関数が呼び出される

 homesize関数の中ではdateコマンドとduコマンドが実行され、結果として現在の時刻とホームディレクトリの容量が表示される

[cloudshell-user@ip-10-138-190-148 ~]$ ./func-test.sh
Fri Jul  5 02:13:31 PM UTC 2024
160K    /home/cloudshell-user
[cloudshell-user@ip-10-138-190-148 ~]$

 

→シェル関数を利用する際には、利用する箇所よりも前に定義しておかなければいけないため、関数定義の部分を後ろに持ってくるとエラーとなる

 

・シェル関数内での位置パラメータ

→シェル関数の中でも、位置パラメータ$1、$2.....が利用できる

 ただし、シェル関数の中ではこれらはコマンドライン引数ではなく、関数への引数が参照される

 

・シェル関数での位置パラメータの確認用シェルスクリプト(func-parameters.sh)

#!/bin/bash

print_parameters ()
{
        echo "\$1 = $1"
        echo "\$2 = $2"
        echo "\$3 = $3"
        echo "\$4 = $4"
        echo
        echo "$# arguments"
        echo "script name = $0"
}       

print_parameters aaa bbb ccc

 

[cloudshell-user@ip-10-138-190-148 ~]$ ./func-parameters.sh
$1 = aaa
$2 = bbb
$3 = ccc
$4 = 

3 arguments
script name = ./func-parameters.sh
[cloudshell-user@ip-10-138-190-148 ~]$

→このようにシェル関数内では、位置パラメータが関数の引数へと置き換えられる

 なお、$0のみ関数名に置き換えられず、元のシェルスクリプト名のままになる

 $0は位置パラメータではなく、特殊パラメータと呼ばれる

 

・シェル関数の終了ステータス

→通常は、シェル関数内で最後に実行されたコマンドの終了ステータスが、そのままシェル関数の終了ステータスとなる

 明示的に終了ステータスを返す時は、シェルの組み込みコマンドであるreturnコマンドを使用する

 

・シェル関数を終了させる

return <終了ステータス>

 

・引数が指定されていなければ終了ステータスを返す

checkparam ()
{
        if [ -z "$1" ]; then
                return 1
        fi      
        
        ls "$1"
}  

 

 

*1:i+2

*2:i+1

*3:i/2

*4:i*2

*5:i**2

6/30~7/2 Linux学習(シェルスクリプト①)

シェルスクリプト

コマンドラインをあらかじめ記述しておくファイルのこと(一種の言語)

→一度シェルスクリプトを作れば、あとで同じ処理が必要になったときにそのシェルスクリプトを再利用できる

→自分だけではなく、ほかの人にも配布して使用することができる

→コマンドを打ち間違えることによる作業ミスをなくすことができる

 

※どのシェルのシェルスクリプトを書くべきか

→sh or bash

●sh...互換性、移植性に配慮するなら(bashで書かれたシェルスクリプトも互換性、移植性はとても高い)

bash...shのシェルスクリプトには様々な問題があるため、近年はbashが良いとされる

 

bashにはシェルスクリプトを書く上で便利な機能が多く用意されている

 

シェルスクリプトは実行したいコマンドを記述したテキストファイルなので、vimなどのテキストエディタを利用して作成できる

 

●ホームディレクトリのファイル使用量を表示する

[cloudshell-user@ip-10-132-40-13 ~]$ du -h ~ | tail -n 1
80K     /home/cloudshell-user
[cloudshell-user@ip-10-132-40-13 ~]$ 

 

↓このコマンドをシェルスクリプトにする

 

vimシェルスクリプトhomesize.shを作成

[cloudshell-user@ip-10-132-40-13 ~]$ vim homesize.sh

 

・テキストファイルに以下を入力し、:wqで保存して終了

#!/bin/bash

du -h ~ | tail -n 1

 

シェルスクリプトは実行されるファイルのため、+xとして実行権限を付与しておく必要がある

[cloudshell-user@ip-10-132-40-13 ~]$ chmod +x homesize.sh

 

・作成したシェルスクリプトを実行

[cloudshell-user@ip-10-132-40-13 ~]$ ./homesize.sh
84K     /home/cloudshell-user
[cloudshell-user@ip-10-132-40-13 ~]$

 

※実行するファイルの前に「.」を必ずつけること

→カレントディレクトリにあるhomesize.shファイルを指定して実行するという意味

 

・sourceコマンドは、指定したファイルの内容をそのままコマンドラインに入力したときと同じように実行する

※対象ファイルを直接実行するわけではないため、ファイルに実行権限は不要

→シバンなしのテキストファイルを作成し、sourceコマンドで実行

[cloudshell-user@ip-10-132-40-13 ~]$ vim homesize-noshebang.sh
[cloudshell-user@ip-10-132-40-13 ~]$ source ./homesize-noshebang.sh
96K     /home/cloudshell-user
[cloudshell-user@ip-10-132-40-13 ~]$ 

 

→また、「.」はsourceコマンドと同じ意味を持つため、以下のコマンドでも実行可能

[cloudshell-user@ip-10-132-40-13 ~]$ . ./homesize-noshebang.sh
]96K    /home/cloudshell-user
[cloudshell-user@ip-10-132-40-13 ~]$ ]

bashスクリプトではsourceコマンドを利用することを推奨

 

・サブシェルとは、現在のシェルから新しく起動される子プロセスのシェルのこと

 

シェルスクリプトの基本

→複数のコマンドを実行させる場合には、順番に何行でもコマンドを書ける

vimで複数コードを記載したテキストファイルを作成

#!/bin/bash

echo "root directory"
cd /
ls -l

 

→作成したファイルに実行権限を付与して、rootls.shを実行

[cloudshell-user@ip-10-132-40-13 ~]$ chmod +x rootls.sh
[cloudshell-user@ip-10-132-40-13 ~]$ ./rootls.sh
root directory
total 76
drwxr-xr-x.   3 root root 4096 Jun 30 12:03 aws
lrwxrwxrwx.   1 root root    7 Jan 30  2023 bin -> usr/bin
dr-xr-xr-x.   2 root root 4096 Jan 30  2023 boot
drwxr-xr-x.  10 root root 2880 Jun 30 12:03 dev
drwxr-xr-x.   1 root root 4096 Jun 30 12:03 etc
drwxr-xr-x.   3 root root 4096 Jun 30 11:40 home
lrwxrwxrwx.   1 root root    7 Jan 30  2023 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Jan 30  2023 lib64 -> usr/lib64
drwxr-xr-x.   2 root root 4096 May  9 20:44 local
drwxr-xr-x.   2 root root 4096 Jan 30  2023 media
drwxr-xr-x.   2 root root 4096 Jan 30  2023 mnt
drwxr-xr-x.   1 root root 4096 Jun 30 12:03 opt
dr-xr-xr-x. 215 root root    0 Jun 30 12:03 proc
dr-xr-x---.   3 root root 4096 Jun 30 11:40 root
drwxr-xr-x.   1 root root 4096 Jun 30 12:03 run
lrwxrwxrwx.   1 root root    8 Jan 30  2023 sbin -> usr/sbin
drwxr-xr-x.   2 root root 4096 Jan 30  2023 srv
dr-xr-xr-x.  13 root root    0 Jun 30 11:26 sys
drwxrwxrwt.   1 root root 4096 Jun 30 12:03 tmp
drwxr-xr-x.   1 root root 4096 May  9 20:44 usr
drwxr-xr-x.   1 root root 4096 May  9 20:44 var
[cloudshell-user@ip-10-132-40-13 ~]$ 

 

→「\」を行末に置くことで途中で改行できる

#!/bin/bash

echo \
"root directory"

 

[cloudshell-user@ip-10-132-40-13 ~]$ chmod +x rootdir.sh
[cloudshell-user@ip-10-132-40-13 ~]$ ./rootdir.sh
root directory
[cloudshell-user@ip-10-132-40-13 ~]$ 

 

 

・変数の書き方

→代入時には$をつけない

※$を変数の前につけるのは変数展開して値を参照したいときだけ

→=の前後にスペースを入れない

→変数名に利用できる文字はアルファベットと数値と_(アンダースコア)だけ

→変数名の区切りを明示する({}などを使用する)

 

・シングルクォート=変数展開されない(文字列として表示される)

 ダブルクォート=変数展開される

 

シェルスクリプトからコマンドライン引数を扱う

vimでparameters.shファイルを作成

#!/bin/bash

echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"

※「\$」とは、変数展開せずに$記号そのものを出すためにエスケープする記法

 

→引数を指定しないと何も表示されない

[cloudshell-user@ip-10-132-40-13 ~]$ chmod +x parameters.sh
[cloudshell-user@ip-10-132-40-13 ~]$ ./parameters.sh
$0 = ./parameters.sh
$1 = 
$2 = 
$3 = 
$4 = 
$5 = 

 

→引数を指定すると指定した引数が表示される
[cloudshell-user@ip-10-132-40-13 ~]$ ./parameters.sh aaa bbb ccc
$0 = ./parameters.sh
$1 = aaa
$2 = bbb
$3 = ccc
$4 = 
$5 = 
[cloudshell-user@ip-10-132-40-13 ~]$

 

→「*」を指定(ワイルドカード

[cloudshell-user@ip-10-132-40-13 ~]$ ./parameters.sh *
$0 = ./parameters.sh
$1 = []
$2 = homesize-noshebang.sh
$3 = homesize.sh
$4 = parameters.sh
$5 = reo
[cloudshell-user@ip-10-132-40-13 ~]$

 

vimで最終行に「echo "\$# = $#"」を入力し、実行

[cloudshell-user@ip-10-132-40-13 ~]$ ./parameters.sh aaa bbb ccc
$0 = ./parameters.sh
$1 = aaa
$2 = bbb
$3 = ccc
$4 = 
$5 = 
$# = 3
[cloudshell-user@ip-10-132-40-13 ~]$

※「$#」は特殊パラメータで、引数の個数を表示できる

 「$@」「$*」で引数を分割せずにまとめて扱うことができる

 

・制御構造について

●if文(条件を評価して、その真偽に応じて処理を分岐する)

コマンドライン引数がbinならOKと表示する

#!/bin/bash

if [ "$1" = "bin" ]; then
        echo "OK"
else    
        echo "NG"
fi

 

→$1をbinでOKと表示され、その他で指定するとNGと表示される

[cloudshell-user@ip-10-136-39-122 ~]$ ./if-bin.sh bin
OK
[cloudshell-user@ip-10-136-39-122 ~]$ ./if-bin.sh hello
NG
[cloudshell-user@ip-10-136-39-122 ~]$

 

シェルスクリプトでは、if文の後ろに置くのは「コマンド」であって、条件式ではない

 

★if文の構造

if <コマンド1>; then

 #<コマンド1>の結果が真である場合の処理

elif <コマンド2>; then

 #<コマンド2>の結果が真である場合の処理

elif <コマンド3>; then

 #<コマンド3>の結果が真である場合の処理

else

 #上記の結果がすべて偽である場合の処理

fi

 

→else句はコマンドの結果が偽の場合に実行される部分

→elif句は追加の条件を指定するために利用し、必要に応じていくらでも追加できる

 

※今回ifの後ろに[ "$1" = "bin" ]を置いていたが、「[」は単なるカッコではなく、”bashの組み込みコマンド”である

 

・lsやgrepなどのコマンドはすべて終了時に終了ステータスと呼ばれる整数値を返す

 $?というシェル変数で参照できる

[cloudshell-user@ip-10-136-39-122 ~]$ echo $?
0
[cloudshell-user@ip-10-136-39-122 ~]$

 

→正常に終了した場合は0を、エラー時には0以外の値を返す

 

・ls /とls /dummy(存在しないディレクトリ)を実行

#!/bin/bash

ls /
echo "exit status = $?"

ls /dummy
echo "exit status = $?"

 

[cloudshell-user@ip-10-136-39-122 ~]$ ./showstatus.sh
aws  bin  boot  dev  etc  home  lib  lib64  local  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
exit status = 0
ls: cannot access '/dummy': No such file or directory
exit status = 2

→ls /では存在するディレクトリを指定しているため、0が返される

→ls /dummyでは存在しないディレクトリを指定しているため、エラーで2が返された

 

・testコマンドは「[」と同じ機能を持つ

→以下は同じ意味となる

if [ "$1" = "bin" ]; then

if test "$1" = "bin" ; then

 

・文字列の比較

→「=」...等しい、「!=」...等しくない、「-n」...空文字ではない、「-z」...空文字である

 

・整数に関する評価演算子

→「-eq」...等しい、「-ne」...等しくない、「-lt」...より小さい、「-le」...以下、

 「-gt」...より大きい、「-ge」...以上

 

・ファイル属性に関する評価演算子

→「-e」...存在する、「-d」...ディレクトリ、「-h」...シンボリックリンク

 「-L」...-hと同じ、「-f」...通常のファイル、「-r」...読み取りパーミッション

 「-w」...書き込みパーミッション、「-x」...実行パーミッション

 「-nt」...より変更時刻が新しい、「-ot」...より変更時刻が古い

 

・結合演算子

→「-a」...条件式1と2の両方が真の場合に真(AND)

 「-o」...条件式1と2のどちらか少なくとも1つが真の場合に真(OR)

 「!条件式」...条件式の真偽を逆にする(NOT)

 「()」...条件をグループ化

 

・if文で複数のコマンドの終了ステータスすべてがゼロの条件

#!/bin/bash

int1=$1
if [ "$int1" -gt 3 ] && [ "$int1" -lt 6 ]; then
        echo "int1 > 3 and int1 < 6"
fi

 

→両方満たす場合、出力される

[cloudshell-user@ip-10-136-56-161 ~]$ ./if-and.sh 4
int1 > 3 and int1 < 6

→それ以外は出力されない

[cloudshell-user@ip-10-136-56-161 ~]$ ./if-and.sh 8
[cloudshell-user@ip-10-136-56-161 ~]$

 

・if文でいずれかのコマンドの終了ステータスがゼロの条件

#!/bin/bash

str=$1
if [ "$str" = 'home' ] || [ "$str" = 'usr' ]; then
        echo "str = home or str = usr"
fi

 

→homeを指定

[cloudshell-user@ip-10-136-56-161 ~]$ ./if-or.sh home
str = home or str = usr
[cloudshell-user@ip-10-136-56-161 ~]$

→usrを指定

[cloudshell-user@ip-10-136-56-161 ~]$ ./if-or.sh usr
str = home or str = usr
[cloudshell-user@ip-10-136-56-161 ~]$

→それ以外を指定

[cloudshell-user@ip-10-136-56-161 ~]$ ./if-or.sh aaa
[cloudshell-user@ip-10-136-56-161 ~]$

 

●演習1

コマンドライン引数から指定されたファイルやディレクトリの概要を表示するシェルスクリプトを作る

#!/bin/bash

file=$1
 #コマンドライン引数からファイルパスを取得
 
if [ -d "$file" ]; then
 #ディレクトリである場合
  echo "$file is a directory:"
   ls "$file"
elif [ -f "$file" ]; then
 #通常ファイルである場合
  echo "$file is a regular file"
  head -n 5 "$file"
fi

 

→ファイルを指定

[cloudshell-user@ip-10-136-56-161 ~]$ ./summary.sh /etc/passwd
/etc/passwd is a regular file:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[cloudshell-user@ip-10-136-56-161 ~]$

 

ディレクトリを指定

[cloudshell-user@ip-10-136-56-161 ~]$ ./summary.sh /home
/home is a directory:
cloudshell-user
[cloudshell-user@ip-10-136-56-161 ~]$

6/29(土)Linux学習

Linuxでは、rmコマンドを実行するとファイルは本当に削除される

→削除前に必ず確認すること

 

・ファイルを探すコマンド

→findコマンド...基本はこのコマンド

→locateコマンド...作成してからしばらく経ったファイルを見つけるのに向いている

 

・manコマンドでまずはマニュアルを参照するのが原則

→-kオプションでキーワードを指定して調べれる

 

・whichコマンドはコマンドのフルパスを表示する

[cloudshell-user@ip-10-140-100-62 ~]$ which cat
/usr/bin/cat

 

・suはスーパーユーザへの切り替えコマンド

・sudoはそのコマンドだけスーパーユーザで実行する

→sudoのほうがよく使われる

 

・psコマンドは、現在動作しているプロセスを表示する

 

・ジョブとは、シェルから見た処理の単位のこと

→jobsコマンドで現在のジョブを一覧表示できる

 

・fgコマンド...フォアグラウンド

→ユーザ入力を受け付けるジョブの状態

→Ctrl+Cでジョブが終了

 

・bgコマンド...バッググラウンド

→ユーザが対話的に操作できないジョブの状態

→コマンドを受け付けていないため、killコマンドでジョブを終了させる

 

※killコマンドは、シグナルを送信するコマンドのこと

 

・wcコマンドは、入力ファイルの行数、単語数、バイト数を数えるコマンド

[cloudshell-user@ip-10-130-91-130 ~]$ wc /etc/passwd
 18  29 848 /etc/passwd

#行数 単語数 バイト数 ファイル名
[cloudshell-user@ip-10-130-91-130 ~]$ 

 

→-l...行数 -w...単語数 -c...バイト数

 

・sortコマンドは、行を並べ替える

→オプション指定なし...アルファベット順

→-n...数値順にソート

 

・uniqコマンドは、重複行を取り除く

※同じ内容の行が、連続している場合にのみ、重複を取り除く

 重複した行が離れている場合は、取り除かれない

 

→-c...重複している行を数えて表示するオプション

 

・diffコマンドは、差分を表示する

→設定ファイルやプログラムのソースコードに対して、編集前と編集後の変更内容を確認するために使われる

 

 

 

 

6/27(木)Linux コマンド学習

・切り取り(カット)、貼り付け(ペースト=ヤンク)

→Ctrl+Uキーでコマンドラインの消去

→Ctrl+Yキーで削除した内容が復元される

 

・画面表示のロックと解除

→Ctrl+Sキーで画面表示をロックする

→Ctrl+Qキーでロックを解除する

※画面が固まっていてもコマンドは受け付けているため、画面が固まったらコマンドを打つのではなく、Ctrl+Qを入力してみる

 

・コマンドの強制終了

→Ctrl+Cで強制終了できる

[cloudshell-user@ip-10-130-69-163 ~]$ ping 192.168.2.67
PING 192.168.2.67 (192.168.2.67) 56(84) bytes of data.
^C 👈ここでCtrl+Cキーを押した
--- 192.168.2.67 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5200ms

[cloudshell-user@ip-10-130-69-163 ~]$ 

 

・画面の消去

→Ctrl+Lキーで画面に表示された内容をすべて消して、カーソル位置を左上に異動させることができる

※Clearコマンドも同様の機能を持つ。

 

・コマンド履歴の操作

→Ctrl+Pキー、↑キーで1つ前のコマンド履歴に移動する(Previous=前)

→Ctrl+Nキー、↓キーで次のコマンド履歴へ移動する(Next=次)

→Ctrl+Rキーで履歴を遡り、インクリメンタル検索する

 

・インクリメンタル検索(逐次検索)は、1文字入力するごとに履歴を検索する

 

・各ディレクトリの役割

→/bin...Linuxシステムの動作に最低限必要な重要度の高いコマンドを格納

→/dev...デバイスファイルを格納

→/etc...設定ファイルを置くためのディレクト

→/home...ホームディレクトリが配置されるディレクト

→/sbin.../binと似ているが、こちらは管理者ユーザ向けのコマンドが置かれる

→/tmp...一時的にファイルを置くためのディレクト

→/usr...各種アプリケーションと、それに付随するファイルを置くためのディレクト

→/var...変化するデータを置くためのディレクト

 

 

 

 

 

6/25(火)Linux学習

・シェル変数と環境変数

→シェルは、一時的な変数であるシェル変数にテキスト文字列の値を格納できる。

[cloudshell-user@ip-10-132-44-98 ~]$ echo shell_var
shell_var
[cloudshell-user@ip-10-132-44-98 ~]$ shell_var=test123
[cloudshell-user@ip-10-132-44-98 ~]$ echo $shell_var
test123
[cloudshell-user@ip-10-132-44-98 ~]$ 

 

※シェル変数は、シェルを切り替えた際に設定は引き継がれない

→シェルを切り替えたときに保持しておきたい場合に設定するのが「環境変数

 

環境変数

→printenvコマンドもしくは、envコマンドのみで取得される

→shell_varを環境変数として保存したい場合は、export 変数名

 

・&&演算子

→前のコマンドが成功した場合のみに次のコマンドを実行する

 

・||演算子

→左側にコマンドが失敗した場合のみ、右側のコマンドが実行される

 

・シングルクォーテーション

→囲んだコマンドを文字列として表示

[cloudshell-user@ip-10-132-44-98 ~]$ echo 'Hello World!'
Hello World!
[cloudshell-user@ip-10-132-44-98 ~]$ 

 

・バッククォーテーション

→その間のコマンドを実行し、その結果を文字列として扱う

[cloudshell-user@ip-10-132-44-98 ~]$ echo "本日の日付:`date`"
本日の日付:Tue Jun 25 12:12:51 PM UTC 2024
[cloudshell-user@ip-10-132-44-98 ~]$ 

 

・ダブルクォーテーション

→その間の文字列をそのまま扱いながら、変数の展開やエスケープシーケンスと呼ばれる解釈を行う

[cloudshell-user@ip-10-132-44-98 ~]$ name="Reo"
[cloudshell-user@ip-10-132-44-98 ~]$ echo $name
Reo
[cloudshell-user@ip-10-132-44-98 ~]$ echo "名前は $name です"
名前は Reo です
[cloudshell-user@ip-10-132-44-98 ~]$

 

・vi

Linuxでテキストファイルを編集するツール

→iキーを入力し、インサートモード(挿入モード)に切り替える

→EscキーもしくはCtrl+cでインサート表示が消える

→:w(コロン、wキー)で現在編集している内容を保存するコマンド

 "test" [New] 4L, 41B written(4行、41バイト書き込んだ表示)

→:q(コロン、qキー)でviを終了する

以下は、cat testでviで編集し保存した内容が表示される

[cloudshell-user@ip-10-132-44-98 ~]$ cat test
aaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc

[cloudshell-user@ip-10-132-44-98 ~]$

 

→:wq(コロン、w+qキー)で保存して終了するコマンド

- 主な流れ -

①vi 「テキスト名」でviモード

②テキストを編集する

③iキーでインサートモードに切り替え

➃保存、終了コマンドを実行

 

※:wコマンド、スペース、存在しないファイル名を入力すると別名で保存できる

 

→:q!(ビックリマークで強制的に実行)

 

→取り消ししたい場合は、Ctrl+Cを押してからUキーで取り消しできる

→戻しすぎた場合は、Ctrl+Rでredoの動きとなる

→yyで行全体のコピー、pで1行下にペースト、ddで行全体のカット

→Shift+Vでビジュアルモードで行全体を選択できる

→:vert terminaで画面を分割できる

 

・nano

拡張機能

→Ctrl+Oで保存、Ctrl+Xで終了

 

Linuxではソフトウェアのことをパッケージと呼ぶ

→パッケージ管理コマンドには、yumやdnfがある

→これらのコマンドを実行すると、今何のソフトウェアがインストールされているか確認ができ、新しくソフトウェアをダウンロードすることも可能。

 

リポジトリ

→ソフトウェア(パッケージ)保管場所のこと

スーパーユーザへ切り替えし、dnfコマンドでインストールしたいパッケージを指定

[cloudshell-user@ip-10-132-44-98 ~]$ sudo su -
[root@ip-10-132-44-98 ~]# dnf install httpd
Last metadata expiration check: 2:28:22 ago on Tue 25 Jun 2024 11:09:07 AM UTC.
Dependencies resolved.
=======================================================================================================================================
 Package                             Architecture           Version                                  Repository                   Size
=======================================================================================================================================
Installing:
 httpd                               x86_64                 2.4.59-2.amzn2023                        amazonlinux                  47 k
Installing dependencies:
 apr                                 x86_64                 1.7.2-2.amzn2023.0.2                     amazonlinux                 129 k
 apr-util                            x86_64                 1.6.3-1.amzn2023.0.1                     amazonlinux                  98 k
 generic-logos-httpd                 noarch                 18.0.0-12.amzn2023.0.3                   amazonlinux                  19 k
 httpd-core                          x86_64                 2.4.59-2.amzn2023                        amazonlinux                 1.4 M
 httpd-filesystem                    noarch                 2.4.59-2.amzn2023                        amazonlinux                  14 k
 httpd-tools                         x86_64                 2.4.59-2.amzn2023                        amazonlinux                  81 k
 mailcap                             noarch                 2.1.49-3.amzn2023.0.3                    amazonlinux                  33 k
Installing weak dependencies:
 apr-util-openssl                    x86_64                 1.6.3-1.amzn2023.0.1                     amazonlinux                  17 k
 mod_http2                           x86_64                 2.0.27-1.amzn2023.0.2                    amazonlinux                 166 k
 mod_lua                             x86_64                 2.4.59-2.amzn2023                        amazonlinux                  61 k

Transaction Summary
=======================================================================================================================================
Install  11 Packages

Total download size: 2.0 M
Installed size: 6.2 M
Is this ok [y/N]:

 

→あるパッケージをインストールしたい場合に動くために必要な別のパッケージも必要となることがある。

→そのような別パッケージを「依存パッケージ」と呼んでいる

 

●通常の依存 Installing dependencies(依存関係)

→これらがないと動かなくなるから、絶対必要

●弱い依存 Installing weak dependencies

→なくてもクリティカルな致命傷にはならないけど、入れておいたほうがいい

 

→dnf updateでパッケージのバージョンを更新できる

→dnf removeでパッケージの削除

→dnf searchでパッケージの検索

→dnf infoでパッケージの詳細表示

 

・topコマンド

→CPU使用率、実行中のプロセスに対するCPU使用率など詳細な情報を表示できる

→qキーで抜けれる

 

・htopコマンド

→topコマンドが進化したコマンド

 

・常駐起動するソフトウェアをデーモンと呼ぶ

デーモン=守護神のように常に動いて常に守る役割を担っている

 

・systemctl list-units --type=service

→すべてのアクティブなサービス(ソフトウェア)をリストアップするコマンド

→すべてのサービスとその状態のリストを表示する

 

・systemctl status

→プロセスの詳細情報を表示できる

 

・systemctl start 起動

・systemctl stop 停止

・systemctl restart 再起動

・systemctl enable 自動起動

 

6/23(日)Linux学習

AWSのCloudShellを起動】

 

・グロブ

→特殊記号を使用して、ファイル名を指定すること

以下は、「aかbで始まり、その後は任意の文字列」(アスタリスク)で指定

[cloudshell-user@ip-10-130-60-84 ~]$ ls -l [ab]*
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 a1
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 b1
[cloudshell-user@ip-10-130-60-84 ~]$ 

 

※ a~cを指定する場合、[a-c](ハイフン)とすることで指定できる

※ [^ab](キャレット)とすることでab以外を指定できる

※ t?.shを指定した場合、?は任意の一文字として指定される

※ {b*,c*,*est*}を指定した場合、波括弧&カンマで複数条件で指定できる

 

grepコマンド

→ファイルまたは入力ストリームから、あるパターンに一致する行を表示する

以下は、/etc/passwdディレクトリ内のrootに一致する行を表示している

[cloudshell-user@ip-10-130-60-84 ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[cloudshell-user@ip-10-130-60-84 ~]$ 

 

・iオプション

→大文字・小文字を区別しない

・vオプション

→一致しない行を表示する

 

正規表現

・.(ドット)は任意の一文字

・*(アスタリスク)は直前の繰り返し

 

・lessコマンド

→非常に大きなファイルを表示する際に使用するコマンド

cloudshell-user@ip-10-130-60-84 ~]$ less /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
/etc/passwd (END) ←Qキーで終了できる(プロンプトに戻る)

※ スペースキー(表示を進める)、B(1画面分戻る)、F(1画面分進む)

 

→moreの拡張版がlessコマンド

→lessでファイル表示中に検索ができる→?を入力した後に指定する

※ N(ヒットした箇所へ移動)

 

・headコマンド

→ファイルの先頭部分を表示するのに便利なコマンド

以下は、/etc/passwdの中身を20行表示するように指定している

[cloudshell-user@ip-10-130-60-84 ~]$ head -20 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/usr/sbin/nologin
systemd-oom:x:998:998:systemd Userspace OOM Killer:/:/usr/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/usr/sbin/nologin
cloudshell-user:x:1000:996::/home/cloudshell-user:/bin/bash
[cloudshell-user@ip-10-130-60-84 ~]$ 

 

・tailコマンド

→末尾を表示(最新のログ等を表示するのに便利)

 

・権限について(パーミッション

→どの種類のオーナーがこのファイルに対して何ができるか

例)-rwxr-xr-x 1 root root

「-」ファイルの種類

「rwxr-xr-x」パーミッションの設定状態

※ 所有者 | 同グループ | その他

 r  ... Read 読み取り権限

 w ... Write 書き込み権限

 x ... Excute 実行権限

 - ... 権限なし

「1」ファイルがリンクされている数

「root root」所有者がrootユーザー、所有グループがrootユーザー

 

※ -rwxrwxrwx(フル権限)-777(2進数で表記されることも)r4,w2,x1

 

・chmodコマンド

→権限変更する際に使用するコマンド

 

・スーパーユーザ(ルートユーザ)への切り替え方法

以下は、セキュリティの高いファイルをcatコマンドで表示しようとした結果、

現在のアカウント(cloudshell-user)では開く権限がないと表示された

[cloudshell-user@ip-10-130-60-84 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[cloudshell-user@ip-10-130-60-84 ~]$ 

 

→sudoコマンドでスーパーユーザとしてコマンドを実行するように指定し、開けた

[cloudshell-user@ip-10-130-60-84 ~]$ sudo cat /etc/shadow
root:*LOCK*:14600::::::
bin:*:19387:0:99999:7:::
daemon:*:19387:0:99999:7:::
adm:*:19387:0:99999:7:::
lp:*:19387:0:99999:7:::
sync:*:19387:0:99999:7:::
shutdown:*:19387:0:99999:7:::
halt:*:19387:0:99999:7:::
mail:*:19387:0:99999:7:::
operator:*:19387:0:99999:7:::
games:*:19387:0:99999:7:::
ftp:*:19387:0:99999:7:::
nobody:*:19387:0:99999:7:::
dbus:!!:19859::::::
systemd-network:!*:19859::::::
systemd-oom:!*:19859::::::
systemd-resolve:!*:19859::::::
cloudshell-user:!!:19859:0:99999:7:::
[cloudshell-user@ip-10-130-60-84 ~]$ 

 

→ sudo su - を実行すると、ルートユーザーに切り替わる

[cloudshell-user@ip-10-130-60-84 ~]$ sudo su -
[root@ip-10-130-60-84 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@ip-10-130-60-84 ~]# exit
logout
[cloudshell-user@ip-10-130-60-84 ~]$ 

※ 「su 」(スイッチユーザー)、「- 」(設定を引き継ぐ)

  「exit」一つ前のユーザーに戻る

 

→sudoersファイルに指定されていない場合、passwordを入力するよう求められる

 ctrl + c で入力待ち状態を解除できる

 

Linuxに接続するには、SSH接続する必要がある

→ネットワークを介してコンピューターに安全に接続をして操作するためのツール

(パスワード認証が必要)

 

MacでEC2へ接続する方法

ssh -i linux-server-key.pem ec2-user@[パブリックIPアドレスを入力]

確認メッセージが表示されるため、yesを入力

権限が緩いと警告が表示されるため、chmodで権限変更

chmod 400 linux-server-key.pem(所有者のみ読み取れる)

ssh -i linux-server-key.pem ec2-user@[パブリックIPアドレスを入力]

→EC2インスタンスへログインすることができる

 

Windowsは「Teraterm」というソフトウェアを使ってログインする

Teratermを起動

ホストにパブリックIPアドレスを入力し、OK

サーバー名「ec2-user」を入力し、秘密鍵を選択し、設定した鍵を選択

サーバーに接続完了

 

※ ログの取得、ログの取得を中断、一時停止することができる

Linuxに対するファイルの送受信も可能

→鍵ファイルをドラッグアンドドロップすると送信先を指定できる(/tmpを指定)

[ec2-user@ip-172-31-32-225 ~]$ cd /tmp
[ec2-user@ip-172-31-32-225 tmp]$ ls
AWS_Key.pem
systemd-private-a944e37c7d144b73bb287233b3cda674-chronyd.service-AIsClk
systemd-private-a944e37c7d144b73bb287233b3cda674-dbus-broker.service-YHAhsw
systemd-private-a944e37c7d144b73bb287233b3cda674-policy-routes@enX0.service-aYlCYf
systemd-private-a944e37c7d144b73bb287233b3cda674-systemd-logind.service-1twLeZ
systemd-private-a944e37c7d144b73bb287233b3cda674-systemd-resolved.service-OPEiuk
[ec2-user@ip-172-31-32-225 tmp]$

 

→ダウンロードもできる(/tmp/AWS_Key.pemと指定するとDLできる)

 

※ ls -l → 「ll」ショートカットコマンドがある

 

ドットファイル

→ls -aコマンドで隠しファイルを表示できる

→ls -laコマンドで隠しファイルを詳細表示できる

 

・リダイレクションについて

→リダイレクション「>」は、llコマンドの実行結果をbファイルに書き込んでいる

※ 上書きされる

[cloudshell-user@ip-10-134-27-201 ~]$ ll > b
[cloudshell-user@ip-10-134-27-201 ~]$ ll
total 4
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 13:02 a
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 11:01 a1
-rw-r--r--. 1 cloudshell-user cloudshell-user 464 Jun 23 13:02 b
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 11:01 b1
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 11:01 c1
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 11:01 t2.sh
-rw-r--r--. 1 cloudshell-user cloudshell-user   0 Jun 23 11:01 test1.txt
[cloudshell-user@ip-10-134-27-201 ~]$ cat b
total 0
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 13:02 a
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 a1
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 13:02 b
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 b1
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 c1
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 t2.sh
-rw-r--r--. 1 cloudshell-user cloudshell-user 0 Jun 23 11:01 test1.txt
[cloudshell-user@ip-10-134-27-201 ~]$

 

→「>>」は追記の動きをするコマンド

※ 出力内容を指定したファイルの最後に追記する

 

・パイプについて

→一つのコマンドの出力を別のコマンドの入力として渡す

例)ls | grep b

lsで表示された内容をgrepに渡して、bが含まれる行を抽出する動きとなる

[cloudshell-user@ip-10-134-27-201 ~]$ ls | grep b
b
b1
[cloudshell-user@ip-10-134-27-201 ~]$ 

 

→ps auxコマンドは、現在Linux機で動いているプロセス(実行中のプログラム)を

 一覧表示できる

[cloudshell-user@ip-10-134-27-201 ~]$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cloudsh+       1  0.0  1.0 619896 43092 ?        Ssl  13:00   0:00 node /var/lib/amazon/cloudshell/on-container-launch.js
cloudsh+      21  0.0  0.0   7168  3296 ?        Ss   13:00   0:00 /bin/sh -c sudo dockerd | sudo tee /var/log/docker-daemon.log
root          23  0.0  0.2  17620  7876 ?        S    13:00   0:00 sudo dockerd
root          24  0.0  0.1  17620  7728 ?        S    13:00   0:00 sudo tee /var/log/docker-daemon.log
root          29  0.0  0.0   7864  1280 ?        S    13:00   0:00 /usr/bin/coreutils --coreutils-prog-shebang=tee /usr/bin/tee /var/log/
root          31  0.0  1.9 1391224 77896 ?       Sl   13:00   0:00 dockerd
root          50  0.4  1.1 1215072 44684 ?       Ssl  13:00   0:07 containerd --config /var/run/docker/containerd/containerd.toml
cloudsh+     161  0.0  0.0   4284  2904 pts/0    Ss+  13:00   0:00 tmux -l -f /var/lib/amazon/cloudshell/tmux.conf new-session -A -D -s 7
cloudsh+     168  0.0  0.0   4428  2960 ?        Rs   13:00   0:00 tmux -l -f /var/lib/amazon/cloudshell/tmux.conf new-session -A -D -s 7
cloudsh+     169  0.0  0.1   7564  4396 pts/1    Ss   13:00   0:00 -bash
cloudsh+     197  0.0  0.0   7648  2936 pts/1    R+   13:25   0:00 ps aux
[cloudshell-user@ip-10-134-27-201 ~]$ 

 

・wcコマンド(Word Count)

→何行あるか表示するコマンド