シェル基礎知識 ~コマンドライン操作~

カーソル操作

カーソルの移動

  • 後に移動 Ctrl + b
  • 前に移動 Ctrl + f

bは[Backward、fは[Forward]という意味です。

  • 行頭へ移動 Ctrl + a
  • 行末へ移動 Ctrl + e
  • 後方に単語単位での移動 esc + b
  • 前方に単語単位での移動 esc + f

esc + b はescを押しながらではなく、 押した後にbです。

文字の削除

  • 後方に1文字削除 Ctrl + h
  • カーソル位置の1文字削除 Ctrl + d
  • 後方にスペース区切りで1単語分削除 Ctrl + w

  • カーソル位置から行末までカット Ctrl + k

  • カーソル位置から行頭までカット Ctrl + u
  • カットした文字を挿入(ヤンク) Ctrl + y

WindowsやMacOSではヤンクのことをペーストと言います。

コマンド履歴

  • 1つ前の履歴 Ctrl + p または↑
  • 次の履歴 Ctrl + n または↓

  • 履歴検索 Ctrl + r

  • 検索結果を残したまま、コマンドラインに戻る Escキー
  • 検索結果を破棄し、コマンドラインに戻る Ctrl + g

ファイル操作

  • フォルダを作成
$ mkdir dir1

# 深いディレクトリを一度に作成
$ mkdir -p dir1/subdir1
  • ファイルを作成
$ touch test.txt
  • ファイルやフォルダの削除
# ファイルの削除
$ rm test.txt

# フォルダの削除(フォルダ配下のファイルなども削除される)
$ rm -r directory

# 空のフォルダのみ削除
$ rmdir empty_dir
  • ファイルの中身を表示
$ cat test.txt
$ cat dir/test.py
  • ファイルをスクロール表示
$ less test.txt
$ less dir/test.py
  • lessコマンド内で文字列検索
$ less dir/test.txt
... 省略 ...
/(検索したい文字列)
  • リンクを張る
# シンボリックリンク
$ ln -s dir1/subdir1/file1.sh linkedfile1
$ ls -l
lrwxrwxrwx 1 root root   17 Mar 29 06:41 linkedfile1 -> dir1/subdir1/file1.sh
  • 検索

1 find

$ mkdir -p dir1/subdir1
$ touch test.txt dir1/subdir1/test2.txt

# カレントディレクトリから拡張子txtを検索
$ find . -name '*.txt'
./dir1/subdir1/test2.txt
./test.txt

# カレントディレクトリから下にあるディレクトリを検索
$ find . -type d
.
./dir1
./dir1/subdir1

2 locate

# まずはバージョンの確認
$ locate --version

# なければインストール
$ yum install mlocate
$ updatedb

# bashを含むパス名を検索
$ locate bash
/etc/bash_completion.d
/etc/bashrc
/etc/skel/.bash_logout
 ~~~ 省略 ~~~

# ファイル名のみを対象に検索
$ locate -b python
/usr/lib64/libpython3.6m.so.1.0
/usr/lib64/libpython3.so
/usr/lib64/python3.6
 ~~~ 省略 ~~~

# 拡張子.pyのファイルを検索
$ locate '*.py'/usr/lib/python3.6/site-packages/easy_install.py
/usr/lib/python3.6/site-packages/dnf/__init__.py
/usr/lib/python3.6/site-packages/dnf/base.py
 ~~~ 省略 ~~~

locateコマンドは専用のデータベースから検索しているのに対して、 findはディスクを毎回スキャンして検索するので、 locateの方が圧倒的に速度が速くなります。

locateはupdatedbコマンドによって、データベースが作成されるので、 ファイルを新しく作成した後にupdatedbを入力しなかったり、 updatedbの後にファイルを削除したりすると、 locateコマンドの検索結果が実際と合わなくなります。

updatedbはデフォルトで毎日実行される設定になっています。