Bashシェルの基本機能とコマンド操作

ハードウェア、カーネル、そしてシェル

コンピュータシステムにおいて、シェル(Shell)はユーザーがオペレーティングシステム(OS)と対話するためのインターフェースです。ユーザーが入力したコマンドをシェルが受け取り、それをカーネルに伝え、最終的にハードウェアを操作します。このように、シェルはシステムの最外層に位置し、「殻(shell)」のようにカーネルを包み込む役割を果たします。

シェルを学ぶ理由

Linuxサーバー環境ではGUIが省かれ、軽量かつ効率的な運用のためにシェルによる操作が主流です。また、高度な設定や自動化スクリプトの実行にもシェルが不可欠です。

Bashシェルの主な機能

  • 履歴コマンド:↑↓キーで過去のコマンドを再利用可能
  • 補完機能:Tabキーでコマンドやファイル名を自動補完
  • エイリアス:頻繁に使うコマンドに短縮名を設定可能(例:alias ll='ls -l'
  • ワイルドカードとスクリプト対応:柔軟なファイル操作と自動化が可能

コマンドの種類確認(type)

type コマンドで、指定されたコマンドが組み込みか外部かを確認できます。

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

シェル変数の扱い

変数は一時的なデータ格納に使用され、環境変数(例:PATH, HOME)はシステム全体で共有されます。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

$ name="taro"
$ echo $name
taro

$ msg="言語: $LANG"
$ echo $msg
言語: ja_JP.UTF-8

$ raw='言語: $LANG'
$ echo $raw
言語: $LANG

$ unset name

環境変数と特殊変数

env で環境変数一覧、set で全変数(ユーザ定義含む)を表示できます。

$ echo $$    # 現在のプロセスID
1234

$ false
$ echo $?    # 直前のコマンドの終了ステータス
1

ユーザー入力(read)

read で標準入力を変数に代入できます。

$ read input
こんにちは
$ echo $input
こんにちは

変数の型宣言(declare)

declare で変数の属性を指定できます。

$ sum=100+200
$ echo $sum
100+200

$ declare -i sum=100+200
$ echo $sum
300

# 配列の例
$ arr[0]="apple"
$ echo ${arr[0]}
apple

リソース制限(ulimit)

ulimit -a で現在のプロセスリソース制限を確認できます。

変数のパターン置換

$ file="/var/spool/mail/root"
$ echo ${file##/*/}
root
$ echo ${file%/*}
/var/spool/mail

コマンド履歴(history)

デフォルトで最大1000件のコマンドが記録され、history で参照可能です。

リダイレクト(>, >>, <)

  • cmd > file:標準出力を上書き
  • cmd >> file:標準出力を追記
  • cmd 2> err.log:エラー出力をファイルへ
  • cmd | tee file:画面表示とファイル保存を同時に行う

複数コマンドの連結

  • cmd1 ; cmd2:常に両方実行
  • cmd1 && cmd2:cmd1 成功時のみ cmd2 実行
  • cmd1 || cmd2:cmd1 失敗時のみ cmd2 実行

パイプとフィルタリング(cut, grep)

$ echo $PATH | cut -d: -f1,3
/usr/local/sbin:/usr/sbin

$ ps aux | grep ssh

テキスト処理(sort, uniq, wc)

$ sort /etc/passwd

$ last | cut -d' ' -f1 | sort | uniq -c

$ cat file.txt | wc -l

文字変換・結合(tr, join, paste)

$ echo "hello" | tr 'a-z' 'A-Z'
HELLO

$ join -t: /etc/passwd /etc/shadow

$ paste file1 file2

タグ: bash Shell linux コマンドライン 環境変数

7月29日 22:48 投稿