インフラ

Linuxコマンド基礎編 これだけは知っておきたい基本コマンド11選

Linuxコマンド基礎

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

コマンドとは何か?


コマンドとは、コンピュータに対する命令のことです。
ブラウザのアイコンとかをクリックすると、ブラウザが起動しますが、
あれも内部的にはコンピュータに対してブラウザを起動させる命令となっています。

コマンドも基本的にはそれと同様ですが、
命令を行う場所が、GUI(グラフィカルな部分。普段見ている画面)から
CUI(コマンドライン、ターミナルなどの黒い画面)に変わるようなイメージです。

「ターミナルってなんやねん」っていう人は、
下記記事を読むとわかりやすいかもしれません。

参考ターミナルインストールから始めるVim/Neovim8つの基本キーバインド

本記事では、0からVimやNeovimについて、解説していきます。 Vimって何?っていう人や、ターミナルもほとんど使っていないという人でも、最低限これだけは知っておきたいVimのキーバインドを本記事 ...

続きを見る

例えば、同じことを実現するにしても、
ChromeのアイコンをクリックするとChromeが開く(GUI)のに対し、
openコマンドというものを使って、
コンピュータにfirefoxを開けと命令する(CUI)など、
アプローチの仕方がそれぞれあります。

 コマンドとは、上記のopenコマンドのような
CUIの方ですね。

コマンドを実行するには、terminalというアプリが必要ですが、
普段GUIで作業していたことなどは、実はCUIのterminalからでも
行うことができます。

そうした、様々な命令を行うものがコマンドで、
コマンドには色々種類があります。

コマンドは、OSのタイプによっても、
微妙に異なっており、
最も一般的なLinuxコマンドです。

Windowsなどにもコマンドがありますが、
Linuxとは異なるコマンドであることが多いです。
(例えば、dir(windows)とls(linux)のように)

Macは、UNIX系のOSなので、
コマンドは、Linuxのものとほとんど同様です。

なので、Linuxコマンドを学んでおけば、
Macの操作に関しては、楽勝ですね。

以下、このLinuxコマンドについて詳しく触れていきます。

Linuxコマンド基礎

Linuxコマンドも種類はたくさんありまして、
マイナーなものから有名なものまで様々です。

また、使用頻度が高いものもあれば、
そこまで使わないものもあります。

専門のサーバーエンジニアを目指すのであれば、
割りと幅広いコマンドを学ぶ必要がありますが、
Webエンジニアとかであれば、
とりあえず、最低限のコマンドさえ覚えれば一旦十分です。
(勉強しなくていいという意味ではなく、優先度を下げても
いいという意味です)

下記では、「これは知らないと恥ずかしい」という
常識コマンドを紹介していきます。

ちなみに、こういったLinuxコマンドとか、
Linuxの知識を体系的に勉強する手段としては、
資格試験のLPICとかもおすすめです。

私は執筆時点で、LPIC level2まで取得していますが、
特に、LPIC level1については、
重要かつよく使うコマンドが体系的にまとめられているので、
おすすめです。
(ネットワークのCCNAのような位置づけの資格試験ですね)

ls

さて、少し脱線しましたが、
早速コマンドを紹介します。

まず、1つ目に紹介するコマンドは、
おそらく一番使う機会が多いであろう、
lsコマンドです。

これは、カレントディレクトリ内のファイルやディレクトリを表示するコマンドです。

カレントディレクトリとは、ユーザが現在作業中のディレクトリのことを指します。

ディレクトリとは、
フォルダのようなものと思っていただければ、
大丈夫です。

WindowsのようなGUIのOSだと、
フォルダーという呼び方が一般的ですが、
Linuxとかだと、ディレクトリという呼び方が一般的です。

Downloadsフォルダのことは、
Downloadsディレクトリという風に呼んだりしますね。

コマンドの使用例としては、
下記のように、ターミナルにlsと打ち込みます。

$ ls
Desktop          Downloads        Movies           Pictures         Public
Documents        Library          Music            Project          index.html

上記の場合、DesktopディレクトリやDownloadsディレクトリなどが、
カレントディレクトリにあることが、lsコマンドで確認できますね。

ちなみに、「ユーザーが現在作業中のディレクトリ」とは、
どういうことかというと、
なにかのコマンドや操作をする際の基準となるディレクトリになるという感じです。

例えば、冒頭のopenコマンドなどは、
そのカレントディレクトリのファイルを開くというようなイメージです。

基本的に下記で紹介するコマンドは、
カレントディレクトリを基準として実行されるという点では、同様です。

pwd

こちらのコマンドは、
カレントディレクトリの絶対パスを表示します。

絶対パスとは、ルートディレクトリからのフルパスのことを指します。

そもそもコンピュータの構造には、
ルートディレクトリというものがあり、
/ と表します。
すべてのファイルは、このディレクトリの下の階層に存在するので、
もっとも上の階層ということになります。

例えば、Desktopディレクトリの絶対パスは、
Macとかだと、/Users/tarou/Desktop ような感じになります。

これは、/ ディレクトリ配下にUsersというディレクトリがあり、
その下にtarouというディレクトリがあり、
その下にDesktopがあるという構造です。

絶対パスは、カレントディレクトリがどこであろうと、
同一です。

このような絶対パスに対して、
相対パスというものも存在します。

こちらは、カレントディレクトリからのパスになります。

なので、/Users/tarouディレクトリに存在する場合、
(このようにユーザー名のディレクトリで、ターミナルを開いて
最初の位置のディレクトリをホームディレクトリと呼びます。)

Desktopは、./Desktopというパスで表せます。
. という記法は、カレントディレクトリという意味です。
カレントディレクトリの下にDesktopがあるということですね。

ちなみに、.. とすると、
ひとつ上のディレクトリを表します。

以上、踏まえて、
pwdを使うと、

$ pwd
/Users/user1

のようになります。

これは、ホームディレクトリのことですね。

cd

これもlsと同じぐらい使う機会が多いコマンドで、
change directoryの略でcdです。
ディレクトリを変更するという名称そのまんまで、
カレントディレクトリを変更したいときに使います。

カレントディレクトリの変更とはどういうことかというと、
適用させる場所を変えるという感じです。
(openコマンドで開くフォルダを変えるようなイメージです)

カレントディレクトリを変えれば、
もちろん、絶対パスも変わるので、
pwdコマンドの挙動も変わってきます。

vimとかで開きたいファイルが、
カレントディレクトリにない場合は、
そのディレクトリまで移動する方法(cdコマンド)と、
相対パスや絶対パスを指定して開く方法など、
色々ありますが、cdコマンドはそうしたまさに一手段ですね。

実行例としては、

$ pwd
/Users/user1/desktop
$ cd
$ pwd
/Users/user1
$ cd /Users/user1/Downloads
$ pwd
/Users/user1/Downloads

cdでディレクトリを変更して、
pwdコマンドのパスが変わっているのが、
わかるかと思います。

ちなみに、cdに何も引数を与えなければ、
ホームディレクトリに移動します。

source

上記の3つは、本当に常識レベルのコマンドです。
現役エンジニアで知らない人はいないレベルというか、
知らなかったら、かなりやばいレベルです。

これらに比べると、sourceコマンドは、
ほんの少しだけマイナーです
(一ミリもマイナーじゃないですし、常識コマンドですが、
上記の3つよりはという相対比較です)

このコマンドは、引数に与えられたファイルに書かれたコマンドを現在のシェルで実行するコマンドです。
.zshrcなど、シェルの設定ファイルをターミナルを再起動させずに適用したいときや、
シェルスクリプトを実行したいときなどに使います。

シェルスクリプトとは、
これらのLinuxコマンドをプログラムに落とし込めるプログラミング言語でして、
より複雑な条件のもと(if文とか)で、
特定のLinuxコマンドを実行したいときなどに使用するものです。

例えば、下記のように
.shという拡張子で作成します。

#!/bin/bash
echo 'testシェルスクリプトです'

上記のシェルスクリプトは、
'testシェルスクリプトです'と表示してくれます

上記のファイルにlsとかを記載したら、
lsが実行されます。

このようにシェルスクリプトの実行のために、
sourceコマンドを使用することがあります。

下記のようにして、実行します。

$ ls
test.sh
$ source test.sh
testシェルスクリプトです

上記の3つに比べると、
使用頻度は少ないですが、
シェルスクリプトをゴリゴリ書くようになると、
使用頻度が上がるコマンドです。

cp

こちらはコピーコマンドです。
ファイルやディレクトリをコピーできます。

第一引数にコピーされるファイルを、
第二引数にコピー先のファイルを指定します。

例えば、下記の例だと、
test.shファイルをコピーした、
test1.shというファイルを作成します。

$ ls
test.sh
$ cp test.sh test1.sh
$ ls
test.sh test1.sh

GUI上で、ファイルをクリックして、
コピーとかってやるんじゃなくて、
ターミナルでさくっとコピーできるようになったら、
エンジニア感出せますよ(笑)

mkdir

こちらは、ディレクトリを作成するコマンドです。
基本的なコマンドではあるのですが、
最近は、IDEとか、プラグイン経由でファイルを作成できるので、
使用頻度は減ってきている印象があります。

VimとかTmuxの設定ファイルを作成したりする際は、
意外と使うかもしれません。

使用例は下記のような感じです。

$ ls
test.sh
$ mkdir test
$ ls
test.sh test

rm

ファイルやディレクトリを削除するコマンドです。
rmコマンドで削除してしまったものは、
復元ができないので、注意して実行する必要があります。

GUI上のファイル削除となると、
ゴミ箱に入れるとかになると思うので、
仮に間違って削除しても
復元できますが、
rmコマンドで削除したら、基本的には、
もう復元できません。

なので、不安な場合は
無理して使わなくても良いかもしれません。

使用例としては、

$ ls
test.sh test
$ rm test.sh
$ ls
test

という感じです。

ちなみに、下記のようなコマンドを使うと、
すべてのファイルを削除してしまうので、
絶対に実行してはいけません。(見るだけにしてください)
冗談抜きでPCが死にます。

rm -rf /*

OSの破壊と同義なので、
繰り返しになりますが、実行しないでください。

(どうしても実行したい変態の人は、
仮想環境など壊れてもいい環境で実行してください)

ちなみに、下記の記事で、
上記コマンドを実行したらどうなるのかという、
なかなかにドMな取り組みをしていて面白かったので、
変態志向の人はご参考ください。

https://dev.classmethod.jp/articles/tried-rm-rf-root-on-amazon-linux-2/

touch

ファイルのタイムスタンプを更新するコマンドです。

けれどもこのコマンドの面白いところは、
そうした正規の使い方で使うことがほとんどなく、
副作用のほうを目的として実行することです。

というのも、引数で指定したファイルが存在しない場合、その空ファイルを作成するという副次効果が
あるので、その用途で使われることが多いです。(というか私はその用途以外で使ったことがありません。)

実行例としては、下記のような感じで、
引数に作成したいファイル名を指定します。

$ ls
test
$ touch test.sh
$ ls
test test.sh

cat

お、猫か?
って思うかもしれません、
こちらのコマンドは、ファイルの内容を表示するコマンドです。

内容というのは、中身ですね。
たとえば、テキストファイルで、
こんにちはと書かれているファイルがあったとすると、
こんいちはとターミナルの標準出力に表示されます。

Vimとかでいちいち開くのが面倒なときに、
サクッと中身を確認したいときとかに使います。

Linuxの基礎的な本とかだと、
割りと序盤に出てくるコマンドなので、
わりかし、初心者向けのコマンドみたいに思われがちですが、
catエディタ(後述)のような使い方も可能なため、
結構Linuxの本質的なコマンドの一つで、奥深いなと個人的には感じています。

実行例としては、下記のような感じです。

$ ls
test.sh
$ cat test.sh
#!/bin/bash
echo 'testシェルスクリプトです'

 ちなみにcatは、パイプやリダイレクトといったシェルの機能をフル活用して、
中身を追記したりすることもできます。

上記のようなのは、まだ序の口ですが、
これをめちゃくちゃフル活用して、
catエディタみたいな使い方をしている方もいるそうです。
(いるそうですというか、いたそうですの方が正しいかもしれません)

エディタというのは、文字通りVimとかみたいに、
catでプログラミングするということですね。(笑)

お使いのエディタはなんですか?って聞かれたら、
一度でいいからcatですって答えたいですね。

grep

grepは、独学のときに使うことがなく、
実務に入ってから使うようになるコマンドの筆頭ともいえるもので、
簡単に言うと、ファイルやテキストなどの検索をするコマンドです。

grepは奥が深いので、
ここでは概要しか紹介しませんが、
気になる人は、grepの詳細解説の記事も御覧ください。
(※準備中です...)

使い方を紹介します。
下記は、binという文字列をtest.shファイルから検索しています。

$ ls
test.sh
$ grep 'bin' test.sh
#!/bin/bash

binが含まれている、
#!/bin/bashが表示されていますね。

基本的に、grep 検索したい文字 対象ファイルという書式で
使用します。

実務でよく使うパターンとしては、
メソッドや関数がどのへんで呼ばれているか目星をつけたりする際に
使用されることが多い気がします。

例えば下記は、srcディレクトリ配下のすべてを検索対象として、
fetchApiFuncという文字列を検索します。

$ grep 'fetchApiFunc' src/*

grepは、git grepとかvim grepのような、
派生したgrepとかもたくさんあるので、
使いこなせるようになりたいコマンドの一つです。

ちなみに、grepとかlsのような
基本コマンドは、最近ではripgrepとかexaのような、
上位互換コマンドもあり、そちらも熱いので、
興味がある方は、下記の記事もご参考ください。

Linux便利コマンド8選
参考Linux便利コマンド8選 zoxide/bat/exa/fzfなど

いつもcdとかcatのように、お決まりのコマンドを使うと思いますが、最近だと、こういったコマンドの強化版みたいなやつも熱いので紹介します。 本記事の内容は、下記動画でもご紹介したので、実際のハンズオン ...

続きを見る

less

こちらのコマンドは、
catに若干似ていますが、
ファイルの内容を確認できるコマンドです。

ただ、こちらはターミナルの標準出力に出すのではなく、
Vimとかのようにターミナルウインドウをまるごとファイルの内容を表示するという特徴があります。

catもいいですが、
個人的にはlessのほうが手っ取り早いことも多いですね。

less test.txt

lessの中での操作は、
Vimの基本操作とほぼ同様で、
抜けるときは、qを押します。

Vimの基本的な使用方法については、
下記の記事を御覧ください。

参考ターミナルインストールから始めるVim/Neovim8つの基本キーバインド

本記事では、0からVimやNeovimについて、解説していきます。 Vimって何?っていう人や、ターミナルもほとんど使っていないという人でも、最低限これだけは知っておきたいVimのキーバインドを本記事 ...

続きを見る

その他の有名コマンド

本記事では、代表的なコマンドと、
使い方の例を掲載しましたが、
各コマンドには、オプションも存在するため、
それらも合わせて知っておく必要がある。
(覚えることが多いですね)

オプションとは、コマンドに与える、
フラグのようなものでして、
例えば、今回紹介した中だと、
rm -rfコマンドの、-rfの部分がオプションになります。

上記の場合は、ディレクトリも再帰的に、
確認無しでというオプションになります。

他には、lsコマンドとかだと、
-aオプションを指定すると、
隠しファイルも表示してくれます。

このようにオプションは、
コマンドに何らかの効果を与えるフラグのようなものですね。

また、コマンドでも、
まだまだ重要なコマンドは、
残っていて、ぱっと思いつく限りでも、

参考

  • ping
  • dig
  • curl
  • mv
  • chmod
  • which

などがあります。

各コマンドのオプションの解説や、
上記コマンドの解説などについても、
また後に記事にしようと考えています。

参考【Mac初期設定完全版】Webエンジニアが最初に導入するアプリや設定を公開

Macbookの初期設定 Macbookを買ったり、初期化した際、デフォルトのままだと何かと使いにくいと思ったことは無いでしょうか? 下にうざいDockはあるし、カーソルはめっさ遅いし、変なアプリはた ...

続きを見る

  • この記事を書いた人
  • 最新記事

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

おすすめ記事はこちら

Vim/Neovimプラグイン 1

プラグインをどれだけ入れるかは、その人の思想なども関係するので、一概にこれがいいというのはないかもしれません。 プラグインを全く入れない人もいれば、100個以上入れる人もいます。 ただそれでも、これだ ...

VimとNeovimの比較 2

本記事では、VimとNeovimの違いについて、解説します。 VimとNeovimの違いについては、普段頻繁にVimなどを使う方でなければ、正直、あまり気にしなくてもいいかなと思います。 ただ、Vim ...

Ruby変数やすべてがオブジェクトについて 3

本記事は、Rubyの基礎文法である、変数や真偽値、論理演算子に触れると同時に、「すべてがオブジェクト」というRubyの特徴的な思想についても解説します。 この思想は、Rubyの文法の根幹になっているの ...

4

エンジニアにおすすめの技術書 書籍学習は、エンジニアの嗜みみたいなところがありますが、 良書というものは、意外とそこまで多くもありません。 そこで本記事では「技術書マニアの筆者が厳選した技術書20選」 ...

5

エンジニアになるには? プログラミングは、専門性が高く自分一人で勉強するのが大変に感じることも多いですよね。 そこで本記事では「おすすめのプログラミングスクール5選」を特徴と、現役エンジニア目線で優れ ...

-インフラ