Linuxコマンド
お久しぶりです。かぎしっぽです。
ブログを更新できないでいる間に年の瀬になってしまいました。皆さんはお元気でお過ごしでしょうか?
今回はLinuxコマンドについて書いてみたいと思います。
LinuxはWindowsやMacOSなどと並ぶ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.txt
がnewfile2.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
をつけるとディレクトリ内の全てのファイル・ディレクトリをまとめてコピーします。
ln(link)
ファイルにリンクを貼ります。
Linux のリンクは Windows のショートカットのようなものですので、
ファイルにショートカットを設定する、と言い換えた方が良いかもしれません。
書式:ln [オプション] <リンク元ファイル名> <リンク名> 具体例: #study20231228.txt に latest というシンボリックリンクを貼ります $ln -s study20231228.txt latest
補足 ハードリンクとシンボリックリンク
リンクの一番メジャーな使い方は↑でご紹介した通りですが、もう少しだけ踏み込んでご説明します。
興味のある方は下記ご覧ください。
シンボリックリンクはWindowsのショートカットに当たりますが、ハードリンクは別名です。
例えば
ln memo.txt memo_today.txt
とオプションなしで実行するとハードリンクになります。
別名なのでmemo.txt
も memo_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
のプロセスが実行中であることが表示されています。
項目一つ一つの意味が気になる方は↓ をどうぞ。
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
で変更があった時にメッセージを表示したり、とさまざまなことができます。
終わりに
大変長くなりましたが、ひとまずここまでとしたいと思います。
ご紹介したのはごく一部ですが、これだけでもかなり色々なことができると思います。
もし機会があったら皆さんも色々試してみて下さいね。
では皆さん良いお年を(^▽^)/