Help us understand the problem. What is going on with this article?

開発者なら知っておくべき 11 のコンソールコマンド

こちらの記事は、Indrek Lasn 氏により2019年 11月に公開された『 Here Are 11 Console Commands Every Developer Should Know
』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。

コマンドラインをうまく使えば、いくつかのありふれたタスクを自動化し、よりスムーズに処理を実行することが可能になり、日々の生産活動をより効率化できます。GUI上でクリック操作する代わりに、いくつかのコマンドを実行するだけでジョブを完了させることが可能です。

Unix shell はUnixライクなOS向けにコマンドラインユーザーインターフェースを提供する、コマンドラインインタプリター、またはshellです。shellはインタラクティブなコマンド言語かつスクリプト言語でもあり、OSがshellスクリプトを用いてシステムの実行を制御するために使用されます。

すべてのLinuxやMacベースのOSにはデフォルトでコマンドラインがインストールされており、一般的には「ターミナル」と呼称されます。コマンドライン(CLI)によってファイルの移動や名前の変更、データの並び替えやコンピュータ内の移動をより簡単に行えます。

では早速あなたのエンジニアライフをより楽にする “11” のコマンドを紹介します。

1. grep

$ grep "some string" file

grepコマンドは各ファイルの文字列を検索します。また、改行文字で区切られたパターンも検索し、パターンに一致する行をそれぞれ出力します。

1_ovG5it9EJTZ0JG3tdOgclA.png

grep でファイル内の React という文字列を検索する


-i オプションを使用すると、指定したファイル内の大文字と小文字を区別せずに文字列を検索できます。この場合「REACT」、「REact」、「react」などの文字列を検索します。
$ grep -i "REact" file

-c (count)オプションを使用すると、指定された文字列/パターンがファイル内で何回記載されているかがわかります。

$ grep -c "react" index.js

1_-KL9UvoB8RR4NKkUfHNBoQ.png

grep -c コマンドで react の 記載回数をカウント



これは私がインターネットで見つけた、grepコマンドに関する楽しくてためになるイラストです。

1_ZkpszLnLQFRFp_cVO_Ldmw.jpeg
Source: Wizard Zines

また、異なるコマンドの egrep および fgrep は、それぞれ grep -E および grep -F と同様のコマンドです。これらのバリアントは非推奨ですが、下位互換性のために提供されています。

grep では多くのことを行えます。--より深く理解するためにはこのドキュメントを読んでください。

2. ls

$ ls

ls コマンドはパス内のファイルとディレクトリを一覧表示します。パス名がファイルの場合、ls コマンドは要求されたオプションに従ってファイルに関する情報を表示します。

パス名がディレクトリの場合、ls コマンドはディレクトリ内のファイルとその中のサブディレクトリに関する情報を表示します。

1_JthCA8XeIN22yScYBJlRIw.png

ls でパス内のすべてのディレクトリとファイルを表示



フォルダが青色で表示されているのに対し、ファイルはグレーで表示されていることに気づいたかもしれません。これは、フォルダとファイルを区別するのに役立ちます。

3. pwd

$ pwd

1_E1zXuIQ6X0aaTtVC0wZ_nw.png

pwd で作業ディレクトリの絶対パスを表示



pwd コマンドは、現在の作業ディレクトリを出力するコマンドです。現在の作業ディレクトリの完全なシステムパスを標準で出力します。オプションで現在のディレクトリの完全な物理パスを表示できますが、デフォルトでは、pwd コマンドはシンボリックリンクを無視します。

4. cat

$ cat somefile.js

1_SL7g1NHsb7dKgwmoYBySkQ.png

cat でファイルの内容を表示



cat コマンドには、テキストファイルに関する3つの関連機能があります。
  • テキストファイルの内容を表示する
  • テキストファイルのコピーを結合する
  • 新しいテキストファイルを作成する

cat コマンドの最も一般的な使い方は、ファイルの内容を読み取ることであり、多くの場合この目的に最も便利なコマンドです。

以下の例では、cat の標準出力は、出力リダイレクト演算子( > で表されます)を使用してfile2にリダイレクトされます。

$ cat somefile > somefile2

1_NxLOMigqozU5EvxVdr1f7Q.png

cat を使ってファイルを作成する

5. echo

$ echo "some text"

Linux の echo コマンドは、引数として渡されたテキスト/文字列を表示するために使用されます。echo コマンドは主にシェルスクリプトやバッチファイル内で使われ、ステータス情報のテキストを画面やファイルに出力します。

1_1bMjVqwhueQP5hvyMMdDKA.png

6. touch

$ touch somefile

touch コマンドは空ファイルを作成するために使用されます。touch コマンドは、ユーザーがファイル作成時点ではデータを保存する必要がない場合に使用されます。
1_RIrUCSW4TT_cJrnGy9ighQ.png

touch で新しいファイルを作成



上の図ではtouch を使ってファイルを作成し、cat でファイルの内容を確認しています。新しく作成されたindex2.jsファイルは空なので、cat は何も返しません。

以下はcattouch の主な違いです:

  • cat — コンテンツを含むファイルを作成するために使用されます。
  • touch — コンテンツ無しまたは空ファイルの状態でファイルを作成します。touch コマンドで作成したファイルは空だということに注意してください。このコマンドは、ユーザーがファイル作成時点で保存するデータがない場合に便利です。

7. mkdir

$ mkdir some-directory

単語から推測できる通り、mkdir は現在のアクティブパスに新しい空のディレクトリを作成します。テキストエディターやGUI上でクリックする代わりに、このコマンドを使用して新しいフォルダーを作成します。
1_FsxDBW5HDWJn9kHsw0My7A.png

mkdir で新しいディレクトリを作成



注:前述のls コマンドでディレクトリ内をどのように覗くことができるか確認してみてください。

7.1 rm

$ rm someFile

rm はremoveの略で、まさにそのまま言葉通りのことをします。つまり、ファイルを取り除く、別の言葉で言えば、削除します。

1_damLEKdyWY7aBPILFELVNg.png

rm コマンドでファイルを削除



デフォルトでは、rm コマンドはディレクトリを削除しません。ディレクトリを削除するには、(rm) -rf オプションを渡す必要があります。
$ rm -rf some-directory

1_gXTLAllsEVTdWHCcDw83WQ.png

rm -rf でディレクトリを削除(ディレクトリ削除のためのオプションを付与)



注:このコマンドにより、ディレクトリにコンテンツが含まれているかどうかに関係なくディレクトリが無条件に削除されます。

7.2 rmdir

$ rmdir some-directory

rmdir コマンドはディレクトリの内部にコンテンツがない場合にディレクトリを削除します。

1_aUJ0VbrVb_cTUf0okMxmWA.png

rmdir でからのディレクトリを削除

8. tail

$ tail somefile

tail コマンドはファイルの最後の部分(テール)を読み取り出力します。
1_Xvo2zdyDZqj4QhTHF0TLTg.png

デフォルト(10)の代わりに最後のnum 行を出力



tail コマンドは、クラッシュレポートや直近の履歴ログを調べるときに便利です。ファイルログを確認するときに有用となる例を以下に記載します。
# tail /var/log/messages
Mar 20 12:42:22 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:24 hameda1d1c avahi-daemon[2027]: Registering new address record for fe80::4639:c4ff:fe53:4908 on eth0.*.
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPACK from 10.76.198.1 (xid=0x280436dd)
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.76.199.87.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: New relevant interface eth0.IPv4 for mDNS.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Registering new address record for 10.76.199.87 on eth0.IPv4.
Mar 20 12:42:30 hameda1d1c NET[4385]: /sbin/dhclient-script : updated /etc/resolv.conf
Mar 20 12:42:30 hameda1d1c dhclient[4334]: bound to 10.76.199.87 -- renewal in 74685 seconds.
Mar 20 12:45:39 hameda1d1c kernel: usb 3-7: USB disconnect, device number 2

9. wget

$ wget someurl

wget (GNU Wget)は 最も広く使用されているインターネットプロトコルであるHTTP、HTTPS、FTP、およびFTPSを使用してファイルを取得するための、フリーソフトウェアパッケージです。ノンインタラクティブなコマンドラインツールであるため、スクリプト、CRONジョブ、X-Windowsサポートのないターミナルなどから簡単に呼び出すことができます。

1_nbzEhCeVUxT2-Px0oQbszQ.png

wget でウェブページの情報を取得



wget (GNU Wget)には、大きなファイルの取得やWebサイト、FTPサイト全体のミラーリングを容易にする以下のような多くの機能があります。
  • RESTとRANGEを使用して、中断したダウンロードを再開できます
  • ファイル名にワイルドカードを使用して、ディレクトリを再帰的にミラーリングできます
  • NLSベースの様々な言語向けメッセージファイル
  • オプションでダウンロードされたドキュメントの絶対リンクを相対に変換し、ダウンロードされたドキュメントがローカルで相互にリンクできるようにします
  • ほとんどのUNIXライクなオペレーティングシステムおよびMicrosoft Windowsで実行可能
  • HTTPプロキシをサポート
  • HTTP Cookieをサポート
  • 持続的なHTTP接続をサポート
  • コンソール無接続 / バックグラウンド でのダウンロードをサポート
  • ローカルファイルのタイムスタンプを使用して、ミラーリング時にドキュメントを再ダウンロードする必要があるかどうかを判断
  • GNU WgetはGNU General Public Licenseのもとで配布されています。

詳細については、公式のGNUドキュメントを参照してください。

10. find

$ find path -name filename

find コマンドによりファイルまたはディレクトリをすばやく検索できます。数百以上のファイルや複数のディレクトリを持つ、大きなプロジェクトで作業する場合に便利です。
1_j291SZcYXSaPtdvqipX6sg.png

find でディレクトリ内のindex.jsという名前のファイルすべてを見つける

特定の種類のファイルを検索する

find コマンドを使用すると、ディレクトリ(およびそのサブディレクトリ)内で同じタイプのファイルを検索することもできます。例えば以下のコマンドは現在の作業ディレクトリ内のすべての .js ファイルを検索します。

$ find . -name "*.js"

1__i8_TEIElXAAyXy-F1JQmA.png

componentsディレクトリですべての .js ファイルを見つける

11. mv

$ mv somefile /to/some/other/path

mv コマンドは、ファイルまたはディレクトリをある場所から別の場所に移動します。このmv コマンドは、単一ファイル、複数ファイル、およびディレクトリの移動をサポートしています。

1_TdqoyPUFrdBvI2Ws7cfyfQ.png

some-directory を components からutils に移動する

最後に..

ここまで読んでいただきありがとうございます。何か得るものがあったなら幸いです。もっと便利なコマンドを知っている場合は是非共有していただき、一緒に成長していきましょう。

-貪欲であれ。好奇心旺盛であれ。-

翻訳協力

 
Original Author: Indrek Lasn
Thank you for letting us share your knowledge!

この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: Yumika Tomita
翻訳担当: @upaldus
監査担当: @nyorochan
公開担当: @miyonori0812

ご意見・ご感想をお待ちしております

今回の記事は、いかがだったでしょうか?
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。Twitterでもご意見を受け付けております。
みなさまのメッセージをお待ちしております。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away