Linuxコマンド

お久しぶりです。かぎしっぽです。
ブログを更新できないでいる間に年の瀬になってしまいました。皆さんはお元気でお過ごしでしょうか?

今回はLinuxコマンドについて書いてみたいと思います。
LinuxWindowsMacOSなどと並ぶOSの一種ですが、見たことないよ! という方も多いと思います。
システムやネットワークの世界を支える、裏方とか縁の下の力持ちといった意味合いの強いOSなのです。
そしてLinuxはマウスではなく、コマンド(指令、命令)を入力することで色々な操作をすることができます。
コマンドはたくさんありますが、特に重要なものをご説明しますね。
これが使えるようになると「ネットワーク技術者です!」な雰囲気を味わえますよ(^▽^)/

まずは基本操作系

pwd(print name of working directory)

今いるディレクトリ(情報を入れる場所。フォルダに近いです)を表示します。
あれ? 今どこだっけ? と思ったら使いましょう。

書式:pwd [オプション]  
具体例:
$ pwd  
/home/kagishippo

今はホームディレクトリ直下のkagishippoディレクトリにいることが分かります。
なおオプションは指定しなくても構いません。

cd(Cange Directory)

ディレクトリ移動。今とは別の場所を作業する時はこのコマンドを使います。

書式:cd  [オプション] [ディレクトリ構造]
具体例:
$ cd ../kuro  

ここで再びpwdを実行すると……

$ pwd  
/home/kuro  

元いた kagishippo ディレクトリから、同じ階層の kuro ディレクトリに移動できました。

ls(list)

ファイルやディレクトリの一覧を表示。このディレクトリには何があるか知りたい時に使います。

書式:ls [オプション] [ディレクトリ・ファイル名]  
具体例:  
$ ls  
memo1.txt  

今いるディレクトリには「memo1」というテキストファイルがあるようです。

オプションについて

コマンドにはオプションをつけられます。オプションをつけると、対象を絞ったり、もっと細かい情報を表示したりと色々便利です。
ls コマンドでよく使われるオプションに-aがあります。これをつけると隠しファイルも全部表示されます。
さっそくさっきのコマンドに加えてみましょう。

具体例:  
$ ls -a  
memo1.txt   .log  

頭に「.」がついている隠しディレクトリが一緒に表示されました。
他には-lというオプションでファイルの詳細情報を表示することもできます。

mkdir(make directory)

ディレクトリを指定した名前で作ります。

書式:  
mkdir [オプション]  <作成するディレクトリ名>  
$ mkdir child  

lsを再度実行します。

$ ls  
child  memo1.txt  

元々あった「memo1.txt」に加えて「child」ディレクトリが表示されました。(今回は-aのオプションをつけていないので、隠しディレクトリの「.log」は表示されません)

touch

ファイルを指定した名前で作ります。中身は空です。
既に同じ名前のファイルがある場合はタイムスタンプだけ更新して中身は変更し ません。

書式:  
touch <ファイル名>  
$ touch newfile.txt

lsコマンドを実行すると、今作った「newfile.txt」が表示されます。

cat(concatenate:連結する の意味)

ファイルの中身を表示したり、複数のファイルを繋げるのに使います。

書式:  
cat [オプション]  <ファイル名>  
$ cat frends.txt
kuro
chatora
mike

frends.txtの中身が表示されました。

行番号を表示

オプションの-nを使うと、行番号を表示できます。

$ cat -n frends.txt  
1  kuro  
2  chatora
3  mike

tail

ファイルの後ろから10行だけ表示させます。

書式:  
tail [オプション]  <ファイル名>  
$ tail list.txt
No.91 qqq  
No.92 rrr  
 <中略>  
No.100 zzz
指定した行数を表示

オプションの-nに続けて数字を入力すると、指定した行数を表示できます。

$ tail -n 15 list.txt  
No.86 lll
No.87 mmm
 <中略>  
No.100 zzz
ファイルの頭からは表示できないの?

はいできます。その場合はtailの代わりにheadを使って下さい。

$ head -n 3 list.txt
No.1 aaa  
No.2 bbb
No.3 ccc

冒頭3行分が表示されました。 tailコマンドを知っていれば簡単ですね♪

less

別画面でファイルの中身を表示します。情報量が多い時はcatよりこちらの方が便利です。

書式:  
less [オプション]  <ファイル名>  (オプションはほぼ使いません)
$ less many.txt

別画面で内容が表示されます。
lessで表示された画面で使えるコマンド例はこちらです。

スペース:次のページに進む
b:前の画面に戻る
f:次の画面に進む
↑ ↓もしくはJ k:上下の行に移動
q:元の画面に戻る
/<文字列>:下方向に向かって指定した文字列を検索

mv(move)

ファイルを移動したり名前を変更します。

書式:mv [オプション] <移動元> <移動先>
具体例:
$  mv newfile.txt test/

これでnewfile.txtは同じディレクトリ内のtestディレクトリに移動します。 次はファイル名変更です。

書式:mv [オプション] <元のファイル名> <新しいファイル名>
具体例:
$  mv newfile.txt newfile2.txt

これでnewfile.txtnewfile2.txtに変わります。
なおもし先にnewfile2.txtが作られていると上書きされますので注意して下さい。
この場合はオプションの-iをつけておくと、上書きする前に確認してくれます。

$  mv -i newfile.txt newfile2.txt

find

ファイルがどこにあるか探して教えてくれます。

書式:find <検索開始ディレクトリ> <検索条件> <アクション>
具体例:
$ find . -name newfile2.txt -print
./test/newfile2.txt

この場合は
検索開始ディレクトリ:. を指定しているので、今いる場所を元にして検索 検索条件:オプション -name をつけているのでファイル名を指定して検索します。ファイル名は newfile2.txt です。
アクション:-print 見つかったらそのファイルのパス(場所)を表示
となります。

検索結果が./test/newfile2.txt なので、今いる場所にある「test」ディレクトリの中にあるようです。

なおパス(Path)とは特定のファイルまでの道順、通り道ですが、詳しく知りたい方はこのあたりを参照してみて下さい。

オプション少し

findはさまざまなオプションがありますので少しだけご紹介します。
-name:ファイル名を指定して検索。ファイル名の大文字小文字は区別する
-iname:ファイル名を指定して検索。大文字小文字を区別しない
-type:ファイルの種類で検索
 -f:通常のファイル
 -l:シンボリックリンクシンボリックリンクは「ln」コマンドの項目でご紹介します  -d:ディレクト

rm(remove)

ファイルを削除します。

書式:  
rm [オプション]  <ファイル名>  
具体例:
$ rm newlife.txt

lsコマンドを実行すると、「newfile.txt」が消えているのが分かります。
なお一度消したら戻せません!

オプション

このコマンドにはよく使うオプションがいくつかあります。
-r:ディレクトリが削除できるようになります。その中にファイルやディレクトリがあればそれも消します
-f:警告なしで削除を実行します。使う時は要注意です!
-i:削除前に確認してくれます

rmdir(remove directory)

ディレクトリを削除します。

書式:  
rmdir [オプション]  <ファイル名>  
具体例:
$ rmdir empty

ls コマンドで確認すると、empty ディレクトリが消えています。
ディレクトリ内にファイルやサブディレクトリがある場合はオプション-r をつけます。
なおrm 同様、一度削除したものは中のファイル類も含めて復活できないので要注意です。

cp(copy)

ファイルのコピーをします。

書式:cp [オプション] <コピー元> <コピー先>
具体例:
$ cp original.txt copy.txt

original.txt をコピーして copy.txt が作られます。
なおコピー先のファイルがすでにある場合は上書きするので注意して下さい。
オプションの-i をつけておくと上書き前に確認してくれます。
またcp はファイルが対象ですが、オプションの-r をつけるとディレクトリ内の全てのファイル・ディレクトリをまとめてコピーします。

ファイルにリンクを貼ります。
Linux のリンクは Windows のショートカットのようなものですので、
ファイルにショートカットを設定する、と言い換えた方が良いかもしれません。

書式:ln [オプション] <リンク元ファイル名> <リンク名>
具体例:
#study20231228.txt に latest というシンボリックリンクを貼ります
$ln -s study20231228.txt latest
補足 ハードリンクとシンボリックリンク

リンクの一番メジャーな使い方は↑でご紹介した通りですが、もう少しだけ踏み込んでご説明します。
興味のある方は下記ご覧ください。

実はLinuxのリンクにはハードリンクとシンボリックリンクの2種類があります。
シンボリックリンクWindowsのショートカットに当たりますが、ハードリンクは別名です。
例えば ln memo.txt memo_today.txt とオプションなしで実行するとハードリンクになります。
別名なのでmemo.txtmemo_today.txt も同じファイルですし、どちらかを編集するともう片方も変更されます。 ただし片方だけ削除しても、もう片方はそのまま残ります。シンボリックリンクリンク元を消すとリンク先からは元データを参照できなくなるので、ここは大きな違いですね。
更に勉強したい方はこちらも参照してみて下さい。

プロセス管理系

プロセスとは実行中のプログラムのことです。
Linuxではたくさんのプロセスが実行されます。それをコントロールするコマンドのうち2つだけご紹介します。

ps(process status)

実行中のプロセスとその状態を表示してくれるコマンドです。

書式:ps [オプション]
具体例:
$ ps
 PID  TTY      TIME CMD
 3935  pts/0 00:00:00 ps
 20961 pts/0 00:00:00 bash

PIDから始まるのは項目行です。
その次の数字から始まる行がそれぞれ1つのプロセスです。
ここでは今実行したps ともう一つbash のプロセスが実行中であることが表示されています。
項目一つ一つの意味が気になる方は↓ をどうぞ。

PID:プロセスID(プロセスごとにつけられた番号)
TTY:端末
CMD:実行中のコマンド TIME:CPU(端末の演算装置、心臓部ですね)の実行時間

なおオプションのu(ハイフンはいりません)で詳細を表示してくれます。
a をつけると全てのユーザーのプロセスを、x をつけるとpsコマンドを実行したユーザーの全てのプロセスを表示します。
合わせ技でps xau とすると全ユーザーのプロセスを詳細情報付きで表示してくれます。

kill

プロセスやジョブ(プロセスをひとまとめに実行すること)を終了させます。
色々な作業をしていると、エラーが出たりマシンが重くなったりしますが、そうした時にこのコマンドでプロセス等を終了させることがあります。

書式:
kill [オプション] %<ジョブID>
kill [オプション] <プロセスID>
具体例:
$ kill %1
$ kill 4965

権限関係

会社支給のPCや子供に持たせるスマホは操作が制限されていることがありますが、 Linuxではこの制限に関する概念がとても強いです。ログインユーザーごとの制限以外にも、ファイルやディレクトリごとにパーミッション(アクセス権限)という形で細かい設定ができます。
こうすることでシステムや情報を守って安全に運用できるようにしているのです。

権限に関する記号

先に権限を表す記号をお知らせしておきます。 ファイル種別
-:ファイル
d:ディレクト
l:シンボリックリンク

パーミッション(権限)
r(read):読み取り権限
w(write):書き込み権限
x(execute):実行またはディレクトリの移動権限

ここではこのパーミッションに関するコマンドを2つご紹介します。

chmod(change mode)

ファイルやディレクトリのアクセス権限を変更します。
なおこの操作はroot(管理者)権限かファイル所有者しかできません。

書式:chmod <ファイルモード> <ファイル名>
具体例:
$ chmod -rwxr-xr-- sample.txt

sample.txtの権限を-rwxr-xr-- にしました。
……と言っても「???」ですよね。
もう少し詳しくご説明しますね!

ファイルモード詳細

先ほどの-rwxr-xr--はそれぞれ以下の意味を持っています。
最初の1文字目:ファイル種別。今回は- なのでファイルであることが分かります。
2~4文字目:所有者の権限。rwxなので読み取り、書き込み、実行全部OKです。
5~7文字目:所有グループの権限。r-xなので読み取りと実行ができます。
8~10文字目:その他に対する権限。r--なので読み取りしかできません。

例えば所有者以外は全部読み取りしかできないようにする場合は次のように記述します。

$ chmod -rwxr--r-- sample.txt

ちなみに先にご紹介したlsコマンド(指定場所のファイル類を一覧表示するコマンド)に-lのオプションをつけることで、パーミッション情報を見ることができます。

$ ls -l sample.txt
-rwxr--r-- 1 kagishippo staff 35 12 28 18:08 sample.txt

chown(change owner)

ファイルやディレクトリの所有者を変更します。
先ほどの「sample.txt」の所有者を「kagishippo」から「kuro」にしてみます。 この操作はroot(管理者)権限が必要です。

書式:chown [オプション] <新しい所有者名> <ファイル名>
具体例:
$ chown kuro sample.txt

ls -sで詳細情報を表示してみます。

$ ls -l sample.txt
-rwxr--r-- 1 kuro staff 35 12 28 19:11 sample.txt

無事に所有者が変わりました。
他にオプションとして-Rディレクトリを対象にしてみたり、-c で変更があった時にメッセージを表示したり、とさまざまなことができます。

終わりに

大変長くなりましたが、ひとまずここまでとしたいと思います。
ご紹介したのはごく一部ですが、これだけでもかなり色々なことができると思います。
もし機会があったら皆さんも色々試してみて下さいね。
では皆さん良いお年を(^▽^)/