はじめに
プログラミングを学び、プログラミングを上達していく上で必須なLinuxコマンドの、基礎中の基礎と言われるコマンドをまとめてみました。
LinuxもmacOSもどちらもUNIX系なのでだいたい同じコマンドがターミナルで使えます。Macを使われている方もぜひ参考にして下さい。
【コマンド入門】
コマンドには「引数」が指定できます。引数の中でもコマンドの動作を変えるものは「コマンドラインオプション」や「オプション」と呼ばれます。
lsコマンド(ファイルやディレクトリの情報を表示します)のオプションに「-F」をつけて実行するとディレクトリ名の後に「/」がつきました。
他にも「ls -l
」とすると、ファイル名だけでなく日時やファイルを所有しているユーザーの情報なども表示できます。「ls -lF
」のように同時に指定することも可能です。
コマンドの使い方を調べる
コマンドによっては使用することのできるオプションはさまざまです。コマンドごとに使用できる引数を全て覚えることは難しいので、コマンドのオプションなどは調べながら実行していくことになります。
Webで調べることもできますが、ここではコマンドのヘルプを見る方法も覚えます。
先程の「ls
」コマンドのヘルプを見るには、「コマンド名 --help
」として表示させます。
他にもコマンドのマニュアルを見る方法もあります。
「man コマンド名
」として、manコマンドの引数にコマンド名を指定します。
デフォルトでは全て英語で書かれているので、日本語のマニュアルをインストールします。
$ sudo apt install manpages-ja manpages-ja-dev
でインストールできます。(Macのmanコマンドを日本語にしたい方がいらっしゃれば、こちらのページがとても参考になりました。)
一時的に英語で表示させたい場合は$ LANG=C.UTF-8 man コマンド名
として表示することができます。(ここでは紹介しませんが、さらに情報を詳しく表示させるような「info
」コマンドもあります)
sudo (スードゥー)
sudoとは特定の管理者コマンドを実行するためのコマンドです。
下の画像はシステムのパッケージ情報を最新にするためのコマンドの例です。
sudoをつけずに実行すると「許可がありません」と言われ失敗してしまいます。sudoを行頭につけて実行すると、パスワードの入力を求められ管理者権限でコマンドが実行でき、アップデートが成功します。
【Linuxコマンド入門まとめ】
ターミナルに関するコマンド
pwd
現在のディレクトリを表示します。
pwd # 現在操作しているディレクトリの場所を表示
cd
操作しているディレクトリを移動します。
cd .. # 現在の親ディレクトリに移動
cd ~/ # ホームディレクトリに移動
cd Desktop # 一階層下のDesktopディレクトリに移動
ls
ファイルやディレクトリの情報を表示します。
ls # ファイル名が.で始まるファイル以外をファイル名の順に表示
ls -a # .から始まるファイル名を含んだファイル名を表示
ls -l # ファイルの権限、所有ユーザー、ファイルサイズ、変更日時を表示
ls hoge* # ファイル名の先頭にhogeを含むファイル名のみ表示
find
条件に合致するファイルを探します。
find ディレクトリ名 -name hoge # ファイル名にhogeを含むファイルを指定したディレクトリ、およびそのサブディレクトリから探す
which, whereis
コマンドの置かれている場所の絶対パスを表示します。
which コマンド名 # 一般ユーザーは管理者用のコマンドを検索することはできない
whereis コマンド名 # whichでは表示されない管理者用のコマンドも表示する
clear
ターミナルに表示されている画面をクリアにする
clear # 一行目から入力できるようにする
logout, exit
ターミナルを終了します。
logout # ターミナルを終了
ファイル操作に関するコマンド
cp
ファイルやディレクトリをコピーします。
cp file1 file2 # file1の内容をfile2にコピーする、file2が存在しない場合は新しくfile2を作成しコピーする(※file2の名前がfile1と一致すると上書きされてしまうため注意
cp -R directory1 directory2 # directory1をdirectory2へ丸ごとコピーする
mv
ファイルやディレクトリを移動、もしくは名前を変更します
mv file1 file2 # file2をfile1という名前に変更する
mv file名 directory名 # 指定したファイルを指定したディレクトリへ移動する
rm
ファイルを削除します。
rm ファイル名 # 指定したファイルを削除する
rm hoge* # ファイル名がhogeから始まるファイルを全て削除する
rn -r ディレクトリ名 # 指定したディレクトリとその中にあるファイルを全て削除する
touch
ファイルのアクセス時刻、修正時刻の変更を行います。
touch ファイル名 # 指定したファイル名が存在しない場合は空のファイルを作成する
mkdir
ディレクトリの作成を行います。
mkdir ディレクトリ名 # 指定したディレクトリ名でディレクトリを作成
mkdir -p directory1/directory2 # directory1の中にdirectory2を作成
rmdir
ディレクトリを削除します。ただし空のディレクトリでないと削除されません。
rmdir ディレクトリ名 # 指定した空のディレクトリを削除する
tar
ファイルやディレクトリを一つのアーカイブ(記録を保管しておく場所)にまとめて格納したり、それを解凍したりします。
主にソースファイル一式をやり取りする場合などに使われます。
tar cvf hoge.tar * # 現在のディレクトリにあるファイルやディレクトリ全てをhoge.tarにまとめて格納する
tar xvf hoge.tar # hoge.tarを解凍する
gzip, gunzip
Linuxで用いられることの多い圧縮方法のファイルの圧縮、解凍を行います。
gzip hoge.js # hoge.jsファイルを圧縮しhoge.js.gzを作成、元のファイルは削除する
gunzip hoge.js.gz # hoge.js.gzを解凍する
zip, unzip
windowsで用いられることの多い圧縮方法のファイル圧縮、解凍を行います。
zip hoge.zip hoge.js # hoge.jsファイルをhoge.zipとして圧縮する
unzip hoge.zip # hoge.zipファイルを解凍する
ファイルの中身を見たり操作したりするコマンド
cat
ファイルの内容を連結して一気に表示します。
cat ファイル名 # ファイルの内容を表示
cat file1 file2 > newfile # file1,file2の内容をnewfileファイル一つにまとめる
wc
ファイルの行数、単語数、バイト数を表示します。
wc -l ファイル名 # 行数とファイル名のみ表示する
less
ファイルの内容を1画面ずつ表示します。
less ファイル名 # 表示を終了させる時はqキーを押す
diff
2つのファイルの違いを探します。
diff file1 file2 # file1からfile2に対してどこが変更されたのかが表示される。(削除された行は先頭に<、追加された行は先頭に>がついて表示される)
diff -b file1 file2 # スペースの数が違うだけの場合は違いを無視する。
diff -B file1 file2 # 空行があるかどうかについては違いを無視する。
file
ファイルのタイプを表示します。
file ファイル名 # ソースファイルなのか実行ファイルなのかなどを表示
grep
指定した文字や単語などが含まれている行を表示します。
grep hoge ファイル名 # hogeという単語が含まれている行を探す
grep -C n hoge ファイル名 # hogeをという単語の前後n行も表示
grep -c hoge ファイル名 # hogeを含む行数を表示
grep -i hoge ファイル名 # 大文字と小文字の区別を無視する
tail
ファイルの末尾の部分を表示します。
tail ファイル名 # オプションを指定しない場合デフォルトでは最後の10行を表示する
tail -n n ファイル名 #ファイルの最後の行数n行を表示する
tail -f ファイル名 #ファイルの末尾が更新される度に表示し続ける(logを継続して監視する場合などに使用する)
プロセスに関するコマンド
ps
現在実行されているプロセスを表示します。psコマンドで表示された一番先頭にある数字が、PID(プロセス番号)です。この後出てくるkillコマンドで必要になります。(psコマンドには「-」が付くオプションとそうでないオプションがありますが、「-」が付かないオプションの利用が推奨されているそうです)
ps # 現在実行されているプロセスを表示する
ps ax # システム上で実行されているプロセス全てを表示する
kill
プロセスを終了させます。psコマンドで確認したPID(プロセス番号)を入力します。
killコマンドにはシグナルというものがあります。プロセスはシグナルを受け取ると、受け取ったシグナルに応じた動作で反応します。シグナルには番号が付けられており、例えば強制的に終了させるシグナルは「9」となっています。
kill プロセス番号 # デフォルトではシグナル番号「15」でプロセスを終了させる
kill -9 プロセス番号 # シグナル番号「9」で強制的に終了させる
その他のコマンド
date
現在の時刻を表示します。
date # 現在の日時を秒単位まで表示する
curl
Webで公開されているファイルをダウンロードする時に使用したり、さまざまなプロトコルを利用してデータの転送を行うことができます。
curl -O ファイルのurl # 指定されたurlのファイルをダウンロードして同じ名前のファイルに保存する
crontab
コマンドを定期的に自動で実行する時に使用します。
設定書式は * * * * * コマンド
のように設定します。ここで「 * 」はそれぞれ
分 時 日 月 曜日
に対応し数字で指定します。曜日は0または7が日曜日で、後は1〜6までが順に月曜日から埋まっていきます。月曜日が1で土曜日が6です。
**crontab -e
でcrontab設定ファイルを開き、そこに定期的に実行したいコマンドを記述していきます。crontab -l
**で現在設定されている設定を確認できます。
15 20 * * * /usr/local/bin/backup # 毎日8時15分にバックアップを取る
30 12 * * 3 /usr/local/bin/backup # 毎週水曜日の12時30分にバックアップを取る
おわりに
ここまで紹介したコマンド以外にもまだまだたくさんのコマンドがあり、1つ1つのコマンドに大量のオプションが付いています。いきなり全て覚えて使いこなすことは難しいと思うので、「こんなコマンドがあるんだなあ〜」程度に参考にしていただければ幸いです。
参考にさせていただいた書籍はこちらです。
・[Ubuntuスタートアップバイブル]
(https://www.amazon.co.jp/Ubuntu%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-%E5%B0%8F%E6%9E%97-%E6%BA%96-ebook/dp/B07FS2NRKK/ref=sr_1_1?adgrpid=103870342466&dchild=1&gclid=CjwKCAjwmqKJBhAWEiwAMvGt6Fwe4WnXOqvHlXoSUq2QAKoUETnLuWIjG14FiRvBgAQZZAkVbUfRGhoCnTgQAvD_BwE&hvadid=448604013349&hvdev=c&hvlocphy=1009540&hvnetw=g&hvqmt=e&hvrand=8578222445061772425&hvtargid=kwd-333356161402&hydadcr=27270_11561194&jp-ad-ap=0&keywords=ubuntu%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB&qid=1630129183&sr=8-1)
・[Linux入門の入門]
(https://product.rakuten.co.jp/product/-/e2262e90527eacfc6be75a54b9c4953c/?gclid=CjwKCAjwmqKJBhAWEiwAMvGt6GM2sshHymjiNvTTYuFEciIwUiZPSf37T37B6K2i9sxaJD2Iy0nP8xoCF_AQAvD_BwE&gclsrc=aw.ds&gclsrc=aw.ds&icm_acid=861-767-4285&icm_agid=24053784687&icm_cid=252516927&icm_kw=&icm_mt=&icm_tgid=pla-84798449282&scid=s_kwa_pla_boo_252516927)
・[Linux教科書 LPICレベル1 Version5.0対応]
(https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC%E3%83%AC%E3%83%99%E3%83%AB1-Version5-0%E5%AF%BE%E5%BF%9C-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C/dp/4798160490/ref=asc_df_4798160490/?tag=jpgo-22&linkCode=df0&hvadid=295678107984&hvpos=&hvnetw=g&hvrand=11578099055683212713&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009540&hvtargid=pla-649269108462&psc=1&th=1&psc=1)
ありがとうございました!