前書き
この記事はLinuxを勉強し始めた時の自分のように、「Linux」 ってどこかで聞いたことあるけど触ったことない、もしくはプログラミング初心者さんに向けて記載しております。
また、少し触ったことあるけどいまいちメリットがわからなかった方にも是非読んで欲しい内容です。
少し長い内容になりますが、基本的なコマンドとそれを理解するのに必要な最低限の知識を詰め込みましたので、是非最後までお付き合いください。
なぜLinuxを触る必要があるのか
おそらく多くのプログラミング初心者さんは少なからずこの疑問があるはずです。自分もそうでした。ですので、まずはLinuxが何か?そしてなぜLinuxを触るのか?というところから簡単に説明した後に、厳選した 「初心者が覚えるべき操作」 を解説していきたいと思います。
Linuxとは?
- LinuxはOS(MacやWindows)の一種でコンピューターを動かすための基本的な無料ソフト
- 元々有料だったUNIXの設計思想を受け継ぎ、フィンランドの学生、Linus Torvalds(リーナス・トーバルズ)によって新たに開発されたオープンソースのオペレーティングシステム
- 世界中のサーバーや携帯電話、ネットワークルーターなどの組み込みシステム、IOTデバイスなど様々な用途で使用されている
Linuxのメリット
- 無料で使える
- 環境依存性が低い(Mac,Win問わず使用可能)
- Vi操作と同様にほとんどの操作がコマンドライン上でマウスを使用することなく可能
- 世界中で使用されていて信頼性が高く、長期間の稼働が可能でセキュリティ面でも優れている
Linuxのデメリット
- 初めて触る人にとってはハードルが高い。(コマンドライン上で文字入力のみで操作していくから)
- Microsoft Officeが動作しない
- 画像、音楽、動画ファイル編集が苦手
正直デメリットは一つ目がかなり大きいのかなと思います。
今まで、マウス操作してきた初心者さんは、いきなりコマンドライン上で文字だけで操作することがあまりイメージできないですよね。
自分もそうでしたが、基本的なコマンドだけでも覚えるとメチャクチャ効率的だし絶対に覚えるべき!という認識に変わりました。
最初は慣れなくて難しいと思いますが、Vim操作と同じで慣れたら超がつくほど効率的です。
是非、この記事で基本操作だけでも、手を動かしながらご自分のPCで試してみてください。
実際に手を動かしながらでないと、便利!や効率的!の意味が理解できないからです。
Macの方はCommand + スペースキー
で「Terminal」と打てばコマンドラインが起動できます。
Winの方はコマンドプロンプトかターミナルで操作可能ですが、Macと違って文字操作が少し違いますので、無効な操作が出てきた場合は調べながら実施しましょう。
必要前提知識
早速コマンド操作の説明に行きたいところですが、コマンドライン操作をする上でディレクトリとPathについては最低限知っておかないといけません。
これを理解しておかないと、知らない外国の土地にGoogleマップなしで放り込まれるような状態になってしまうので、最低限の知識だけつけておきましょう。
ディレクトリについて
Linuxではファイルやディレクトリ(フォルダ)は階層構造を持っていて、すべてのファイルやディレクトリはルートディレクトリ(/)を起点として配置されています。
WinだとCドライブやDドライブなど複数の階層構造がありますが、Linuxはルートディレクトリを起点としている1つの階層構造しか持っていません。
例えるとLinuxは一つの木の幹から全てのディレクトリやファイルが枝分かれしていくイメージです。
これがメチャクチャ便利で、根本が1本というシンプルな構造ですのでファイルやディレクトリの配置を頭の中で考えやすくなります。
Pathについて
Path(パス)は、ファイルやディレクトリの位置を示すための指定方法です。
先ほど説明した通り、すべてのファイルやディレクトリはルートディレクトリ(/)を起点として位置を特定できます。 Pathを使うことでコマンドラインから特定のファイルやディレクトリにアクセスしてコマンドを実行できます。
例えば、今までマウスを使用していた方は、 「デスクトップにある"ユーザー"フォルダを開き、その中にある"2023"フォルダを開き、さらにまたその中にある"資料"というファイルを開いて編集する。」 という一連の動作が、すべてコマンドライン上でできてしまうということです。
絶対パスと相対パス
Pathには絶対パスと相対パスの2つの種類があります。
-
絶対パス:
一番元のルートディレクトリ(/)を起点にファイルやディレクトリの位置を完全に指定する方法です。例:/home/usr/documents/file.txt
-
相対パス
現在の作業ディレクトリ(現在いる場所)を基準にしてファイルやディレクトリの位置を指定する方法です。例えば、いま「documents」というディレクトリ内にある「file.txt」というファイルを編集しているとするなら、「documents」が現在いる場所(以降カレントディレクトリという)になります。
この場合の相対Pathはdocuments/file.txt
になります。
一つ前の絶対Pathと比較してみましょう。
絶対Pathは/home/usr/documents/file.txt
(一番元のディレクトリから見た位置)
相対Pathはdocuments/file.txt
(現在いる場所を基準とした位置)
初心者の方はこの時点で混乱するかもしれませんので、もっと簡単に考えましょう。
例えると 「住所の伝え方」 が違うだけと思ってください。
東京都港区新橋6-18-5にいたとして、東京の人と会話している時なら「新橋6-18-5」(相対Path)って言えばわかりますよね。でも地方の東京をほとんど知らないひとには「東京都港区新橋~」(絶対Path)と言わないと伝わらないのと同じです。
状況によってコンピューターに自分がアクセスしたい場所を伝えるのに、絶対Pathと相対Pathを使い分けないといけないことがあるので覚えておきましょう。
相対Pathを使用することの方が多いかなと思います。
ディレクトリについて
-
ルートディレクトリ(/):
Linuxの最上位ディレクトリです。
すべてのファイルやディレクトリはルートディレクトリ以下に配置されています。
ここから /home、/etc、/var、/usr など、重要なディレクトリが枝分かれしていきます。 -
ホームディレクトリ(/home/ユーザー名)「~(チルダ)」で表せる:
※ このディレクトリの場所を表す階層構造がPathですね。
ホームディレクトリは各ユーザーの個人的なディレクトリです。大体の初心者に馴染みがあるディレクトリかと思います。
例えばデスクトップは/home/ユーザー名/Desktop
もしくは~/Desktop
というPathで表せます。
もし、デスクトップに「2023資料」というディレクトリがあったとしたら、~/Desktop/2023資料
となるわけです。
【厳選】初心者が覚えるべき基本的なコマンド
さあ、ここからは「これだけは使いこなせるようにしよう!」というコマンドたちです。
Vim操作と同様に、コマンドの種類や組み合わせを列挙したらキリがないので、厳選して解説いたします。
そして、各コマンドですが、単体でも使える+便利なオプションが存在します。
それらも同時に見ていきましょう。
基礎コマンド 1 現在位置の確認(pwd)と場所移動(cd)
コマンド | 動作説明 |
---|---|
cd |
change directoryの略でディレクトリを移動するコマンド。単体で使用するとホームディレクトリに移動する |
cd + ディレクトリPath |
自分が移動したいディレクトリに移動 |
cd - |
前回いたディレクトリに移動 |
pwd |
カレントディレクトリの絶対パスを表示 |
基礎コマンド 2 コピー(cp)
コマンド | 動作説明 |
---|---|
cp + コピー元ファイル名 + 新規ファイル名 |
ファイルをコピーして新規ファイル作成 |
cp + コピー元ファイル名 + 既存ファイル名 |
指定ファイルを既存ファイルに上書き |
cp + コピー元ファイル名 + ディレクトリ名 |
指定したディレクトリにファイルをコピー |
cp -i |
コピーの際に既存のファイルを上書きする前に確認を求める |
cp -r |
ディレクトリを中のファイル等も含めてにコピー |
※ この-i
や-r
がオプションです。この後に続けてコピー元ファイル名などを記載します。
例)cp -i test sample
(sampleファイルは既存ファイルだとする)
このコマンドではtestファイルをコピーしてsampleファイルに上書きします。実行される前に確認メッセージが表示されます。
基礎コマンド 3 ディレクトリ内確認(ls)
コマンド | 動作説明 |
---|---|
ls |
現在いるディレクトリ内にあるファイルやディレクトリの一覧を表示する |
ls -l |
ファイル名だけでなく詳細な情報(ファイルの権限、所有者、サイズ、更新日時など)を表示 |
ls -a |
隠しファイルや隠しディレクトリ(ファイル名が.で始まるもの)も含めて、すべてのファイルやディレクトリを表示 |
ls -h |
ファイルサイズを読みやすい形式(KB、MB、GBなど)で表示 |
ls -t |
ファイルの更新日時順に並べ替えて表示。最新のファイルが上に表示される ※ 通常はアルファベット順 |
ls -r |
ファイルやディレクトリを逆順に表示 |
ls *.ファイル形式 |
ファイル名を問わず検索したいファイル形式で表示(*は任意の文字列を表す) |
ls ファイル名.* |
ファイル名を問わず検索したいファイル名で表示 |
ls ???.ファイル形式 |
ファイル名の文字数を指定して、検索したいファイル形式で表示(「?」は1文字を表す) |
ls ファイル名.??? |
ファイル形式の文字数を指定して検索したいファイル名で表示 |
ls ファイル名.???g |
gで終わるファイル形式4文字のファイルを表示 |
「*」や「?」は探したいファイルの情報を知っていて、条件を絞って検索する場合に使えます。
※ls -l
を使用すると以下のように表示されますが、この内容の見方については、後のPermission(パーミッション)についてで解説しています。
-rw-r--r-- 1 user1 users 1024 Jul 16 12:00 file1.txt
-rw-r--r-- 1 user1 users 512 Jul 16 12:30 file2.txt
drwxr-xr-x 2 user1 users 4096 Jul 16 13:00 directory1
drwxr-xr-x 2 user1 users 4096 Jul 16 13:30 directory2
基礎コマンド 4 ファイルの中身全表示(cat)、部分表示(head, tail)、閲覧(less)
コマンド | 動作説明 |
---|---|
cat ファイル名 |
ファイルに記載された中身を表示 |
cat -n |
テキストファイルの各行に行番号を付けて表示 |
head |
ファイルの先頭から10行表示 |
head -n |
ファイルの先頭から指定した行数だけ表示 |
head -c |
ファイルの先頭から指定したバイト数だけ表示 |
tail |
ファイルの末尾から10行だけ表示 |
tail -n |
ファイルの末尾から指定した行数だけ表示 |
tail -c |
ファイルの末尾から指定したバイト数だけ表示 |
tail -f |
ファイルを監視し、新しい行が追加されるたびに自動的に更新。主にログファイルなどをリアルタイムで監視するために使用。 |
less |
主に長い内容のテキストファイルを閲覧する |
分かりづらい部分を解説していきます。
まずcat
コマンドで中身が表示できるのはテキストファイルだけです。
バイナリファイルはできません。バイナリファイルは「画像ファイル、音声ファイル、実行ファイルなどの文字コード以外に数値も含むようなファイル」のことです。
バイナリファイルの先頭や末尾だけ確認したいというときにheadやtailを使うと確認できます。
head -c 1024 binaryfile.bin
先頭から1024バイトだけ表示
tail -c 1024 binaryfile.bin
末尾から1024バイトだけ表示
次にless
コマンドでファイルの長い中身を表示した際のページ閲覧操作を紹介します。
こちらはVim操作と同じです。
キー | 動作説明 |
---|---|
スペース or f |
ひと画面下にスクロール |
b |
ひと画面上にスクロール |
j |
1行下に移動 |
k |
1行上に移動 |
q |
lessコマンド終了 |
最後にtail -f
についてです。
このコマンドは非常に重要なコマンドで、例えば、システムログに何かエラーが発生した場合、tail -f
コマンドはエラーメッセージをリアルタイムで表示し、問題の発生をすぐに把握することができます。
自分のPCで確認することも簡単ですのでやってみましょう!
①新規ファイルtest.txtを作成し、中身を空にします。
②tail -f test.txt
を実行します。
この状態ではtail -f
コマンドがファイルを監視している状態になりますが、ターミナルには何も表示されず入力モードになりません。
※ ここでファイルが開けない場合は、カレントディレクトリがtest.txtと同じディレクトリじゃない場合がありますのでpwd
コマンドで確認しましょう。
③別のテキストエディタなどでtest.txtを開いて何か文章を書き込みます。
例えば、Hello, this is a test file!
と書き込んだとします。
④書き込みを行った瞬間、リアルタイムでターミナルにHello, this is a test file!
が表示されればtail -f
コマンドは正常に機能してます。
⑤Ctrl + C
でtail -f
コマンドを終了できます。
基礎コマンド 5 ファイルの新規作成(touch)
コマンド | 動作説明 |
---|---|
touch 新規ファイル名 |
新規ファイル作成 |
touch 既存ファイル名 |
タイムスタンプ更新 |
touch
コマンドの便利なところは、間違って既存ファイル名を打っても上書きされずにタイムスタンプを更新してくれるところですね。
基礎コマンド 6 ディレクトリ作成(mkdir)、削除(rmdir, rm)
コマンド | 動作説明 |
---|---|
mkdir 新規ディレクトリ名 |
ディレクトリを新規作成 |
mkdir -p |
親ディレクトリも含めて階層的にディレクトリを作成 |
rm ファイル名 |
指定ファイルを完全削除。※ ゴミ箱には入らず文字通り完全に削除されます |
rmdir |
空のディレクトリのみ削除。 中身がある時はエラーがでる |
rm -i |
ファイルやディレクトリの削除を実行する前に確認メッセージ表示 |
rm -f |
指定したファイルを強制削除 |
rm -r |
中身のあるディレクトリ削除 ※rmdir と似てるので注意 |
mkdir -p
についてですが、例えばデスクトップに「2023ディレクトリ」を作成して、その中に「東京ディレクトリ」、さらにその中に「港区ディレクトリ」を作成したかったとします。
これを一気に作成できるコマンドが
mkdir -p ~/Desktop/2023/東京/港区
マウスを使うなら一回一回右クリックして新規作成→名前入力を繰り返さないといけないですよね。
基礎コマンド 7 ディレクトリ及びファイル移動(mv)
コマンド | 動作説明 |
---|---|
mv ファイル名 移動先ディレクトリ |
ファイル名を指定してディレクトリに移動 |
mv ディレクトリ名 移動先ディレクトリ |
ディレクトリを指定して移動することも可能 |
mv ファイル名 存在しないファイル名 |
この場合は名前が変更される |
mv ファイル名 既存ファイル名 |
この場合は既存ファイルの中身が上書きされる(ファイル名は既存ファイル名のまま) |
mv -i |
上書きが発生する場合に確認メッセージを表示 |
mv
コマンドはちょっとややこしくなるのでまず以下のことを理解しておきましょう。
-
「大は小を兼ねる」で移動先にはディレクトリを指定することが前提。ファイルにファイルは入らないがディレクトリにはどちらも入る。
-
移動先がディレクトリではない場合「移動」ではない挙動をする。(上記コマンド表下3つ)
ですのでmv -i
をクセづけるようにしましょう。
ハードリンクとシンボリックリンクについて
次のコマンド解説に行く前に理解しておかなければいけないのがハードリンクとシンボリックです。
ファイルに対してリンク(繋がり)をつける際の言葉ですが、「リンク」と聞いて初心者の人が一番最初に思い浮かべるのはおそらくURLですよね。
でもこの場合のリンクはURLではなく 「繋がり」「入口」 というイメージを持ってください。
つまり 「一つのファイルに対して別の入口からアクセスするための繋がりを作る」 ということです。
それぞれのリンクの特徴を以下で説明します。
ハードリンク
- ハードリンクは元のファイルと同じデータを指す別名であり「複製」ではない
- 同じファイルの複数のバージョンやバックアップを作成する目的で、1つのファイルに複数の別名をつける(あだ名をつけるようなイメージ)
- 元のファイルが削除されても存在し続ける
- 同じデータを指しているため、一方のファイルを変更すると他方のファイルも変更される
- 同じファイルシステム内でのみ機能する
- ディレクトリに対しては作れない
- ファイルを削除するためには作成したハードリンクを含めて全て削除する必要がある
シンボリックリンク
- ファイルやディレクトリへの ショートカット機能
- 元のファイルが削除されたり移動されると参照先が無効になる ※ 元ファイルのPathを参照しているから
- 異なるファイルシステムの間でも機能
- ディレクトリとファイルの両方に対して作れる
なんとなくイメージはつかめたでしょうか?
ハードリンクは言葉の通り元ファイルと繋がりが強い別の入口
シンボリックリンクは間接的な代理店のような入り口で、windowsのショートカットをイメージすればわかりやすいかと思います。
基礎コマンド 8 ディレクトリ及びファイルにリンク作成(ln)
コマンド | 動作説明 |
---|---|
ln リンク元ファイル名 リンク名 |
ハードリンク作成 |
ln -s リンク元ファイル名 リンク名 |
シンボリックリンク作成 |
基礎コマンド 9 ディレクトリ及びファイル検索(find)
コマンド | 動作説明 |
---|---|
find 検索する開始場所のPath オプション 条件 |
指定した場所から条件に一致するファイルやディレクトリを探す |
find -name |
名前を指定して検索 |
find -iname |
ファイル名の大文字と小文字を区別せずに検索 |
find -type f,d,l |
ディレクトリやファイルの種類を指定して検索 |
find -size ±n |
ファイルサイズを基準に検索。+nでnキロバイトよりも大きいもの、-nでnキロバイト以下のものを検索 |
※ ファイルの種類について
f: 通常のファイル
d: ディレクトリ
l: シンボリックファイル
例えばホームディレクトリ(~)以下からfile.txt
という名前のファイルを検索するときは
find ~ -name "file.txt"
となります。
-nameで名前指定する際はファイル名を""で囲いましょう
さらに 基礎コマンド3のls
に出てきた、「*」や「?」を使用するとディレクトリやファイルの情報が曖昧な場合にも検索可能です。
ファイル形式がわからないとき
find ~ -name "file.*"
形式はわかるけどファイル名がわからないとき
find ~ -name "*.txt"
いろいろ検索して試してみましょう。
ファイルのPermission(パーミッション: 許可)について
基礎コマンド3のls
で表示されるファイルの詳細情報にパーミッション(許可)があります。
ファイルやディレクトリにはそれぞれアクセス権限が決められてて、誰にどのような権限が与えられているかを確認したり、また変更できるようにしておくと、
とても便利なので理解しておきましょう。
例えばls
で表示された内容が
-rwxr--r-- 1 user group 4096 Jul 16 10:00 test.txt
だったとしましょう。
これは以下のような内容になります。
表示 | 情報説明 |
---|---|
- | ファイルタイプ(-: 通常ファイル、d: ディレクトリ) |
rwxr--r-- | アクセス権限(r,w,xの3種類) |
1 | ハードリンク数 |
user | 所有者 |
group | グループ名 |
4000 | ファイルサイズ(byte) |
Jul 16 10:00 | 最終更新日時 |
test.txt | ファイル名 |
重要なアクセス権限についてですが、基礎単語の頭文字を取っただけなので簡単です。
r(4): read(読み取り)
w(2): write(書き込み)
x(1): execute(実行)
-: 権限なし
※ 数値はアクセス権限を変更する際に省略した記載方法として使われます
例えば全ての権限(r,w,e)がある場合は7、rとwだけなら6になります。
そして、この3つのアクセス権限の付与対象者を左から3つずつ区切って下記のように表します。
rwx | r-- | r-- |
---|---|---|
オーナー | グループ | その他のユーザー |
7 | 4 | 4 |
数値で記載する場合は足し算して置き換えるてるだけですね。
chmod 744 ファイル名
※ 次で解説
そして、このアクセス権限の変更ができるコマンドが次のchmod
になります。
基礎コマンド 10 権限変更(chmod)
コマンド | 動作説明 |
---|---|
chmod <u,g,o,a> <+,-,=> ファイル名 |
指定したファイルの指定した対象者への権限付与及び削除 |
chmod 数値 ファイル名 |
アクセス権限を数値で記載して変更 |
chown 所有者 ファイルかディレクトリ名 |
ファイルの所有者の変更 |
chgrp グループ ファイルかディレクトリ名 |
指定したディレクトリ、ファイルの所有グループの変更 |
chown -R |
指定したディレクトリとその中の全てのディレクトリ及びファイルが対象 |
chgrp -R |
指定したディレクトリとその中の全てのディレクトリ及びファイルが対象 |
オプションの表示は下記のとおりです
u: 所有者(user)
g: 所属グループ(group)
o: その他のユーザー(others)
a: 全ユーザー(all)
+: 権限付与
-: 権限削除
=: 記述した権限にする
分かりづらいと思いますので解説します。
chmod g+rx sample.txt
上記のコマンドは、sampleファイルのグループに読み取りと実行権限を与えます。
chmod 744 ファイル名
先ほど出てきた数値で表したコマンドです。
指定したファイルの所有者に全ての権限、
所属グループに読み取り権限、
その他のユーザーに読み取り権限を付与しています。
chown alice file.txt
この場合はfile.txtの所有者をaliceに変更
chgrp developers file.txt
この場合はfile.txtの所属グループをdevelopersに変更
そしてディレクトリを指定する際に、その中身のディレクトリやファイルの所有者やグループを、一括して全て変更したい場合は-R
オプションを使います。
例えばusersディレクトリがあったとします。
chown -R John users
この場合はusersというディレクトリ及びusersディレクトリに含まれている全てのディレクトリ及びファイルの所有者がJohnに変更されます。
プロセスとジョブについて(コマンド実行の裏側を理解する)
いよいよラストです!
Linuxコマンドを実行している際に裏側で何が起きているのか?を理解することによって、より効率的にLinuxを使いこなせることができます。また、負荷の高い作業を続けているとCPUやメモリが不足する可能性があり、サーバーのダウンなどに繋がる可能性もあります。
そのような時には不要なコマンドを停止して負荷を下げたり、トラブルシューティングをしなければいけません。
その際に必要になってくる知識がこのプロセスとジョブです。
ここでいう「プロセス」は、コンピューター上で実行中のプログラムのことを指します。
例えば、ターミナルでコマンドを実行すると、そのコマンドは実行ファイルとしてメモリに読み込まれ、CPUがそのプログラムを実行します。
同じコマンドであっても、1つのコマンドを実行するたびに新しいメモリ領域を確保してプログラムが動作します。ただ、そのままだと現在進行形のコマンドが何か?まではターミナル上では確認できません。
それを確認するために使われるコマンドがps
です。
ps
コマンドを使うと、現在コンピューター上で実行されているプロセスの一覧を表示することができます。
基礎コマンド 11 プロセス確認(ps) +アルファ(パイプライン、wc, grep)
コマンド | 動作説明 |
---|---|
ps |
現在のユーザーに関連するプロセス情報が表示される |
ps aux |
すべてのユーザーに関連するプロセス情報が表示される |
例えばコマンドを実行して以下のような情報が表示されたとします。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME CMD
user1 1234 0.0 0.5 123456 78900 pts/0 S 10:00 0:00 example_program
user1 5678 0.1 0.2 789012 34567 pts/1 R 10:05 0:01 another_program
user2 9101 0.0 0.1 246810 12345 pts/2 S 10:10 0:02 third_program
この際の重要な情報は以下の通りです。
PID (Process ID): プロセスID
TTY (Terminal): プロセスが実行されているターミナルまたは端末の名前が表示されます。
STAT (Status): プロセスの状態を示します。R (実行中)、S (スリープ中)、Z (ゾンビ)、T (停止) などがあります。
TIME: プロセスが実行された総時間を示します。
CMD: プロセスを開始したコマンドまたはプログラムの名前が表示されます。
※ このps
で調べたPIDはこのあと解説する「ジョブの停止」をする際に使用します。
パイプライン(|)とgrep(Global Regular Expression Print)
続いてジョブの説明です。少し長くなりますが頑張ってください。
ジョブは パイプラインなどで複数のコマンドをまとめたもの で、コマンドを書いたときの1行全部がジョブにあたります。
「え?複数のコマンドをまとめる?そんなん知らん!」と思った方、ここで登場するのがパイプラインです。
これはめちゃシンプルで、今まで出てきたコマンドを繋げて実行したい場合やここで紹介するgrep
というコマンドと一緒によく使用されます。
grep
は英語の通りで、指定したファイルに対して
全体的に(Global) に
正規表現(Regular Expression) で指定した文字列が含まれるかどうかを検索して
表示(Print) します。
例えば
grep "keyword" file.txt | wc -l
これはfile.txt内から特定の"keyword"という文字列を検索して、さらにその出現回数をカウントする(wc -l)コマンドです。パイプライン(|)を使用して「検索」と「カウント」2つのコマンドを連続して実行しています。
wc
はword countの略でテキストファイルの行数、単語数、文字数をカウントするためのコマンドです。オプションの-l
をつけて、wc -l
とすることで行数のみをカウント表示できます。
wc sample.txt
とすると、
10 20 150 sample.txt
と表示されます。
10行、20単語、150字がsample.txtに含まれるとうことです。
そして、このパイプラインで繋がれた1行全部がジョブで、一つ一つの繋がれているそれぞれの基礎コマンドがプロセスになります。
grep "keyword" file.txt | wc -l
はジョブが1つ、プロセスは2つということです。
つまりジョブは 「複数のプロセスが繋がったもの」 と考えるとわかりやすいですね。
ps aux | grep "process_name"
これはさきほどのps
と繋げて実行中のコマンド名を指定することで、プロセス情報の中から"process_name"という文字列のプロセスだけを表示してくれます。
こちらも1つのジョブと2つのプロセスです。
このようにパイプラインは基礎コマンドを繋げて1つのジョブを構成するために非常に重要なコマンドです。
以下は、私がハンズオンで勉強していて「これは使えるな」と思ったコマンドです。
ls | sort
ファイルやディレクトリをリストアップして、名前順にソート
ls | grep "keyword"
ファイルやディレクトリをリストアップして、キーワードに一致するものだけ表示
find ~/Desktop/mac/ -type f | grep "keyword"
特定のディレクトリ内でファイルやディレクトリを検索して、キーワード一致するものだけを表示
cat file.txt | grep "pattern"
ファイルの内容を表示して、キーワード一致する行だけを表示
などなどおそらく組み合わせは無限にあると思いますが、初心者の私が紹介できるのはこのくらいです(;'∀')
そしてこのジョブを終了させるコマンドがkill
になります。
基礎コマンド 12 ジョブの終了(kill)
コマンド | 動作説明 |
---|---|
jobs |
ジョブID、実行状況、実行コマンドを表示 |
kill %ジョブID |
ジョブやプロセスを終了させる |
kill PID |
プロセスIDを指定してプロセスを終了 |
kill プロセス名 |
プロセス名を指定してプロセスを終了 |
これは非常にシンプルなコマンドですが、kill
コマンドと一緒にジョブIDやPID(プロセスID) が必要になるというのがポイントです。
まずジョブIDを調べるためにjobs
コマンドを実行すると以下のように表示されます。
[1]- Running sleep 60 &
[2]+ Stopped find / -name "*.txt" > output.txt &
上記の[1]や[2]がジョブIDです。
これを使用してジョブを終了させるのにkill %ジョブID
を使うと、
kill %1
kill %2
となって各ジョブが終了します。
最後に
非常に長い内容でしたが最後までありがとうございました。
Linux操作はVim操作と同じで、一回で覚えられるものではありませんし、自分で普段から使って身につくものなのです。これを機に、いつもマウスで行っていて操作をコマンドライン上でパパパッとできるようにしちゃいましょう!
3日もやれば便利さ、快適さを十分に感じることができるはずです。