こちらの記事は、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
コマンドは各ファイルの文字列を検索します。また、改行文字で区切られたパターンも検索し、パターンに一致する行をそれぞれ出力します。
`-i` オプションを使用すると、指定したファイル内の大文字と小文字を区別せずに文字列を検索できます。この場合「REACT」、「REact」、「react」などの文字列を検索します。
$ grep -i "REact" file
-c
(count)オプションを使用すると、指定された文字列/パターンがファイル内で何回記載されているかがわかります。
$ grep -c "react" index.js
これは私がインターネットで見つけた、`grep`コマンドに関する楽しくてためになるイラストです。
Source: Wizard Zines
また、異なるコマンドの egrep
および fgrep
は、それぞれ grep -E
および grep -F
と同様のコマンドです。これらのバリアントは非推奨ですが、下位互換性のために提供されています。
grep
では多くのことを行えます。--より深く理解するためにはこのドキュメントを読んでください。
2. ls
$ ls
ls
コマンドはパス内のファイルとディレクトリを一覧表示します。パス名がファイルの場合、ls
コマンドは要求されたオプションに従ってファイルに関する情報を表示します。
パス名がディレクトリの場合、ls
コマンドはディレクトリ内のファイルとその中のサブディレクトリに関する情報を表示します。
フォルダが青色で表示されているのに対し、ファイルはグレーで表示されていることに気づいたかもしれません。これは、フォルダとファイルを区別するのに役立ちます。
3. pwd
$ pwd
`pwd` コマンドは、現在の作業ディレクトリを出力するコマンドです。現在の作業ディレクトリの完全なシステムパスを標準で出力します。オプションで現在のディレクトリの完全な物理パスを表示できますが、デフォルトでは、`pwd` コマンドはシンボリックリンクを無視します。
4. cat
$ cat somefile.js
`cat` コマンドには、テキストファイルに関する3つの関連機能があります。
- テキストファイルの内容を表示する
- テキストファイルのコピーを結合する
- 新しいテキストファイルを作成する
cat
コマンドの最も一般的な使い方は、ファイルの内容を読み取ることであり、多くの場合この目的に最も便利なコマンドです。
以下の例では、cat
の標準出力は、出力リダイレクト演算子( >
で表されます)を使用してfile2にリダイレクトされます。
$ cat somefile > somefile2
5. echo
$ echo "some text"
Linux の echo
コマンドは、引数として渡されたテキスト/文字列を表示するために使用されます。echo
コマンドは主にシェルスクリプトやバッチファイル内で使われ、ステータス情報のテキストを画面やファイルに出力します。
6. touch
$ touch somefile
touch
コマンドは空ファイルを作成するために使用されます。touch
コマンドは、ユーザーがファイル作成時点ではデータを保存する必要がない場合に使用されます。
上の図では`touch` を使ってファイルを作成し、`cat` でファイルの内容を確認しています。新しく作成されたindex2.jsファイルは空なので、`cat` は何も返しません。
以下はcat
と touch
の主な違いです:
-
cat
— コンテンツを含むファイルを作成するために使用されます。 -
touch
— コンテンツ無しまたは空ファイルの状態でファイルを作成します。touch
コマンドで作成したファイルは空だということに注意してください。このコマンドは、ユーザーがファイル作成時点で保存するデータがない場合に便利です。
7. mkdir
$ mkdir some-directory
単語から推測できる通り、mkdir
は現在のアクティブパスに新しい空のディレクトリを作成します。テキストエディターやGUI上でクリックする代わりに、このコマンドを使用して新しいフォルダーを作成します。
注:前述の`ls` コマンドでディレクトリ内をどのように覗くことができるか確認してみてください。
7.1 rm
$ rm someFile
rm
はremoveの略で、まさにそのまま言葉通りのことをします。つまり、ファイルを取り除く、別の言葉で言えば、削除します。
デフォルトでは、`rm` コマンドはディレクトリを削除しません。ディレクトリを削除するには、`(rm) -rf` オプションを渡す必要があります。
$ rm -rf some-directory
注:このコマンドにより、ディレクトリにコンテンツが含まれているかどうかに関係なくディレクトリが無条件に削除されます。
7.2 rmdir
$ rmdir some-directory
rmdir
コマンドはディレクトリの内部にコンテンツがない場合にディレクトリを削除します。
8. tail
$ tail somefile
tail
コマンドはファイルの最後の部分(テール)を読み取り出力します。
`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サポートのないターミナルなどから簡単に呼び出すことができます。
`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
コマンドによりファイルまたはディレクトリをすばやく検索できます。数百以上のファイルや複数のディレクトリを持つ、大きなプロジェクトで作業する場合に便利です。
特定の種類のファイルを検索する
find
コマンドを使用すると、ディレクトリ(およびそのサブディレクトリ)内で同じタイプのファイルを検索することもできます。例えば以下のコマンドは現在の作業ディレクトリ内のすべての .js ファイルを検索します。
$ find . -name "*.js"
11. mv
$ mv somefile /to/some/other/path
mv
コマンドは、ファイルまたはディレクトリをある場所から別の場所に移動します。このmv
コマンドは、単一ファイル、複数ファイル、およびディレクトリの移動をサポートしています。
最後に..
ここまで読んでいただきありがとうございます。何か得るものがあったなら幸いです。もっと便利なコマンドを知っている場合は是非共有していただき、一緒に成長していきましょう。
翻訳協力
Original Author: Indrek Lasn
Thank you for letting us share your knowledge!
この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: Yumika Tomita
翻訳担当: @upaldus
監査担当: @nyorochan
公開担当: @miyonori0812
ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか?
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。
みなさまのメッセージをお待ちしております。