29
35

Linuxの基本的なコマンドを解説してみた

Posted at

はじめに

Linuxコマンドについて学習したので、いくつかコマンドを紹介していきます。
改めて調べていくと、よく使うコマンドでも「こんな便利な機能あったのか~!」となるものが多くありました。

前提

まず、コマンドの説明時に登場する単語や記号の意味を簡単に説明していきます。

ディレクトリ

Windowsでのフォルダにあたるものです。
呼び方が違うだけと思っていただいて差し支えありません。

図を使いながらがわかりやすいかと思いますので、下の図を見てください。
dhirectorytree.png
自身がcurrentに居るとして、

  • currentはカレントディレクトリ
  • parentは親ディレクトリ
  • childは子ディレクトリまたはサブディレクトリ

と呼ばれます。

また、当画像で一番上の階層であるrootはルートディレクトリと呼ばれており、実際にLinuxを利用する際は/で表されます。
Windowsで表すと、C:\がこれにあたりますね。
違いとしては、WindowsではC:\D:\など複数ルートディレクトリが存在する場合がありますが、Linuxではルートは/の1つだけです。

そして、図には現れていないのですが、/home/<ログインユーザー名>のディレクトリをホームディレクトリと呼びます。
基本的に、自身の作業を行う場合は、このホームディレクトリで行うことが多いです。

相対パス/絶対パス

ディレクトリの場所を記述する方法として、相対パス絶対パスがあります。

例えば、道を説明するにあたって、近所であれば
「2個目の角を左に曲がって、1個目の信号を右に曲がって右手の建物です。」
のように、自身の現在地基準で場所を表すかと思います。

また、離れた場所でよく知らない土地の場合、
「〇〇県△△市...」
のように、住所で示すかと思います。

これらの前者の考え方が相対パス、後者が絶対パスにあたります。

先程のディレクトリの説明に使った図に再登場してもらいましょう。
dhirectorytree.png

この時、currentからjennyへのパスを示したいとします。
相対パスの場合、../brother/child/jenny
絶対パスの場合、root/parent/brother/child/jenny
となります。

標準出力/標準入力/標準エラー出力

標準出力

コマンドなどにおいて、結果がコンソールに表示される場合がありますが、おおよそ、その出力のことです。
例えば、下記画像の赤枠で囲った範囲が標準出力です。
標準出力.png

標準入力

外部からデータを受け取る方法で、キーボード入力やファイルの内容をプログラムに提供します。
こう書かれてもピンと来ませんね。

紹介するコマンドには含まれていないのですが、echoというコマンドは、標準入力をそのまま標準出力として返してくれます。

例えば、echo Hello!と送ると、Hello!が標準出力として表示されます。
この時、echoに標準入力としてHello!が提供されています。

標準エラー出力

標準出力の際、おおよそ、と記述しました。
表示される見た目は同じようなものなのですが、エラーメッセージは標準出力とは区別されています。

例えば、存在しないディレクトリを削除しようとすると、下記の赤枠ような標準エラー出力が表示されます。
標準エラー出力.png

記号の意味

コマンド使用時に登場する記号がいくつかあるので、さっくりと説明していきます。

記号 読み方 意味
> command > file リダイレクト コマンドの標準出力をファイルへ出力する(上書き)
>> command >> file リダイレクト コマンドの標準出力をファイルへ出力する(追記)
< command < file リダイレクト ファイルから標準入力をコマンドへ供給する
| command1 | command2 パイプ command1の標準出力をcommand2の標準入力として渡す
&& command1 && command2 アンパサンド command1が正常終了した場合、command2を実行します

コマンド紹介

ここから、コマンドの紹介を行っています。

コマンド例の書き方として、以下のようなルールで記載しています。

  • []囲いは省略可。
  • <>囲いは必須。

cd

current directory

cd [オプション] [ディレクトリ]

ディレクトリの移動に使用します。
オプションを使うことはまずないと思います。
実務でもオプション指定したことは、今のところありません。
それよりも、パスの指定を効率よく行えることのほうが大切。

それには、いくつか特殊な書き方を覚えて置く必要があります。

書き方 意味 概要
. カレントディレクトリ 現在のディレクトリ
.. 親ディレクトリ 1つ上のディレクトリ
/ ルートディレクトリ 「/」ディレクトリ
~ ホームディレクトリ 「/home/[ユーザー名]」ディレクトリ

例えば、

  • /etcディレクトリ下のファイルにアクセスしたい際、全く違う階層からでもcd /etc/...のように書ける。
  • 自身の作業ディレクトリ1へ移動したい場合、cd ~/...のように書ける。
  • 親ディレクトリの持つファイルにアクセスしたい場合、cd ../<ファイル>のように相対パスで指定。

などを覚えておくと、素早く移動したいパスを指定できるようになります。
また、ホームディレクトリへの移動については、cdだけの実行でも移動できます。

pwd

print working directory

pwd [オプション]

自分がどのディレクトリで作業しているのか、パスを返してくれます。
オプションを使うことはまずないと思います。
実務でもオプション指定したことは、今のところありません。

ls

list説もあれば、
list segments説もあります。

segmentsについては、自分の産まれるはるか昔の1960年代開発されたMulticsというOSがあり、そこではsegmentsがファイルを指していたそうな…
要は、ファイルをリストする、なるほどですね。

ls [オプション] [ディレクトリ]

ディレクトリを指定した場合、指定ディレクトリ下のコンテンツが表示されます。
省略した場合、カレントディレクトリのコンテンツが表示されます。

オプションについては、-alはとりあえず付けとけ、くらいよく使います。
いくつか、自分が実際使ってるなーと思うオプションを以下にあげます。

オプション 意味
a 隠しファイル2を非表示にしない
l ロング形式で表示
r ソートを逆順(降順)にする
t タイムスタンプで昇順ソート

ロング形式ってなんぞ?って感じだと思いますので、イメージ画像を貼ります。
lsオプションl.png
注目する箇所を囲んでいます。

r/w/x/-が書いてある、緑=ユーザー(所有者) 黄=グループ 赤=その他 のパーミッションをそれぞれ表しています。
また、パーミッションの囲いと同じ色でrootzumiが囲まれていますね。
対応する色が、それぞれユーザー名(所有者名)、グループ名です。

そして、r/w/xパーミッションって何?って話ですが。

表示 意味
r 読み込み
w 書き込み
x 実行

の許可(パーミッション)があるか?を表しています。
この画像の場合、その他のユーザーにはほぼ書き込み許可がありません。
例え、vimでテキストを開いても、読み取り専用でしか開けないということになります。

プログラムからファイルやフォルダの生成をしたりする際、これが原因でうまくいかない事もあります。
確認方法、覚えておきましょう。

変更の仕方は、後述のchmodで説明します。

mkdir

make directory

mkdir [オプション] <ディレクトリ>

ディレクトリを作成する際に使用します。

また、深いディレクトリを作成したい場合に、

mkdir totemo
cd totemo/
mkdir mendoi

なんて書きたくないですよね。

-pオプションで、目的のディレクトリまでの間がなかった場合、作ってくれます。

mkdir -p korenara/rakudane

rmdir

remove directory

rmdir [オプション] <ディレクトリ>

空のディレクトリ専用の削除コマンド。

空でないと削除できないのでセーフティではあるものの、あまり使っていません。

cat

concatenate

cat [オプション] [ファイル]

ファイルの内容を標準出力に連結(結合)します。

自分は、中身を見る前から内容が少ないとわかっているときくらいしか使わないです。
大抵の場合、後述するlessコマンドを使っています。

正直、あまり使わないので使い道が浮かばないのですが、
cat 20230815.log 20230816.log 20230817.log > 20230815-17.log && less 20230815-17.log
のように、3日分まとめてみたい時なんかに、catで3ファイルを連結してファイルに出力し、lessで出力後ファイルを見るとかでしょうか。
そうすると、1ファイルとして表示でき、検索を各ファイルでやって目的のログを探すような手間が省けるので。

less

別にあるmoreコマンドに対してlessということのようです。
そのmoreの由来は調べてもわかりませんでした。。。

less <ファイル>

指定のファイルを表示します。

起動が早く、vim同様に検索やファイルの先頭/末尾への移動コマンド等が使えます。
これらの操作方法は、前回記載しているので割愛します。

また、lessでファイルを表示した状態でshift + fを入力すると、リアルタイムな変更を読み込んでくれます。
次に紹介するtailコマンドにfオプションを付けたときと同様の動きですね。

更に、lessの場合は目的のログが表示された瞬間にctrl + cで読み込みを止められるので、ログの更新量が多く、すぐ流れてしまうような時に役立ってくれそうです。

tail

tail [オプション] [ファイル]

オプションなしだと、ファイルの末尾から10行を表示します。

tail -n [行数] [ファイル]

nオプションで、表示する行数を指定できます。

自分は、tail -fでログなどのリアルタイムな更新があるものを見るのに使っています。
lessでもできるのですが、忘れがちで気づけばこっちを使ってたりしますw

touch

touch [オプション] <ファイル>

新しい空のファイルを作る際に使われるイメージが強いです。
既存のファイルに対して実行すると、Access TimeModify TimeChange Timeが現在日時に更新されます。

今のところ、タイムスタンプの更新をしたいという場面に出会っていませんが。
aオプションでファイルへのAccess Timeを現在時間に更新。

touch -t <[[CC]YY]MMDDhhmm[.ss]> <ファイル>

で、Access TimeModify Timeを指定時刻に変更できます。

なんだか色んなタイムスタンプが出てきましたが、lsでデフォルトで表示されているのは、Modify Timeです。
(※オプションで他のタイムスタンプを表示することもできます。)
その他をまとめて確認したい場合、stat <ファイル>で見ることができます。

また、ファイル作成時に、大量に作りたいときなんかに楽に書く方法として、下記のような書き方がかあります。

touch {1..100}.txt

rm

remove

rm [オプション] [ファイル]

ファイルの削除を行うコマンドです。
オプションを付けることで、ディレクトリの削除や、ディレクトリごと中身を削除することもできます。

よく使うなーというオプションをあげておきます。

オプション 意味
i 削除の前に確認を行う
r 再帰的に削除を行う
f 確認なく強制的に削除を行う
v 削除したものを表示する

先に出てきたrmdirでやりたいこともできるので、実際こちらを多く使うことになります。
ただし、いくつか気をつけなければいけないことがあります。

  • 基本的に、削除すると復元できない。
  • 確認なく削除させることができる。

つまり、下手をすると必要なファイルを、まるっと完全に消してしまうことがあるということです。
やってみたという記事を書かれている方がいらっしゃいましたので、貼らせていただきます、

事故を防ぐために事前の対策と、日頃から意識していることです。

  • 入れて良い環境であれば、gomi3コマンドをインストールし、rmのalias4に設定しておく。
  • rmのaliasにrm -iを設定しておく。(設定していても、-fを書くと後勝ちなので、確認されません。)
  • -rfはむやみに付けない。
  • -fを使用する際は、可能な限りコマンドの最後に付けるようにする。
  • -vを使用し、何を削除したのか表示させる。
  • Enterキーを誤って押下する可能性を下げるために、右のshiftキーは使わない。

今となってはこういった対策がとれますが、初期はiオプションなんてなかったそうです。
恐ろしいですね。

mv

move

mv [オプション] <対象> <移動先>
mv [オプション] <対象> <移動先ディレクトリ>
mv [オプション] -t <移動先ディレクトリ> <対象>

ファイルのリネームや、移動を行います。
ディレクトリごと移動することや、複数対象をまとめて指定のディレクトリ下へ移動することもできます。

使うオプションは、おおよそrmコマンドと似通っています。

オプション 意味
i 削除の前に確認を行う
r 再帰的に削除を行う
f 確認なく強制的に削除を行う

rmコマンド程ではないですが、こちらも少し注意点があります。

  • 確認なく既存ファイルを上書きする場合がある。
  • パーミッションは基本的に移動前のものを引き継ぐ。

こちらの対策や、注意していることです。

  • mvのaliasにmv -iを設定しておく。(設定していても、-fを書くと後勝ちなので、確認されません。)
  • -fを使用する際は、可能な限りコマンドの最後に付けるようにする。
  • 先に、移動先に指定したい名前と同じものがないか確認しておく。

cp

copy

cp [オプション] <対象> <移動先>
cp [オプション] <対象> <コピーディレクトリ>
cp [オプション] -t <コピー先ディレクトリ> <対象>

ファイルのコピーを行います。
ディレクトリごとコピーすることや、複数対象をまとめて指定のディレクトリ下へコピーすることもできます。

使うオプションは、おおよそrmコマンドと似通っており、mvコマンドと被るので省きます。

注意点や対策も、mvコマンドと同じ内容になるので、割愛します。

ちょっとした書き方のことですが、下記のように書くこともできます。
これは、mvも同様です。

cp {before,after}.txt

ln

link

ln [オプション] <対象> <リンク名>
ln [オプション] <対象> 
ln [オプション] <対象> <ディレクトリ>
ln [オプション] -t <ディレクトリ> <対象>

ファイルのリンクを作ることができ、リンク名を指定することも可能です。
複数ファイルのリンクを、指定のディレクトリ下に1コマンドで作成したりもできます。

自分は、sオプションのシンボリックリンクくらいしか使った事がないです。
シンボリックリンクとは、馴染みがあるところでいうとWindowsでのショートカットのようなもので、実体(ショートカットで指定しているもの)が消えたり、場所が変わるとリンクが壊れます。

これとは異なりオプション無しで使用すると、ハードリンクを作成します。
ハードリンクは余り馴染みのあるところではないのですが、シンボリックリンクとの違いとしては、リンク元を削除してもリンク先は残ります。
自分はほとんど使った記憶がありません。

find

find [探す場所] [<何で検索するか> <検索値>]

探しものを検索できます。
名前やファイル種別、サイズなどを検索値として使え、組み合わせることで色々な検索が可能です。

find [探す場所] -name "*.<拡張子>"

のように、ワイルドカードを利用し、特定の拡張子が付いたファイルを探すような使い方が多いでしょうか。

使い道の多いコマンドですので、何か探しものがある際、「どうやったら欲しいものが見つけられるかな?」と考えながら、慣れていきましょう!

chmod

change mode

chmod [オプション] <パーミッション> <対象>
chmod [オプション] --reference=<参照元> <対象>

パーミッションの変更を行います。
自分で指定する方法と、参照元と同じ設定にする方法があります。

lsコマンドの説明時に、rwxのそれぞれの意味、また所有者/グループ/その他でパーミッションが分かれているということでした。
今回は、それの設定を行います。

パーミッション設定の記述方法が2通りあります。

  • chmod ①②③ <対象>
    ①はu/g/oで指定(ユーザー/グループ/その他)。複数指定も可。
    ②は+/-/=で指定(追加/削除/設定)
    ③はr/w/xで指定(読み込み/書き込み/実行)。複数指定も可。
example
// ユーザーに実行許可を与える場合
chmod u+x test.txt
  • chmod <オクタルモード> <対象>
    オクタルモードという言葉自体は覚えておく必要はないと思います。
    r=4w=2x=1として扱い、設定したい権限の数値の合計を設定値して使います。
    また、ユーザー/グループ/その他を全て設定するため、3桁の数字がオクタルモードの箇所に入ることになります。
example
// ユーザーには全て許可、グループ/その他には読み込みと実行を許可する場合
chmod 755 test.txt
//    ugo

また、Rオプションを使用することで、指定ディレクトリ以下に全て同じ設定を行います。

chown

change owner

chown [オプション] [ユーザー] [:[グループ]] <対象>
chown [オプション] --reference=<参照元> <対象>

対象のユーザーやグループを変更します。
自分で指定する方法と、参照元と同じ設定にする方法があります。

chmod同様、Rオプションを使用することで、指定ディレクトリ以下に全て同じ設定を行います。

ps

process status

ps [オプション]

プロセスの確認を行います。

プロセスとは、コンピュータ上で実行されるプログラムの個別の実体を指します。
Windowsだと、ctrl + shift + ESCで起動できるタスクマネージャを開くと、プロセスが見れるので、それをイメージとして持っていただくと良いと思います。

このコマンドは大抵の場合、auxオプションを付けて使用します。

オプション 意味
a 全てのユーザーのプロセスを表示
u ユーザー指向の詳細情報表示
x 制御端末がないプロセスも表示

aオプションはわかるとして、u/xの説明はよくわからないですね。

さっくりとした説明ですが、
uは、CPU使用率やメモリ使用率など、ユーザーの知りたい情報を表示してくれる。
xは、ユーザーの意識しないところで動作しているプロセスを表示してくれる。
と認識してもらえればいいかと思います。

まとめると、意識していない範囲を含めてプロセスの状態を見やすく、全ユーザー分抜けなく表示してくれるので、使い勝手の良いオプションとなっています。

kill

kill [オプション] <pid> [...]

プロセスを◯すことが出来ます。
[...]の部分は、複数のpidを同時に記載し、複数プロセスに対して行うことが可能という意味です。

このpidですが、process idの略であり、先程のpsコマンドで表示されています。
なので、下記のような流れで使うことになると思います。
(※実際は、その前にどのプロセスをどういった理由で削除するのかみたいな話もあり、それを調べる工程もあるわけですが…)

example
// まず、プロセスを確認
ps aux
// ずらっとプロセスが表示される
// killコマンド使って削除する
kill <消したいプロセスのpid>

上記の例ではオプション無しですが、それは-15を付けていると見做されます。
この-15というのはシグナルを指しており、どのようなものがあるかはkill -l(-Lでも良い)で一覧表示されます。

よく使われるのはオプション無しの-15SIGTERMと、-9SIGKILLです。
余り正確なアナロジーとは言えないのですが、SIGTERMはシャットダウン、SIGKILLは電源ぶち抜きみたいなものです。

名前の通り、強力なコマンドですので、使用時は誤ったプロセスに対して行わないよう気をつけましょう。
また、基本的にはSIGTERMを使い、それでも終了できない時にSIGKILLを使用するようにしましょう。

man

mannual

man <コマンド>

ここまでいくつかのコマンドを説明してきて、個人的によく使っているなという例をあげてきました。
しかし、その他にも多くの使い方があります。

そこで、このmanコマンドを使用すると、使用にあたっての詳細情報が見られます。
「こんな機能ないかな?」と思ったら、使ってみて下さい。

  1. 通常、自身の作業スペースは/home/[ユーザー名]ディレクトリ下を使用します。

  2. .から始まるファイルのことで、このオプションを付けないと表示されません。

  3. ゴミ箱機能が使えるので、誤って消しても復元できるようになります。

  4. あだ名みたいなもので、rmコマンドを打ったとしても、gomiコマンドを実行します。

29
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
35