LoginSignup
1172
1315

More than 1 year has passed since last update.

駆け出しエンジニアの頃に知ってたら超捗ってたlinux系コマンド・テクニックまとめ

Last updated at Posted at 2020-01-19

はじめに

僕が初めて現場に入ったときは、ターミナルの真っ黒い画面に面食らっていましたが、今では最も眺めている時間の長いものになりました。

プログラミングを始めてから1年半がたった今でも、ほぼ毎日のように使っているLinux系のコマンド・テクニックをまとめました!

これさえ抑えておけば、駆け出しエンジニアの方はとりあえず現場に放り込まれてもサバイブできるはずです!

コマンドまとめ

ls

listの略。
コマンドを打ったディレクトリ以下のファイル・フォルダを表示してくれます。

lsの使用例

> ls

pwd

print working directoryの略。
現在のディレクトリの位置を表示してくれます。

pwdの使用例

> pwd

→ /Users/hoge/path

cd

change directoryの略。
ディレクトリ移動ができます。何もつけずcdだけ打つとホームディレクトリに、cd -と打つと、直前にいたディレクトリに移動できます。

cdの使用例

> cd path/to/hoge
→ hogeディレクトリに移動

mv

moveの略。
ファイル・ディレクトリの移動ができます。ファイルのリネームをしたいときもコイツを使います。

mvの使用例

ファイルの移動。hoge.txtをsome_directoryに移動させる
> mv hoge.txt some_directory

ファイルのリネーム。hoge.txtをfuga.txtにリネームする
> mv hoge.txt fuga.txt

cp

copyの略。
cp 第1引数 第2引数で、第1引数のファイルを第2引数にコピーします。

cpの使用例

hoge.txtをsome_directoryの中にfuga.txtという名前でコピー
> cp hoge.txt some_directory/fuga.txt

find

名前の通り、ファイルやディレクトリを探しだすコマンドです。ちょっと複雑で難しいのですが、なれるとむっちゃ便利です。

findの使用例

拡張子が`md`のファイルを現在いるディレクトリ以下から探し出します
(ルートディレクトリで実行すると全ディレクトリに対して検索するので検索結果がエグいことになります)

> find . -name "*.md"

grep

Global regular expression printの略。
コマンドを打ったディレクトリ以下からファイルを読み込み、テキストを検索してくれるコマンドです。

grepの使用例

> grep hoge

→
hoge.md
17:hogehoge/fugafuga

fuga.md
25:→ /Users/hoge/path
33:> cd path/to/hoge
34:→ hogeディレクトリに移動

hogefuga.md
27:/Users/hoge

ちなみに、ripgrepというgrepの進化版(亜種?)がありまして、ripgrepのほうが圧倒的に早いので、こちらをおすすめしておきます。

ripgrep

cat

concatenate(鎖状につなぐ)の略。猫ちゃんではありません。
指定したファイルの中身が閲覧できます。

catの使用例

> cat hoge.txt

→
hogehogehogeho
hogehogehogeho
hogehogehogeho

more

指定したファイルの中身が閲覧できます。catとは違い、ファイルの中身がちょっとずつ表示されるので、ファイルの行数が多いときに使うと便利です。moreを打った後は、qを押すと、もとの画面に戻ります。

moreの使用例

> more hoge.txt

less

moreの進化版みたいなコマンドです。今回はmorelessの両方を紹介しましたが、基本的にはどちらか一つだけ使えるようになっておけばOKです!

moreと同じくコマンドを叩くと、閲覧モードに移行し、qを押すともとの画面に戻ります。

↓の記事も参考になるのでぜひ。

エンジニアなら知っておきたい lessコマンドtips 11選

lessの使用例

> less hoge.txt

head

指定したファイルを上から○行だけ表示してくれます。head -10と数字を指定すると、ファイルの上から10行だけ、みたいなことが可能になります。

headの使用例

head -10 hoge.txt

→
(hoge.txtの上から10行分が表示される)

tail

headとは逆で、指定したファイルを下から○行だけ表示します。headと同じく、tail -10と数字を指定すると、ファイルの下から10行だけ表示、みたいなことが可能になります。

tailの使用例

tail -10 fuga.txt

→
(fuga.txtの下から10行分が表示される)

echo

引数をあてると、その引数の内容を出力します。環境構築などでよく見るコマンドですね。

echoの使用例

> echo $PATH

→
/Users/sukebeeeeei/.tfenv/bin:/Users/sukebeeeeei/node_modules:/Users/sukebeeeeei/.nodenv/bin:/Users/sukebeeeeei/.nodenv/shims:/usr/local/opt/mysql@5.7/bin:/Users/sukebeeeeei/go/bin:/Users/sukebeeeeei/.goenv/shims:/Users/sukebeeeeei/.goenv/bin:/Users/sukebeeeeei/.pyenv/shims:/Users/sukebeeeeei/.pyenv/bin:/Users/sukebeeeeei/.rbenv/shims:/Users/sukebeeeeei/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/go/bin:/opt/X11/bin:/usr/local/texlive/2018/bin/x86_64-darwin/:/Users/sukebeeeeei/dotfiles

(PATHが表示されてます)

touch

ファイルのタイムスタンプを現在時刻に更新します。
ファイルが存在しない場合は、空ファイルを作成します。なんでtouchという名前なのでしょうか。誰か教えてください。

touchの使用例

# hoge.txtがある場合
> touch hoge.txt

→
(ファイルのタイムスタンプが更新されます)

# hoge.txtが無い場合
> touch hoge.txt

→
(中身が空のhoge.txtが作成されます)

vi・vim

vi・vimが開けます。わざわざvscodeやatomなどのエディターを開くのが面倒なときなどに使いますね。

後は、vim hoge.txtとすると、hoge.txtが存在しなかった場合に、ファイルを生成してくれるので、

  • あるファイルを作成し
  • そのファイルにちょろっと書き込みをする

というときには頻出のコマンドです。vi・vimに関しては、基本的なコマンドはすべてのエンジニアが習得しておくべきなので、使ったことがないよーという方は、この際にぜひ練習してみてください。

知識0から始めるVim講座

vi・vimの使用例

> vim hoge.txt

mkdir

make directoryの略です。その名の通り、ディレクトリを作成するコマンドです。

mkdirの使用例

> mkdir hoge

→
(hogeディレクトリが作成されます)

rm

removeの略。ファイルを削除するときに使うコマンドです。
使い方をミスると破滅するので、ご利用は計画的にどうぞ

rm~ディレクトリやファイルを削除する

rmの使用例

> rm hoge.txt

→
hoge.txtが削除されます

rmdir

remove directoryの略。ディレクトリを削除するときに使うコマンドです。中身が空っぽのディレクトリしか消せません。ですので、ほぼほぼ使うことはないですw(この記事で紹介しておきながら)

ファイルが中にあるディレクトリを消したい場合は、> rm -rf hoge_directoryとすることがほとんどです。

rmdirの使用例

> rmdir hoge_empty_directory

→
(hoge_empty_directoryを削除)

ln

linkの略です。シンボリックリンクを作ることができます。シンボリックリンクとはなんぞや?、という方は下記記事をご参照ください。

シンボリックリンク設定方法

lnの使用例

> ln -s ~/dotfiles/vimrc/_vimrc ~/.vimrc

man

manualの略。
コマンドの説明を表示するコマンド(ややこしい)です。「あーーーこのコマンドどうやって使うんだっけ?」とか、「このコマンドのオプションって何があるんだっけ?」というときに使います。

manの使用例

> man ls

→
(lsコマンドの説明書がでてくる)

sudo

superuser doの略です。すぅーどぅーとか、須藤さんと読むことが多いです。

管理者権限でコマンドを実行したいときに使います。sudoをつけると、コマンドを叩いた後にパスワードを聞かれるので、それを入力してコマンドを実行します。

sudoの使用例

> sudo vim hoge.txt

→Password:
(パスワードを入力してEnterを押すとコマンドが実行できる)

history

その名の通り、今までに打ってきたコマンドの履歴が表示されます。

historyの使用例

> history

→
...
11879 less must_cover_linux_commands.md
11880 tail must_cover_linux_commands.md
11881 more must_cover_linux_commands.md
11882 head must_cover_linux_commands.md
11883 more must_cover_linux_commands.md -n 100
11884 more must_cover_linux_commands.md -n 3
...

便利テクニック集

コマンドラインを扱う上で、知っているととても捗るテクニックを紹介します。知っている人からしたら当たり前のことなんですが、それを誰もが知っているとは限りませんからね。僕も初めて現場に入って数ヶ月ぐらいして初めて知りましたし、知った当時はいたく感動したものです。

“< > >>”

解説するより実例を出したほうが理解は早いと思うので、参考例をば。

> ruby calculate.rb < input_data.txt
(calculate.rbを実行し、そのデータとしてinput_data.txtを指定します)

> ruby calculate.rb > output_data.txt
(calculate.rbを実行し、その出力結果をoutput_data.txtに出力します。output_data.txtが存在していなかった場合はファイルの作成も勝手に行われます。output_data.txtが存在していた場合は、ファイルの中身が出力結果で上書きされます)

> ruby calculate.rb >> output_data.txt
(cdalculate.rbを実行し、その出力結果をoutput_data.txtの末尾に追加します。> output_data.txtとは違い、ファイルの中身が上書きされないのがポイント)

> ruby calculate.rb < input_data.txt > output_data.txt
(<と>、および>>は組み合わせることができます。↑では、calculate.rbを実行し、実行に用いるデータはinput_data.txtの中身を、そして実行結果をoutput_data.txtに出力します)

pipe (|)

コマンドとコマンドをつなげることができます。むっっっっちゃ使います。

> cat hoge.txt | grep fuga
(hoge.txtのなかでfugaという文字列が含まれている場所を探す)

$(), ``

$()のカッコの内部でコマンドを実行し、その結果を返してくれます。といっても、これだけでは全然意味がわからないと思うので、実例を出します。

> cat $(ls)

(先に$(ls)が実行され、その結果がcatの引数となります。その結果、↑のコマンドを実行したディレクトリ配下のファイルの中身がすべて表示されます。)

正規表現

例えばgrepコマンドでは、*+.などの正規表現を使うことができます。というより、grepはもともとGlobal regular expression printの略なので、正規表現が使えるのは当たり前なんですけどねw

*+は同じ文字の繰り返し(*は空文字を含むのに対し+は1文字以上)。.は任意の1文字ですね。

> grep .*hoge

(hogeを含む文章を検索)

コマンドとテクニックを組み合わせてみる

では、今までに紹介したコマンドとテクニックを組み合わせてみます!

うわーあのコマンドなんだっけーってとき

ctrl + rで過去のコマンドが検索できますが、↓のコマンドでも同じことができます。

> history | grep command_name

(macの場合) Downloadに入っているファイルのうち最新○件の名前を知りたい

> ls -lat ~/Downloads | head -10
total 3408200
drwxr-xr-x+ 112 keisuke  staff       3584  1 18 21:49 ..
drwx------@ 569 keisuke  staff      18208  1 18 18:54 .
-rw-r--r--@   1 keisuke  staff      65540  1 18 18:54 .DS_Store
-rw-r--r--@   1 keisuke  staff     254894  1 18 18:54 finished.zip
-rw-r--r--@   1 keisuke  staff       1692  1 17 22:53 dupSSHkey.pem
-rw-r--r--@   1 keisuke  staff     128909  1 13 10:19 assignment-2-problem.zip
-rw-r--r--@   1 keisuke  staff     129247  1 12 11:43 01-start.zip
-rw-r--r--@   1 keisuke  staff      26651  1 12 11:43 learning-card.pdf
-rw-r--r--@   1 keisuke  staff     236506  1 12 11:25 forms-03-finished.zip

ログを見たいとき

tail -f log/development.log

ログを見たいときはこのコマンドですね。Railsを書いているときは、だいたいこのコマンドを叩いて、ログ確認用にターミナルを1パネル分割り当ててます。

ログの中から特定の文字列だけを検出したいとき

tail -f log/development.log | grep "検索したい文字列"

もしくは

cat log/development.log | grep "検索したい文字列"

プリントデバッグとかしたいときはこのコマンドを使ったりしますね。

.zshrc(もしくは.bashrc)に文字列を挿入したい

環境構築するときによく見るコマンドですね。''の中身をechoで出力し、その出力結果を~/.zshrcに挿入する、というコマンドです。

echo 'export PATH=">HOME/.nodenv/bin:>PATH"' >> ~/.zshrc

特定のプロセスIDを調べたい

grepというプロセスが動いているか調べるコマンドです。

> ps aux | grep grep
sukebeeeeei          80328   0.0  0.0  4268280    656 s012  S+    9:52PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn grep

2個下のディレクトリにあるファイルを一覧でみたいとき

↓のような構造のディレクトリがあるとします(僕のQiitaに上げる記事を保存してあるディレクトリですw)
>  qiita-outputs git:(master) ✗ tree
.
├── README.md
├── alfred_techniques.md
├── articles
│   └── nukistagram_release.md
├── english_acronym.md
├── env_and_env_fetch
│   └── sample.rb
├── favorite_english_site.md
├── must_cover_linux_commands.md
├── must_gem_list.md
├── path_understanding.md
├── peco_intro.md
├── really_good_software.md
└── software_engineer_general_knowlegde.md

2 directories, 12 files

(正規表現を用いてやってみる。ディレクトリの構造が複数層見られる)
>  qiita-outputs git:(master)ls *
README.md                              must_gem_list.md
alfred_techniques.md                   path_understanding.md
english_acronym.md                     peco_intro.md
favorite_english_site.md               really_good_software.md
must_cover_linux_commands.md           software_engineer_general_knowlegde.md

articles:
nukistagram_release.md

env_and_env_fetch:
sample.rb

(2個下のディレクトリのファイルを調べる)
>  qiita-outputs git:(master)ls */*
articles/nukistagram_release.md env_and_env_fetch/sample.rb

出力結果のうち、先頭10行だけを見たい

> ls */* | head -10

出力結果が長くなるので、一部をちょい出しにしてチェックしていきたい

> ls */* | less

dockerのイメージをまとめて消したいとき

> docker rmi $(docker images -q)

もしくは

> docker rmi `docker images -q`

docker imagesでdockerのイメージ一覧が見られます。オプションで-qをつけることによって、イメージIDだけが表示されるように。

それを先に$(docker images -q)で処理して、その返り値に対してdocker rmiを実行します。(rmi: remove image)

参考までに。docker imagesのうち、先頭5つだけを見たい場合。

> ~ docker images | head -5
REPOSITORY                                      TAG                          IMAGE ID            CREATED             SIZE
<none>                                          <none>                       8769696a985d        4 days ago          910MB
<none>                                          <none>                       694f9395f0e7        4 days ago          1.04GB
<none>                                          <none>                       8ff2255c3c50        4 days ago          995MB
<none>                                          <none>                       a1457d2c753d        2 weeks ago         995MB
<none>                                          <none>                       788141cacfc5        2 weeks ago         998MB

docker imagesのうち、先頭5つのイメージIDだけをみたいとき

>  ~ docker images -q | head -5
8769696a985d
694f9395f0e7
8ff2255c3c50
a1457d2c753d
788141cacfc5

grepの検索結果をファイルに出力する

> grep hoge > hoge_search_result.txt

出力したテキストを置換して表示したい

sed(stream editorの略)というコマンドを使うと、テキストの置換ができたり、色々テクニカルで面白いことができるようになります。

> echo abcabc | sed s/ca/12/g

→ ab12bc

grepで一致したうち、その前後の行の内容も知りたいとき

grep -C nで一致したところの前後n行も表示できる

> grep -C 3 "search_word" search_file

あるコマンドのオプションの内容をパッと知りたいとき

例えば、findコマンドで、正規表現はどのように扱うのか、オプションをつければいいのか、とかを知りたいとする。そういうときはこれ。

findコマンドについてマニュアルを表示し、そのマニュアルのなかで"regular expression"に一致する箇所を、その前後3行も含めて表示する

> man find | grep -C 3 "regular expression"

     The options are as follows:

     -E      Interpret regular expressions followed by -regex and -iregex pri-
             maries as extended (modern) regular expressions rather than basic
             regular expressions (BRE's).  The re_format(7) manual page fully
             describes both formats.

     -H      Cause the file information and file type (see stat(2)) returned
--
--
     -regex pattern
             True if the whole path of the file matches pattern using regular
             expression.  To match a file named ``./foo/xyzzy'', you can use
             the regular expression ``.*/[xyz]*'' or ``.*/foo/.*'', but not
             ``xyzzy'' or ``/foo/''.

     -samefile name

最後に

上記で紹介したコマンドやテクニックも、シェルスクリプトとかエイリアスと組み合わせるともっともっと強力になるのですが、本記事から逸脱した内容となるためなくなく断念しました。この記事がバズったら、そのあたりを解説した記事も執筆したいなぁと考えていたり。

「ワイはこんなコマンド使ってるで!」、みたいな便利tipsがあったらぜひコメントを!
間違いや誤字脱字の報告もぜひぜひお願いします!

宣伝

バズったので唐突に宣伝を入れておきますw
結構気合い入れて書いた記事です〜。自信作なのでぜひ読んでってくださいw!

【英語学習】海外の面白い・勉強になるプログラミング系Youtuberを5人&その他英語圏のおすすめ動画を一気紹介!

【作業効率化】優秀すぎて課金してでも個人的に使ってるMacOSソフトウェアまとめ【5選】

pecoを使ったらターミナルの操作が劇的に効率化できた話

参考文献

Linuxコマンドは単語の意味を理解するとグッと身近なものになる

新しいLinuxの教科書

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

UNIXという考え方―その設計思想と哲学

おまけ

noteでも記事を書いているので、よかったら覗いてみてください

【22新卒エンジニア】Indeedから内定をもらうまで【新卒1000万】

1172
1315
20

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1172
1315