Linux基本コマンドとその活用法
重要概念
【重要概念】
- シェル (Shell): ユーザからのコマンド入力を解釈し、OS(カーネル)に命令を伝えるプログラム。Ubuntu 24.04では対話用のログインシェルとして
bashが標準で採用されており、環境変数PATHを利用してコマンドを実行する。 - カレントディレクトリとパス: 現在作業中のディレクトリ(カレントディレクトリ)と、ファイルやディレクトリの所在を示す文字列(パス)。実行ファイルを指定する際の
./や、ホームディレクトリを表す~の理解が重要である。 - リダイレクトとパイプ: コマンドの出力結果をファイルに保存する機能(リダイレクト)、および、あるコマンドの出力を別のコマンドの入力として直接繋ぐ機能(パイプ)。これらを組み合わせることで、複数の処理を連結して実行できる。
- sudoとパッケージ管理 (apt): 一時的に管理者権限でコマンドを実行する仕組み(
sudo)と、ソフトウェアのインストールや更新を一元管理する仕組み(apt)。システム管理の基本となる操作である。
【本資料を読む上での補足】
ユーザが直接操作するウィンドウは「ターミナル(端末エミュレータ)」であり、その中で動作するプログラムが「シェル」、シェルから呼び出されるOSの中核が「カーネル」である。パスには / から始まる絶対パスと、カレントディレクトリを起点とする相対パス(./ や ../)がある。Linuxのコマンドは標準入力(FD=0)、標準出力(FD=1)、標準エラー出力(FD=2)の3本のストリーム(FDはファイル記述子の番号)を持ち、リダイレクト記法(>、2>、2>&1 など)はこの番号体系に基づく。コマンドの使い方は man <コマンド名> または <コマンド名> --help で参照できる。
【安全に関する注意】
rm -rf、chmod -R、chown -R、kill -9、および sudo を伴うコマンドは、誤用するとシステムを破壊する場合がある。実行前に対象パス、オプション、対象プロセスを確認すること。
Linuxとシェル入門
Linuxを操作する上で基本となるシェルと、コマンド実行の仕組みを解説する。シェルとは
シェルは、ユーザが入力したコマンドを解釈し、OS(カーネル)に伝えて実行させるプログラムである。Ubuntu 24.04では、対話用のログインシェルとして bash (Bourne Again SHell) が標準で採用されている(なお、シェルスクリプトを実行する際の /bin/sh は dash にリンクされている)。
環境変数PATHとコマンド検索
シェルは、環境変数 PATH に設定されたディレクトリ群から実行するコマンドを検索する。これにより、ユーザはコマンドの格納場所を指定せずに、コマンド名だけで実行できる。
echo $PATH
export PATH="$HOME/bin:$PATH" # 一時的な追加。永続化するには ~/.bashrc 等に追記
カレントディレクトリと ./ の意味
ユーザが現在作業しているディレクトリをカレントディレクトリと呼ぶ。Linuxでは、セキュリティ上の理由からカレントディレクトリは既定で PATH に含まれない。そのため、カレントディレクトリにあるプログラムファイルを実行する場合は、ファイル名の前に ./ を付けてカレントディレクトリにあることを明示する必要がある。
pwd # カレントディレクトリを表示
cd works # worksディレクトリに移動
./my_program # カレントディレクトリの my_program を実行
which - コマンドのパスを表示
指定したコマンドの実行ファイルが、どのディレクトリに存在するかを表示する。
which ls # lsコマンドのパスを表示 (例: /usr/bin/ls)
which python3 # python3コマンドのパスを表示
基本的なファイル・ディレクトリ操作
ファイルやディレクトリを作成、移動、削除するなど、基本的な操作を行うコマンドを紹介する。
pwd - カレントディレクトリの表示
カレントディレクトリのフルパス(絶対パス)を表示する。
pwd
ls - ファイルとディレクトリの一覧表示
ディレクトリ内のファイルやサブディレクトリを一覧表示する。
ls
ls -l # 詳細情報(パーミッション、所有者、サイズ、更新日時など)を表示
ls -a # ドット(.)で始まる隠しファイル・ディレクトリも表示
ls -la # 隠しファイルを含む詳細表示
ls -lh # 詳細情報を読みやすい単位(KB、MB)で表示
cd - ディレクトリの移動
カレントディレクトリを変更する。
cd /path/to/directory # 指定したディレクトリへ移動
cd .. # 親ディレクトリへ移動
cd ~ # ホームディレクトリへ移動
cd # 引数なしでもホームディレクトリへ移動
cd - # 直前にいたディレクトリへ移動
mkdir - ディレクトリの作成
新しいディレクトリを作成する。
mkdir newdir
mkdir -p dir1/dir2/dir3 # 親ディレクトリが存在しない場合、それらもまとめて作成
rmdir - 空ディレクトリの削除
中身が空のディレクトリのみを削除する。
rmdir mydir
touch - ファイルのタイムスタンプ更新と空ファイルの作成
ファイルの最終アクセス時刻と最終変更時刻を現在時刻に更新する。ファイルが存在しない場合は、空のファイルを作成する。
touch existing_file.txt # タイムスタンプ更新
touch new_file.txt # 空ファイル作成
ファイルの内容表示と基本操作
ファイルの内容確認、コピー、移動、削除といった基本的なファイル操作を行うコマンドを紹介する。
cat - ファイルの内容表示・結合
ファイルの内容を標準出力(通常は画面)に表示する。複数のファイルを指定すると、それらを連結して表示する。
cat file1.txt
cat file1.txt file2.txt
cat file1.txt file2.txt > combined.txt # 連結結果をファイルに保存
less - ファイル内容のページ単位表示
ファイルの内容を1画面ずつ表示する。サイズの大きいファイルの内容確認に用いる。スペースキーで次ページ、b で前ページ、/ で検索、q で終了する。
less large_logfile.log
head - ファイルの先頭部分を表示
ファイルの先頭から指定した行数を表示する。既定は10行である。
head file.txt
head -n 5 file.txt # 先頭5行を表示
tail - ファイルの末尾部分を表示
ファイルの末尾から指定した行数を表示する。既定は10行である。ログファイルの監視に用いる。
tail file.txt
tail -n 20 file.txt # 末尾20行を表示
tail -f log.txt # ファイルへの追記をリアルタイムで表示。Ctrl+Cで終了
cp - ファイルやディレクトリのコピー
ファイルやディレクトリをコピーする。
cp source.txt destination.txt # ファイルをコピー
cp file1.txt file2.txt target_dir/ # 複数のファイルをディレクトリにコピー
cp -r sourcedir/ destdir/ # ディレクトリを中身ごと再帰的にコピー
cp -i source.txt dest.txt # 上書き前に確認を求める
mv - ファイルやディレクトリの移動・名前変更
ファイルやディレクトリを移動する、または名前を変更する。
mv source.txt /path/to/destination/ # ファイルを移動
mv oldname.txt newname.txt # ファイル名を変更
mv dir1/ ../dir2/ # ディレクトリを移動
mv -i source target # 上書き前に確認を求める
rm - ファイルやディレクトリの削除
削除したファイルやディレクトリは原則として元に戻せないため、実行には注意が必要である。
rm file.txt # ファイルを削除
rm file1.txt file2.txt # 複数のファイルを削除
rm -r directory/ # ディレクトリを中身ごと再帰的に削除
rm -i file.txt # 削除前に確認を求める
rm -f file.txt # 確認なしで強制的に削除
シェルの機能(ワイルドカード、リダイレクト、パイプ)
シェルが提供するこれらの機能を活用することで、コマンドの操作を柔軟に行うことができる。
ワイルドカード - ファイル名のパターンマッチング
複数のファイルを一度に指定する場合に用いる特殊な記号である。* は0文字以上の任意の文字列に一致し、? は任意の1文字に一致する。[] は角括弧内の任意の1文字に一致する。
ls *.log
cp chapter?.md docs/
rm report[1-3].txt # report1.txt、report2.txt、report3.txt に一致
標準入出力とリダイレクト - コマンドの入出力先の変更
Linuxのコマンドは通常、標準入力(stdin、FD=0)、標準出力(stdout、FD=1)、標準エラー出力(stderr、FD=2)の3つのストリームを持つ。
リダイレクトは、これらのストリームの入出力先をファイル等に変更する機能である。> file は標準出力を file に上書き保存し、>> file は標準出力を file の末尾に追記する。< file は file の内容を標準入力としてコマンドに渡す。2> file は標準エラー出力を file に保存する。2>&1 は標準エラー出力を標準出力と同じ向き先にリダイレクトする(FD=2 を FD=1 と同じ出力先に向ける、という意味)。
ls -l > file_list.txt # lsの結果を file_list.txt に保存
echo "Log entry" >> system.log # 文字列を system.log の末尾に追記
sort < data.txt # data.txt の内容を sort コマンドの入力とする
make 2> error_log.txt # make 実行時のエラーメッセージを error_log.txt に保存
./my_script.sh > output.log 2>&1 # スクリプトの全出力を output.log に保存
パイプ - コマンドの出力を別のコマンドの入力へ
パイプ(|)は、あるコマンドの標準出力を、別のコマンドの標準入力に直接繋ぐ機能である。複数のコマンドを連携させて処理を行う場合に用いる。
ls -l /etc | less # /etc ディレクトリの詳細一覧を less で表示
ps aux | grep 'httpd' # 全プロセス情報から 'httpd' を含む行を検索
cut -d ' ' -f 1 access.log | sort | uniq -c | sort -nr # アクセスログからIPアドレス毎のアクセス数を集計
テキスト処理
テキストデータの検索、加工、集計を行うコマンドである。ログ解析やデータ整形に用いる。
grep - テキストパターン検索
ファイルや標準入力から、指定したパターン(文字列や正規表現)に一致する行を検索し、表示する。
grep 'error' logfile.txt # logfile.txt から 'error' を含む行を検索
grep -i 'warning' /var/log/syslog # 大文字小文字を区別せずに 'warning' を検索
grep -r 'function setup()' ./src # ./src ディレクトリ以下を再帰的に検索
ps aux | grep 'nginx' # psコマンドの出力から 'nginx' を含む行を検索
grep -v '^#' config.conf # '#' で始まる行を除外して表示
sed - ストリームエディタ
テキストストリームに対して、置換、削除、挿入などの編集を行う。文字列置換に用いる。
sed 's/apple/orange/g' input.txt > output.txt # input.txt 内の 'apple' を 'orange' に全て置換し output.txt へ出力
sed -i 's/http/https/g' config.html # config.html ファイルを直接編集して置換
sed '1,5d' data.txt # data.txt の1行目から5行目を削除して表示
awk - パターン処理言語
テキストデータをフィールド(列)単位で処理するプログラミング言語である。特定の列の抽出、計算、書式設定などに用いる。
ls -l | awk '{print $9, $5}' # ls -l の出力から9番目(ファイル名)と5番目(サイズ)のフィールドを表示
awk -F ':' '{print $1}' /etc/passwd # ':' を区切り文字として /etc/passwd の1番目のフィールド(ユーザ名)を表示
awk '$3 > 1024 {print $0}' data.log # data.log の3番目のフィールドが1024より大きい行全体を表示
sort - 行の並び替え
テキストファイルの行をアルファベット順や数値順に並び替える。
sort names.txt # names.txt の行をアルファベット順にソート
sort -n numbers.txt # numbers.txt の行を数値順にソート
sort -r scores.txt # scores.txt の行を逆順にソート
sort -k 3 -t ',' data.csv # data.csv をカンマ区切りとし、3番目のフィールドでソート
uniq - 重複行の処理
隣接する重複行を検出し、処理する(除去、カウントなど)。隣接行のみを比較するため、通常は事前に sort で並び替えてから用いる。
sort data.txt | uniq # data.txt をソート後、重複行を除去
sort access.log | uniq -c # 重複する行の出現回数をカウント
sort words.txt | uniq -d # 重複している行のみを表示
wc - 行数、単語数、バイト数のカウント
ファイル内の行数、単語数、バイト数をカウントする。
wc report.txt # report.txt の行数、単語数、バイト数を表示
wc -l *.py # 拡張子 .py の全ファイルの行数を表示
ls /bin | wc -l # /bin ディレクトリ内のファイル数をカウント
アーカイブと圧縮
複数のファイルを一つにまとめる操作(アーカイブ)と、ファイルサイズを小さくする操作(圧縮)を行う。バックアップやファイル転送に用いる。
tar - ファイルのアーカイブ
複数のファイルやディレクトリを一つの .tar ファイルにまとめたり、アーカイブファイルから元のファイルやディレクトリを展開したりする。圧縮機能も併せ持つ。
# アーカイブ作成
tar -cvf archive.tar file1.txt dir1/ # file1.txt と dir1/ を archive.tar にまとめる
tar -czvf archive.tar.gz documents/ # documents/ を gzip 形式で圧縮しながらまとめる
tar -cjvf backup.tar.bz2 /data # /data を bzip2 形式で圧縮しながらまとめる
# アーカイブ展開
tar -xvf archive.tar # archive.tar を展開する
tar -xzvf archive.tar.gz # gzip 圧縮された archive.tar.gz を展開
tar -xjvf backup.tar.bz2 -C /tmp/ # bzip2 圧縮された backup.tar.bz2 を /tmp/ ディレクトリに展開
# 内容表示
tar -tvf archive.tar # archive.tar の内容一覧を表示
gzip / gunzip - ファイルの圧縮と解凍
単一のファイルを gzip 形式(.gz)で圧縮・解凍する。既定では元のファイルは削除される。
gzip report.txt # report.txt を圧縮(report.txt.gz が生成され、report.txt は削除される)
gunzip report.txt.gz # report.txt.gz を解凍(report.txt が復元され、report.txt.gz は削除される)
gzip -k data.csv # 元のファイル data.csv を残して圧縮
gunzip -k data.csv.gz # 元のファイル data.csv.gz を残して解凍
zip / unzip - ZIP形式の圧縮と展開
Windows環境でも用いられる .zip 形式の圧縮ファイルを扱う。
zip archive.zip file1.txt dir1/ # file1.txt と dir1/ を archive.zip に圧縮
unzip archive.zip # archive.zip をカレントディレクトリに展開
unzip archive.zip -d /path/to/extract # 指定したディレクトリに展開
プロセス管理
システム上で実行中のプログラム(プロセス)の状態を確認し、制御する。
プロセス状態の確認
ps - プロセス状態のスナップショット表示
コマンド実行時点でのプロセス状態を表示する。
ps aux # 全ユーザの全プロセスを詳細表示
ps -ef # 全プロセスを詳細表示
ps aux | grep 'chrome' # 特定のプロセスを検索
注:ps aux | grep 'パターン' の形式では、grep プロセス自身がヒットすることがある。これを避けるには、プロセス名でPIDを検索する pgrep パターン を用いるか、ps aux | grep '[c]hrome' のように先頭文字を文字クラス [] で括る記法(grep 自身のコマンドライン文字列にはマッチしなくなる)を用いる。
top - プロセス状態のリアルタイム表示
CPU使用率、メモリ使用量などのシステムリソース状況をリアルタイムで更新表示する。q キーで終了する。
htop - 対話的なプロセスビューア
top を拡張したツールであり、カラー表示、マウス操作、プロセスのソート、kill操作を対話的に行える。sudo apt install htop でインストールする。
ジョブ管理
シェルでは、フォアグラウンド(画面に結果を表示しながら実行)とバックグラウンド(画面の前面に出さずに実行)の2つの実行モードがある。ジョブ管理は、これらの実行中プロセスを制御する機能である。
command & でコマンドをバックグラウンドで実行し、jobs でジョブ一覧を表示する。fg %ジョブ番号 でジョブをフォアグラウンドに戻し、bg %ジョブ番号 で一時停止中のジョブをバックグラウンドで再開する。Ctrl+Z でフォアグラウンドのプロセスを一時停止できる。
./long_process.sh & # バックグラウンドで実行
jobs # ジョブ一覧を表示
fg %1 # ジョブ1をフォアグラウンドに戻す
# Ctrl+Z を押してプロセスを一時停止
bg %1 # ジョブ1をバックグラウンドで再開
プロセスの終了
kill - プロセスにシグナルを送信
プロセスID(PID)を指定して、プロセスにシグナル(プロセスへ送られる通知)を送信する。
kill 1234 # プロセスID 1234 に通常の終了要求(SIGTERM)を送る
kill -9 5678 # プロセスID 5678 を強制終了(SIGKILL)
pkill / killall - プロセス名でプロセスを終了
プロセス名を指定して該当するプロセスにシグナルを送る。pkill はパターンマッチング、killall はプロセス名の完全一致で対象を選択する。使用前に ps aux | grep プロセス名 などで対象を確認する。
pkill firefox # 'firefox' という名前を含むプロセスを終了
killall nginx # 'nginx' という名前のプロセスを終了
リモート接続とプロセス継続
SSHでのリモート作業や、長時間かかる処理を実行する際に用いる機能である。
nohup と & - 接続が切れてもプロセスを実行し続ける
SSHセッションからログアウトした後もコマンドを実行し続ける場合に用いる。nohup はハングアップシグナル(SIGHUP、端末切断時に送られるシグナル)を無視させ、& はコマンドをバックグラウンドで実行する。
nohup ./long_script.sh &
# 標準出力が端末に接続されている場合、自動的に ./nohup.out(書き込めなければ $HOME/nohup.out)に追記される
# 標準エラー出力が端末に接続されている場合、標準出力と同じ向き先にリダイレクトされる
# 出力先を明示的に指定する例
nohup ./long_script.sh > run.log 2>&1 &
disown - シェルからジョブを切り離す
既に実行中のジョブをシェルから切り離し、シェルを終了してもジョブが継続するようにする。
./long_process.sh & # バックグラウンドで実行
jobs # ジョブ番号を確認
disown %1 # ジョブ1をシェルから切り離す
at - 指定時刻にコマンドを実行
指定した時刻に一度だけコマンドを実行するように予約する。sudo apt install at でインストールする。
at コマンドを実行すると at> プロンプトが表示され、実行したいコマンドを入力する。最終行で Ctrl+D を押して入力を終了する(Ctrl+D は端末への入力終端を示すキー操作)。
at now + 5 minutes
実行例(最終行で Ctrl+D を押して入力を終了する):
$ at now + 5 minutes
warning: commands will be executed using /bin/sh
at> /path/to/my_script.sh
at>
job 2 at Mon Aug 5 10:30:00 2024
atq # 予約済みのジョブ一覧を表示
atrm ジョブ番号 # ジョブの予約を取り消す
システム管理の基本(ユーザ、権限、パッケージ等)
システムの基本的な管理操作を行うコマンドである。多くの場合、管理者権限が必要となる。
ユーザと権限
su - ユーザの切り替え
他のユーザ(既定はrootユーザ)に切り替える。切り替えたいユーザのパスワードが必要である。
su - # rootユーザに切り替え(rootのパスワード要)
su username # 指定したユーザに切り替え(usernameのパスワード要)
exit # 元のユーザに戻る
sudo - 一時的な管理者権限でのコマンド実行
一般ユーザが、設定ファイル(/etc/sudoers)で許可されたコマンドを一時的に管理者権限で実行する。実行時にはユーザ自身のパスワードを入力する。セキュリティ上、su - でrootに切り替える方法よりも、必要なコマンドだけ sudo で実行する方法が推奨される。
sudo apt update # apt update コマンドを管理者権限で実行
sudo -i # rootユーザとして対話的なシェルを開始
passwd - パスワードの変更
ユーザアカウントのパスワードを変更する。
passwd # 自分のパスワードを変更
sudo passwd username # 指定ユーザのパスワードを変更
chmod - ファイル・ディレクトリの権限変更
ファイルやディレクトリのアクセス権限(読み取り(r)、書き込み(w)、実行(x))を、所有者(u)、グループ(g)、その他(o)に対して変更する。数値表記は所有者・グループ・その他の順に、r=4、w=2、x=1 を足し合わせた値である(例:755 は rwxr-xr-x、644 は rw-r--r--)。
ディレクトリには cd や配下アクセスに実行権 (x) が必要であるため、-R(再帰)で一律 644 を適用してはならない。ファイルとディレクトリで異なる権限を設定したい場合は、大文字 X(既に実行可能なファイルとディレクトリにのみ x を付与する記号)か、ファイル種別で対象を絞れる find を併用する。
chmod 755 script.sh # rwxr-xr-x(所有者:RWX、グループ:R-X、その他:R-X)
chmod u+x script.sh # 所有者に実行権限を追加
# ディレクトリ配下に再帰適用する場合の安全な書き方
chmod -R u=rwX,go=rX data_dir/
# あるいはファイルとディレクトリで分けて適用
find data_dir -type d -exec chmod 755 {} \;
find data_dir -type f -exec chmod 644 {} \;
chown - ファイル・ディレクトリの所有者/グループ変更
ファイルやディレクトリの所有者や所属グループを変更する。通常、管理者権限が必要である。
sudo chown newuser file.txt # file.txt の所有者を newuser に変更
sudo chown user:group report.pdf # report.pdf の所有者を user、グループを group に変更
sudo chown -R www-data:www-data /var/www/html # /var/www/html 以下全ての所有者・グループを www-data に再帰的に変更
システム情報
uname - システム情報の表示
OSの種類、カーネルバージョンなどのシステム情報を表示する。
uname -a # 利用可能な全ての情報を表示
lshw / lsusb / lspci - ハードウェア情報の表示
システムのハードウェア構成に関する情報を表示する。
sudo lshw -short # ハードウェア構成の概要を表示
lsusb # USBデバイスの一覧を表示
lspci # PCIデバイスの一覧を表示
ディスク管理
df - ディスク空き容量の表示
ファイルシステムのマウント状況とディスク空き容量を表示する。
df -h # 読みやすい単位(GB、MB)で表示
du - ディスク使用量の表示
ファイルやディレクトリが使用しているディスク容量を表示する。
du -sh /path/to/dir # 指定したディレクトリの合計サイズを読みやすい単位で表示
du -h --max-depth=1 . # カレントディレクトリの1階層下のディレクトリ毎のサイズを表示
パッケージ管理(Debian/Ubuntu系)
ソフトウェア(パッケージ)のインストール、更新、削除を行う。
apt - 高水準パッケージ管理ツール
Ubuntuで標準的に用いられるパッケージ管理コマンドである。
sudo apt update # 利用可能なパッケージリストを最新の情報に更新
sudo apt upgrade # インストール済みパッケージを新しいバージョンに更新
sudo apt full-upgrade # より大規模な更新。必要ならパッケージの削除や追加も伴う
sudo apt install <package-name> # 指定したパッケージをインストール
sudo apt remove <package-name> # パッケージを削除
sudo apt purge <package-name> # パッケージを設定ファイルごと削除
sudo apt autoremove # 不要なパッケージを削除
apt search <keyword> # キーワードでパッケージを検索
apt show <package-name> # パッケージの詳細情報を表示
dpkg - 低水準パッケージ管理ツール
.deb 形式のパッケージファイル(Debian系のパッケージ形式)を直接操作する場合に用いる。apt とは異なり、依存関係の自動解決は行わないため、依存パッケージが不足している場合は手動でインストールする必要がある。
sudo dpkg -i package.deb # ローカルにある .deb ファイルをインストール
dpkg -l # インストール済みの全パッケージ一覧を表示
dpkg -L <package-name> # 指定したパッケージに含まれるファイル一覧を表示
dpkg -S /path/to/file # 指定したファイルがどのパッケージに属するかを表示
サービス管理(systemd)
多くのLinuxディストリビューションで採用されている systemd システム/サービスマネージャ(システム起動とサービスを管理する仕組み)を制御する。Webサーバやデータベースなどの起動・停止・状態確認に用いる。
systemctl - システム/サービスマネージャ制御
sudo systemctl start nginx # nginxサービスを開始
sudo systemctl stop nginx # nginxサービスを停止
sudo systemctl restart nginx # nginxサービスを再起動
sudo systemctl reload nginx # nginxサービスの設定ファイルを再読み込み
systemctl status nginx # nginxサービスの状態を確認
sudo systemctl enable nginx # システム起動時にnginxサービスが自動起動するように設定
sudo systemctl disable nginx # 自動起動を無効化
journalctl - systemd ジャーナルログ表示
systemdが管理するシステム全体のログを表示する。
journalctl # 全てのジャーナルログを表示
journalctl -u nginx.service # 特定のユニット(nginxサービス)のログを表示
journalctl -f # ログをリアルタイムで表示し続ける
システム終了
shutdown - システムのシャットダウン・再起動
システムをシャットダウンまたは再起動する。
sudo shutdown -h now # 直ちにシャットダウン
sudo shutdown -r now # 直ちに再起動
sudo shutdown -h +10 # 10分後にシャットダウン
sudo shutdown -c # 予約されたシャットダウンをキャンセル
ネットワーク操作
ネットワーク接続の確認、設定表示、データ転送などを行う。Ubuntu 24.04では、ifconfig や netstat に代わる後継コマンドとして ip や ss の使用が推奨される。
前提となる用語として、IPアドレスはネットワーク上のホストを識別する番号、ポートは同一ホスト上でサービスを区別する番号、TCPとUDPはそのポートを用いる代表的な通信プロトコルである。
接続確認
ping - ネットワーク疎通確認
指定したホスト(IPアドレスまたはドメイン名)とのネットワーク接続が確立しているかを確認する。
ping example.com # example.com に ICMP ECHO_REQUEST パケットを送信
ping -c 4 google.com # google.com に4回送信して終了
ネットワーク設定と確認
ip - ネットワーク設定と情報表示
IPアドレス、ルーティング、ネットワークデバイスなどの情報を表示・設定する。
ip addr show # IPアドレス情報を表示(短縮形:ip a)
ip link show # ネットワークデバイス情報を表示(短縮形:ip l)
ip route show # ルーティングテーブルを表示(短縮形:ip r)
ip neigh show # ARPキャッシュテーブルを表示(短縮形:ip n)
ss - ソケット統計情報
ネットワーク接続、リスニングポートなどのソケット情報(通信の終端点に関する情報)を表示する。
ss -tulnp # TCP/UDPの待ち受けポートと、それを使用しているプロセスを表示
ss -tan # 全てのTCP接続を表示
データ転送
curl - URLを使ったデータ転送
HTTP、HTTPS、FTPなどのプロトコルを用いて、URLで指定したリソースとの間でデータを転送する。Web APIの動作確認にも用いる。
curl https://example.com # URLの内容を標準出力へ表示
curl -o output.html https://example.com # 内容を output.html というファイルに保存
curl -O https://example.com/file.zip # URLのファイル名で保存
wget - 非対話的なファイルダウンローダ
HTTP、HTTPS、FTPからファイルをダウンロードする。再帰的なダウンロードや、ダウンロードの中断・再開が可能である。
wget https://example.com/file.zip # file.zip をダウンロード
wget -O newname.zip https://example.com/file.zip # newname.zip という名前で保存
wget -c https://example.com/largefile.iso # ダウンロードを途中から再開
gdown - Google Driveからのファイルダウンロード
Google Driveの共有リンクからファイルをダウンロードするツールである。pip install gdown でインストールする。
# pip install gdown # まずインストールが必要
gdown https://drive.google.com/uc?id=YOUR_FILE_ID
gdown --id YOUR_FILE_ID -O output.zip
リモート接続
ssh - セキュアシェル
暗号化された通信路を通して、リモートのLinux/Unixマシンにログインしたり、コマンドを実行したりする。
ssh username@hostname_or_ip # 指定ユーザでリモートホストにログイン
ssh -p 2222 user@server.example.com # ポート番号を指定してログイン
ssh -i ~/.ssh/my_key user@host # 秘密鍵ファイルを指定してログイン
sftp - セキュアファイル転送プロトコル
SSH接続を利用して、リモートホストとの間で対話的にファイルを転送する。
実行例:
$ sftp username@hostname_or_ip
Connected to hostname_or_ip.
sftp> put localfile.txt remotepath/
sftp> get remotefile.txt localpath/
sftp> ls
sftp> pwd
sftp> cd remotedir
sftp> exit
scp - セキュアコピー
SSH接続を利用して、リモートホストとの間で非対話的にファイルをコピーする。
scp localfile.txt username@hostname:/remote/path/ # ローカルファイルをリモートにコピー
scp -r localdir/ user@host:/remote/parentdir/ # ローカルディレクトリをリモートに再帰的にコピー
scp user@host:/remote/file.txt . # リモートファイルをカレントディレクトリにコピー
バージョン管理システム Git
ソースコードなどの変更履歴を管理するための分散型バージョン管理システムである。開発プロジェクトにおいて、複数人での共同作業や変更履歴の追跡に用いる。
git - 分散バージョン管理システム
基本的なワークフローは、リポジトリ準備、ファイル編集、add(変更をステージングエリアに登録)、commit(変更をローカルリポジトリに記録)、push または pull によるリモートとの同期、という流れである。
追跡対象から除外したいファイル(ビルド成果物、機密情報、巨大データなど)はリポジトリ直下の .gitignore に列挙する。リモートリポジトリへの認証は、SSH鍵または個人アクセストークン(PAT)を用いるのが一般的である。
よく使うコマンドは以下のとおりである。
# 初回のみ:コミットに記録される名前とメールアドレスを設定
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git init # 新規リポジトリをカレントディレクトリに初期化
git clone <repository_url> # リモートリポジトリをローカルに複製
git status # 作業ツリーとステージングエリアの状態を表示
git add <file> # 指定したファイルの変更をステージングエリアに追加
git add . # カレントディレクトリ以下の全ての変更・新規ファイルをステージング
git commit -m "Message" # ステージングされた変更内容をメッセージ付きでローカルリポジトリに記録
git log # コミット履歴を表示
git diff # 作業ツリーとステージングエリアの差分を表示
git branch # ブランチの一覧表示
git branch <new-branch> # 新しいブランチを作成
git checkout <branch-name> # 指定したブランチに切り替え
git checkout -b <new-branch> # 新しいブランチを作成して、すぐにそのブランチに切り替え
git merge <branch-name> # 指定したブランチの変更内容を現在のブランチに統合
git pull <remote> <branch> # リモートリポジトリの指定ブランチから最新の変更を取得し、現在のブランチにマージ
git push <remote> <branch> # ローカルリポジトリのコミットをリモートリポジトリの指定ブランチに送信
git remote -v # 登録されているリモートリポジトリの一覧を表示
git stash # 作業ツリーの未コミットの変更を一時的に退避
git stash pop # 退避した変更内容を復元し、退避リストから削除