聞いたら一生の宝、プログラミングの基礎の基礎

第13回Linuxコマンドの基礎の基礎

はじめに

皆さんこんにちは、teratail開発チームの本橋佑介です。

プログラマとして開発をしているとさまざまな言語や環境に触れますが、それらの中で多くの環境ではターミナルを利用し、コマンドラインインタプリタであるシェルの操作をすると思います。ターミナル中心に作業をしない人でもLinuxの黒い画面でのコマンド操作を覚えることで作業効率が上がることも多いです。

スマートフォンやWebアプリケーションを作っていく中で本線のプログラミング言語ではありませんが、ログ監視やデプロイ・インフラ管理する際など利用する機会が多いコマンドライン操作を見なおしてみましょう。

ここでは、基本的な初歩の初歩から少し便利なオプションなど、日々の使う中で見落としがちなコマンドを紹介していきます。

当稿でのシェルは多くのLinuxディストリビューションで利用されているbashを指します。BSD系で利用されているcsh, bashの拡張版とも言われるzshでは異なる可能性があります。

基本の操作

,カーソルの左右ではカーソル位置の移動を行いますが、,では前に実行したコマンドの履歴へのアクセスを行います。で前のコマンドへ遡り、で次のコマンドを表示します。

また、カーソルキーを使わなくてもこの操作をすることが可能です。

,Ctrl+b,Ctrl+f,Ctrl+p,Ctrl+nで操作できます。また、一文字ずつではなくCtrl+a,Ctrl+eで先頭/末尾に移動することも可能です。

1つずつ遡っていくことは効率が悪いですが、Ctrl+rで検索することもできます。文字列を入れた状態でもう一度押すと更に履歴を遡れます。想定したコマンドが表示されるまで遡るか、更に文字列を入力し絞り込んでいきましょう。また、Ctrl+rを押しすぎ通りすぎてしまった場合はCtrl+sで前の検索結果へ移動することができます。目標のコマンドが見つかったらenterを押下し選択しましょう。

基本のコマンド

コマンドは各OSやシェルにさまざまなものが存在します。コマンド名はできるだけ短く省略するというポリシーのため、基本的なものほど2文字や3文字で構成されています。とてもよく使うものから、一体どこで使うのだといいたくなるほど限定的なもの、ジョークコマンドなどさまざまです。ここでは、無数に存在しているコマンドの中から基本的なものを抜粋して9個紹介します。

man

まず最初に紹介するのはmanコマンド。これはmanualの省略で、その名の通りコマンドのマニュアルが閲覧できます。

UNIX系OSには各種コマンドのマニュアルが存在します。Google検索して出てきたコマンドをそのまま利用すると、悪意ある紹介者により攻撃がされてしまうことも。事前にコマンドのマニュアルを少しでも参照しておくとよいでしょう。

man コマンド

また、manの利用方法自体もman manとして調べてみましょう。manコマンドでの操作方法は次のlessコマンドと同様です。

NAME
名前,タイトル
SYNOPSIS
書式: オプションの書き方などがここにある
DESCRIPTION
説明文
OPTIONS
コマンドのオプションの種類とその使い方

less

manコマンドでも利用されている、画面表示制御のコマンドです。単にファイルの中身を確認するのに利用します。

表示される内容は1画面で収まらない事が多いので、移動する方法を覚える必要があります。画面単位の移動は[space]fで次へと、bで前へ、行単位の移動は[enter]jで下へと、kで上へと移動します。他にもスクロール方法はあるので、いろいろ調べてみてください。

ls

lsはlistの略です。ディレクトリのコンテンツリストを表示します。

使用例としてはls -Alとし、カレントディレクトリのファイル情報を全て詳細表示します。また、ログファイルやキャッシュファイルなど大量のファイルから最近更新されたファイルを表示する際には、-t-rオプションを利用しましょう。

-tは更新時間降順でソートします。更新時間でソートされたリストを-rで昇順にソートしなおします。ソートするオプションは他にもあります。-Sはファイルサイズが降順、-Xは拡張子のアルファベット順でソートします。

cd

cdはchange directoryの略で現在居るディレクトリの変更をする際に利用します。

cd ディレクトリ名

で任意のディレクトリへ、

cd ..

で1つ上のディレクトリへ移動します。

cdとだけ入力することで、cd ~と同じようにルートディレクトリへ移動します。

また、2つのディレクトリを移動しながら作業する場合など、cd -とすることで前のディレクトリに移動できます。

mkdir

make directoriesコマンドはディレクトリを新たに作成するためのコマンドです。mkdir foo bar hogeとすることで複数のディレクトリを作成できます。-mオプションを利用し、mkdir -m 0755 testと入力すれば、パーミッション(所有権)を指定してディレクトリ作成できます。

また、/aaa/bbb/cccと深いディレクトリを作成する場合は、

mkdir aaa
mkdir aaa/bbb

ではなく、-pオプションを付け、

mkdir -p aaa/bbb

とすることで、親ディレクトリを同時に作成できるようになります。

cp

cpはcopyの略でディレクトリやファイルをコピーするコマンドです。ディレクトリを中身ごとコピーする場合は-rオプションが必要です。また、パーミッション(所有権)を変更しないでコピーする場合は-pのオプションを利用しましょう。

mv

mvはmoveの略でディレクトリやファイルを移動するコマンドです。以下のように使います。

mv 移動前のファイルorディレクトリ 移動後のファイルorディレクトリ

移動だけではなく、ディレクトリやファイルの名前変更などでも利用されます。その際は、

mv 変更前のファイルorディレクトリ 変更後のファイルorディレクトリ

のように使います。

rm

rmコマンドはremoveの略でディレクトリやファイルを削除します。一度削除してしまうと、基本的に元に戻すことはできないので、使用の際は十分に気をつけてください。なお、ディレクトリの削除にはcpと同じように-rオプションが必要です。

cat

catコマンドはlessコマンドと同じようにファイルの内容を閲覧する際に利用されることが多いです。lessと違ってファイルの内容をそのままコマンドラインに出力します。このコマンドはconcatenateの略で、当初はファイルを連結するために作られました。

cat a.txt b.txt > c.txt

とすることで2つのファイルをc.txtに連結します。

また、ファイルを逆から読むものに、catをそのままひっくり返したtacがあります。

最後に

紹介してきたコマンドはほんの一部で、lsでできない再帰的にファイルを表示するのにファイル検索するfindコマンドを利用したり、一覧表示したものをsort uniqなどで整形したり、grepでファイル内の文字列を抜き出したりと、いろいろな場面でさまざまなことができます。

何かを利用する際に調べるだけでなく、コマンドは基礎体力として日ごろから無差別に調べておくと、プログラミングをする中で役立つことがたくさんあるはずです。

また、仕様を知るだけではなくGitHubなどでコマンドそのもののコードを読むことで深く実装を知ることができます。興味が出たら好きな言語で実装してみるのもパズルを組むようで面白いです。

おすすめ記事

記事・ニュース一覧