概要
Linuxを勉強していてこれだけは覚えたほうがいい基本的なコマンドについてまとめてみました。
Linuxの基本的な知識については過去の記事にあるので是非そちらも参照してみてください。
ショートカットキーについて 『Mac』
Linuxは、MacOSやWindowsOSと違ってキーボードだけで操作するCLI環境
になります。
コマンドは、キーボードから文字列として入力し実行することになるので、まずはキーボード操作が楽になるショートカットキーについてまとめていきます。
$ echo Hello
$
はプロンプトといいます。シェルがコマンドの入力を待っているという意味です。
プロンプトの後ろの方に入力してある<echo Hello>の部分をコマンドライン
といいます。コマンドを入力する場所です。
ではよく使うショートカットキーを下記表にまとめていきます。
ショートカットキー | 説明 |
---|---|
左右矢印キー | カーソル移動、一文字ずつ移動することができる |
Ctrl + a | 行頭に直接移動 |
Ctrl + e | 行末に直接移動 |
Esc押してからb | 単語単位で一つ前に移動 |
Esc押してからf | 単語単位で一つ後ろに移動 |
Ctrl + w | 一単語丸ごと削除 |
Ctrl + k | カーソル位置から行末までを削除 カット |
Ctrl + u | カーソル位置から行頭までを削除 カット |
Ctrl + y | 最後に削除した内容を挿入する ヤンク |
トラブル時には
キー操作をしてコマンドを入力していると、何らかの拍子にキーボードからの操作を受け付けないとか、プロンプトが返ってこなくなる時があります。、、、、僕もありました。
ほとんどが単純なキー操作ミスによるものです。Ctrl + s
を押してしまうと上記のような事が発生してしまいます。これは画面をロックする時に使います。ctrl + q
を押せばこのロックは解除できます。
ショートカットキー | 説明 |
---|---|
Ctrl + s | 画面をロック |
Ctrl + q | 画面ロック解除 |
コマンドが終了せずに、プロンプトが返ってこない
Linuxの一部のコマンドには実行した後、終了操作をしない限り、動き続けるコマンドがあります。
このようなコマンドはプロンプトが返ってこないので自分で終了させないといけません。
実行中のコマンドを強制終了させるには、Ctrl + c
を入力します。
$ ping 192.168.2.67
64 bytes from 192.168.2.67: icmp_sep=1 ttl=64 time=0.016 ms
64 bytes from 192.168.2.67: icmp_sep=1 ttl=64 time=0.016 ms
^C ⇦ここでCtrl + cを入力した
上記の例では、pingというコマンドを実行しています。このコマンドは一秒に一回の確認を永遠に続けるため、Ctrl + c
を押して強制終了させました。
このようにシェル上ではCtrl + c
の入力を^記号で表現
してくれます。
また、コマンドラインの途中まで入力したとこで入力内容の誤りに気がついたときは、ctrl + c
を入力する事で、入力内容を破棄して新しいコマンドラインに移る事ができます。
$ echo Hello ⇦最初から入力し直すために、Ctrl + cを入力
$ ⇦入力内容が破棄され、新しいコマンドラインになった
補完機能
CLI環境でコマンドを実行するには、コマンドをキーボートから入力しなければなりません。
しかし、長いコマンドを毎回入力するのは大変なのでbashというシェルには
コマンド入力の手間を省く補完機能
というものが備わっています。
bashの補完機能は、Tabキーを押す事で使用
できます。
$ ec ⇦ここでTabキーを押すと
$ echo ⇦echoと自動表示される
ちなみに複数候補がある場合は、警告音が鳴るのみでシェル上には何も変化が起こりません。
ここでさらにもう一度Tabキーを押すとコマンドの一覧リストが表示されます。
コマンド履歴
Linuxを使っていると、以前実行したことのあるコマンドラインを再び実行したいときがあります。
また、以前のコマンドラインを少し修正したいといった場面も出てきます。
bashというシェルは一度入力したコマンドラインの内容を自動的に履歴として記録しています。
コマンド | 内容 |
---|---|
Ctrl + p,または上矢印キー | 一つ前のコマンドラインを表示 |
Ctrl + n,または下矢印キー | 次のコマンドラインを表示 |
ディレクトリの移動
ディレクトリ移動と確認のコマンドについて
コマンド | 機能 |
---|---|
pwd | カレントディレクトリを表示する |
cd | カレントディレクトリを変更する |
ls | ディレクトリの内容を表示する |
・pwd
を入力する事で自分が今どこのディレクトリ(カレントディレクトリ)で作業しているのかが表示されます。
$ pwd
/home/abcd ⇦現在の自分の位置
・cd
を入力する事でカレントディレクトリを変更する事ができます。ディレクトリを移動するという事です。
$ cd /usr ⇦/usrディレクトリに移動
上記のようにコマンドの後ろにスペースを開けて指定する文字列(上記の例なら/usr)のことをコマンドライン引数
といいます。
正しく移動できたかどうかは先ほどのpwd
で確認します。正しく移動できていれば下記のように表示されます。
$ pwd
/usr ⇦usrディレクトリに移動できた
引数をつけずにcdコマンドを実行すると、ホームディレクトリ(ログイン時のディレクトリ)
へ移動します。
$ cd
$ pwd
/home/abcd
絶対パスと相対パス
カレントディレクトリの直下のサブディレクトリには/
をつけなくても移動できますが、もし、カレントディレクトリからみて離れているディレクトリに移動する時は絶対パス
または相対パス
で指定してあげないといけません。
・絶対パスはルートディレクトリを起点としてファイルやディレクトリのパスを示す事です。
ディレクトリが深い位置にある時は、長い文字列となり不便です。
・相対パスはカレントディレクトリを起点として表されるパスのことです。
少しややこしいですが、下記表で説明していきます。
例・・・/の下にhome→abcd→work というディレクトリ構造があったとします。
そしてworkディレクトリの中にはfile1というファイル、abcdディレクトリの中にはfile2というファイルがあるとします。
カレントディレクトリ(現在の位置)はabcdだとします。
相対パス | 絶対パス |
---|---|
../.. | / |
.. | /home |
. | /home/abcd |
workまたは./work | /home/abcd/work |
work/file1または./work/file1 | /home/abcd/work/file1 |
file2または./file2 | /home/abcd/file2 |
[.]
はカレントディレクトリを示しています。
[..]
はひとつ上のディレクトリを示しています。../../../../とすれば4つ上のディレクトリを指す事ができます。
Linuxにおいて相対パスと絶対パスの理解はかなり重要です。
lsコマンド
lsコマンドは、ファイルやディレクトリを一覧表示するためのコマンド
です。
引数を指定しない場合、カレントディレクトリのファイルとディレクトリを表示します。また、引数にディレクトリを指定すると、そのディレクトリに含まれるファイルやディレクトリを表示します。
$ ls / ⇦ルートディレクトリ(最上層)の内容を指定
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
lsコマンドはディレクトリの中身を示すもので、ファイルを引数に指定した場合、そのパスを表示してくれます。
$ ls /bin/cp ⇦ファイルを引数に指定
/bin/cp ⇦パスを表示
引数は複数指定することも可能です。この場合スペースで区切って指定しましょう。そうすると指定された引数全てに対して処理を行なって表示してくれます。
下記例では/と/usr、二つのディレクトリの内容が表示されています。
$ ls / /usr ⇦スペースで区切って複数指定
/:
bin dev.........
/usr:
bin games lib........
*(アスタリスク)と?(クエスチョン)について
lsコマンドの続きになりますが、いちいち全てのファイルを引数に並べるのは大変です。
そこでbashシェルには複数のファイルを指定するパス名展開
という機能があります。
*は任意の文字列
を表し、?は任意の一文字
を表します。
例えばbaで始まるファイルを一覧表示したい時は、下記のようにba*
と指定します。
$ ls ba*
base64 basename bash bashbug bashbug-64 ⇦baから始まるファイルが表示された
例えば?を利用して4文字のファイルを表示したい時は、下記のようにba??
と指定します。
$ ls ba??
bash ⇦4文字のファイルが表示された
なおここで紹介したパス名展開
は、lsコマンド特有のものではなくて、シェルの機能なので他の全てのコマンドでも利用する事ができます。
lsコマンドのオプション
ほとんどのコマンドは、コマンドライン引数に、ーではじまる追加の引数を指定する事ができます。これをオプション
といいます。
Linuxのコマンドは、オプションを指定する事でデフォルトとは違う動きをするようになります。
例えば-F
をつける事でファイルの種類を表示してくれます。
$ ls -F
bin@ dev/ home/ lib64/ mnt/ proc/ sbin@ ⇦後ろに記号がついて種類を表示している
・-Fオプションで表示されるファイル種別
種類 | 記号 |
---|---|
通常ファイル | なし |
ディレクトリ | / |
実行可能ファイル | * |
シンボリックリンク | @ |
mkdirコマンド ーディレクトリを作成ー
新しくディレクトリを作成するには、mkdir
コマンドを使います。
$ mkdir work ⇦workというディレクトリを作成
$ ls -F ⇦作成できているか確認
work/ ⇦作成できている
なお、既に同名のディレクトリが存在する場合、作成は失敗します。
ー深いディレクトリを作成するー
何階層もある深いディレクトリを作成するには、例えば$ mkdir report/2022/10
と指定します。
しかし、指定したパスの途中のディレクトリが存在しない場合、mkdirコマンド
はエラーとなってしまいます。
一気にディレクトリを作成したい時は、存在しないディレクトリも含めて作成する事ができる-p
オプションを使います。
$ mkdir -p report/2022/10 ⇦こうすれば、report,2022というディレクトリを事前に作成しなくても10を作成できる
touchコマンド ーファイルを作成ー
touchコマンド
は、引数で指定した名前のファイルを作成することができます。
複数のファイルを作成したい時はスペースで区切って入力してください。
$ touch file1 ⇦ファイル作成
$ ls -F ⇦ファイルが作成できているか確認
file1
touchコマンドは、既存の名前のファイルを作成しても、内容が上書きされたり削除されたりしない
ため安全です。
rmとrmdirコマンド ーファイル・ディレクトリの削除ー
ファイルの削除にはrmコマンド
を使います。
$ ls
file1 ⇦ファイルが存在する
$ rm file1 ⇦ファイル削除
$ ls
$ ⇦ファイルが削除されている
スペースで区切る事で、複数のファイルを削除することもできます。
しかし、rmコマンドでディレクトリを削除しようとするとエラーが出ます。
そこで-rオプション
をつける事でディレクトリも削除する事ができるようになります。この際ディレクトリ内にあるファイルやディレクトリも一緒に削除されてしまうので注意が必要です。
$ rm -r work ⇦workというディレクトリを削除、work内のファイル、ディレクトリも削除される
MacOSなどは、削除しても一旦ゴミ箱に入るため元に戻すことができるのですが、Linuxではrmコマンドを実行すると本当に削除されてしまうので実行前には細心の注意が必要です。
そこで、-iオプション
をつける事で、本当に削除してもよいか確認を求めるようになります。
基本的にはrmを実行する時は-iオプションをつけたほうがいいと思います。
ー空のディレクトリを削除ー
rmdirコマンド
は空のディレクトリを削除することができます。
rmとの違いは、中にファイルがあるディレクトリを削除しようとするとエラーが出る
点です。
$ rmdir work ⇦ディレクトリ削除、ここでworkディレクトリが空ではない場合エラーが出る
ちなみにLinuxでは、[.]が先頭についているファイルは隠しファイルとして認識されます。
rmdirを使う事で、隠しファイルに気づかず削除してしまうといったことを防ぐ事ができます。
catコマンド ーファイルの内容表示ー
ファイルの内容を確認するには、catコマンド
を利用します。
下記の例は、touchで作成したfile1というファイルの内容を、catで表示したものです。
$ touch file1 ⇦ファイル作成
$ cat file1 ⇦ファイルの内容確認
$ ⇦中身がないので何も表示されない
catコマンドに限った事ではないですが、ファイルを指定しないで実行してしまうと、プロンプトが返ってきません。
そうなってしまったときは、Ctrl + d
を押す事で解決します。
cpコマンド ーファイル・ディレクトリをコピーするー
ファイルをコピーするには、cpコマンド
を使います。
$ cp <コピー元> <コピー先>
下記例では、file1をfile2という名前でコピーしています。
$ cp file1 file2 ⇦file1をfile2という名前でコピー
$ ls -F
file1 file2 ⇦file2が作成された
次は、コピー先にディレクトリを指定した場合
です。コピー先にディレクトリを指定した場合、コピー元のファイルはそのディレクトリ内に同一ファイル名でコピーされます。
$ cp file1 work ⇦file1をworkディレクトリにコピー
$ ls work
file1 ⇦コピーされた
なお、ディレクトリ内にファイルをコピーする時は、複数のファイルをまとめてコピー
する事ができます。
下記例では、workディレクトリ内にfile1,file2,file3というファイルをコピーしています。
$ cp file1 file2 file3 work ⇦3つのファイルをworkディレクトリにコピー、引数の最後に指定したディレクトリにコピーされる
$ ls work
file1 file2 file3 ⇦コピーされた
cpコマンドは、コピー先のファイルが既に存在していたとしても、確認などせずそのまま上書きしてしまいます。
なお、-iオプション
をつける事でコピー先ファイルが存在する場合本当に上書きしてもよいか確認されるようになるので、基本は-i
をつけるようにしましょう。
cpコマンドでディレクトリをコピーしようとすると、エラーが出てしまいます。
そのため、ディレクトリをコピーする時は-rオプション
を指定する必要があります。
$ cp work1 work2 ⇦これだとエラーが出る
$ cp -r work1 work2 ⇦-rをつける事でディレクトリをコピーできる
この際、上記のwork2ディレクトリが既に存在している場合、work1はwork2の中に名前を変えずにコピーされます。
mvコマンド ーファイルの移動・名前の変更ー
ファイルの移動には、mvコマンド
を利用します。
mvコマンド
は、移動先がファイルなのかディレクトリなのかで意味が変わ
移動元・移動先の両方がファイルの場合
$ mv file1 file2 ⇦移動元・移動先の両方がファイル
$ ls
file2 ⇦file1がfile2という名前に変更された
上記のように両方がファイルの場合、file1がfile2という名前に変更されました。この場合、元のfile1は存在しなくなります。
移動先がディレクトリの場合
$ mv file1 work ⇦file1をworkディレクトリに移動
$ ls work
file1 ⇦移動した
このとき移動先のファイルが既に存在している場合、確認なしに上書きされてしまいます。なのでcpコマンド同様、-iオプション
をつけることをお勧めします。
ディレクトリを移動させる場合
この場合は、移動元にディレクトリを指定するだけでそのディレクトリの下にあるファイルもまとめて移動する事ができます。
lnコマンド ーリンクを張るー
lnコマンドは、リンクを張る
コマンドです。
リンクとは
ファイルには別名をつける
事ができます。この機能をリンク
と呼び、別名をつけることをリンクを張る
といいます。
リンクにはハードリンクとシンボリックリンクの2種類があります。
・ハードリンクを作成
$ ln file1 file2 ⇦ハードリンクfile2を作成
$ ls
file1 file2 ⇦file2が作成できた
このようにすることで、別のコマンドからfile2を指定すると、元のfile1にアクセスする事ができます。
では、今作ったハードリンクにアクセスしてみます。
$ cat file2
.......file1の内容が表示される
このようにハードリンクというのは、1つのファイルに複数の名前をつける機能
です。
ハードリンクを持つファイルの実体は、全てのハードリンクが削除
されたときになくなります。
・シンボリックリンクの作成
lnコマンドに-sオプション
をつける事で作成する事ができます。
$ ln -s file1 file2 ⇦シンボリックリンク作成
$ ls -l
file1
file2→file1 ⇦このようにどのファイルを示しているかがわかる
このようにシンボリックリンクとは、リンク先のパス名が書かれた小さな特殊ファイル
です。
エイリアス
lsなどのコマンドは、ファイル種別を表示する-Fオプションなどがよく使われます。しかし、毎回毎回-Fオプションをつけるのはなかなか面倒だと思います。そこで、alias
コマンドを利用することでls
と入力するだけでls -F
が実行されます。
$ alias ls='ls -F' ⇦エイリアスの設定
$ ls /
bin@ dev/ home/ lib64@ mnt/ proc/ run/ srv/ tmp/ var/ ⇦lsと実行するだけでファイル種別表示
上記のように、エイリアスというのはわかりやすい別名を与えて、コマンドを使いやすくする機能のことです。
lsコマンドでは、このほかにも次のようなエイリアスが使われます。
alias la='ls -a'
⇦全てのファイルを表示するという、laコマンド作成
alias ll='ls -l'
⇦ファイルの詳細情報を表示するという、llコマンドを作成
エイリアスの確認
コマンドがエイリアスなのかどうか確認するには、typeコマンド
を使用します。
$ type ls
lsは'ls -F'のエイリアスです ⇦lsがls -Fのエイリアスになっている事がわかる
$ type cp
cpは/bin/cpです ⇦エイリアスではないので、実行ファイルが表示される
エイリアスの削除
エイリアスを削除するには、unaliasコマンド
を使います。引数に削除したいエイリアス名を指定する事で削除する事ができます。
$ unalias ls
エイリアスを一時的に無効にする
一時的に何もオプションを付けずに元のコマンドのまま実行したい時があります。一時的に無効にする方法はいくつかあります。
まずは、コマンドをフルパスで指定する
方法です。
$ /bin/ls
次はコマンドの前にcommand
を追加する方法です。commandの後ろに指定したコマンドはエイリアスとはみなされません。
$ command ls
次はコマンドの前に\
(Macの場合option + ¥キー)を追加する方法です。1文字追加するだけでいいのでこれがおすすめです。
$ \ls