動機
昔インターン先でLinuxの環境構築で苦労して恥ずかしい思いをしたので、入社前に改めて整理した方がいいのかなと思いました。
対象
・IT(ほぼ)初心者
cd
ディレクトリの移動
例
# "test"ディレクトリへ移動
cd test
# ホームディレクトリへの移動
cd ~
# ルートディレクトリへの移動
cd /
補足
| 用語 | 記号 | 説明 |
|---|---|---|
| ディレクトリ | ファイルの格納・保存を行う(Windows系ではフォルダ) | |
| カレントディレクトリ | . | 現在のディレクトリ |
| ホームディレクトリ | ~ | ユーザーがログインした時に最初に開くディレクトリ |
| ルートディレクトリ | / | 一番上の階層のディレクトリ |
ls
ディレクトリ中のファイル・ディレクトリを確認
例
# "test"ディレクトリ内のファイルを表示
ls
test.py
# "test"ディレクトリ内の隠しファイルを含めたファイルとその詳細を表示
ls -la
total 8
drwxr-xr-x@ 3 User staff 96 12 2 16:18 . # カレントディレクトリ
drwxr-x---+ 30 User staff 960 1 31 13:19 .. # 1つ上の階層
-rw-r--r--@ 1 User staff 20 12 2 16:19 test.py
オプション
| 説明 | |
|---|---|
| -a | 隠しファイルを含む全てのファイル(ディレクトリ)を表示 |
| -A | 隠しファイルを含む全てのファイル(ディレクトリ)のファイル名のみを表示 |
| -l | ファイルの種類や所有者・所有グループなどのファイル(ディレクトリ)の詳細を表示 |
| -i | inode番号を表示 |
cat
ファイルの内容を表示
例
# "test.py"の内容を行番号をつけて表示
cat -sn test.py
1 print("hello world")
2
3 for i in range(5):
4 print(i)
5
オプション
| 説明 | |
|---|---|
| -s | 連続したスペースやタブを1行にして表示する |
| -n | 行番号をつけて表示する |
| -A | 非表示文字も含めてすべて表示する |
wc
ファイル内の文字数・ファイルサイズを出力
例
wc test.py
5 7 54 test.py
# (行数)・(単語数)・(文字数)の順
オプション
| 説明 | |
|---|---|
| -c | バイト数を表示 |
| -m | 文字数を表示 |
| -l | 改行数を表示 |
| -w | 単語数を表示 |
| -L | 最長の行を表示 |
rm
ファイル(ディレクトリ)を削除
例
ls
test.py sample
# sampleディレクトリを削除
rm -r sample
ls
test.py
オプション
| 説明 | |
|---|---|
| -r | 指定したディレクトリを削除(= rmdirコマンド) |
| -v | 実行内容の経過を表示 |
| -f | 確認メッセージを出さずにファイルを削除 |
| -i | 削除の実行前に確認メッセージを表示 |
mv
ファイル(ディレクトリ)の移動・名称変更
mv [-オプション] [移動させたいファイル] [移動先のディレクトリ]
→ 「移動させたいファイル(ディレクトリ)」が先!
例1 ファイルの名称変更
ls
test.py sample
mv test.py sample.py
ls
sample.py sample
例2 ファイルの移動
ls
test.py sample
# "test.py"をsampleディレクトリ直下に移動
mv test.py sample/.
ls
sample
オプション
| 説明 | |
|---|---|
| -f | 移動先に同名のファイルがある場合でも、強制的に移動(上書き) |
| -i | 移動先に同名のファイルがある場合、確認メッセージを表示 |
| -b | 移動により上書き(削除)されるファイルのバックアップを作成 |
| -n | 移動先に同名のディレクトリ(またはファイル)がある場合、処理を実行しない |
| -v | 移動処理を行う際の詳細情報を表示 |
cp
ファイルのコピー
cp [オプション] [コピー元のファイル(ディレクトリ)名] [コピー先のファイル(ディレクトリ)名]
例1 ファイルのコピー
ls
test.py
cp test.py test_cp.py
ls
sample.py test_cp.py
例2 ディレクトリ内容のコピー
# testディレクトリのファイルを再帰的にsampleディレクトリにコピー
cp -r test sample
オプション
| 説明 | |
|---|---|
| -i | コピーによって上書きされるファイルがある場合、確認メッセージを表示 |
| -v | コピーの実行内容を表示 |
| -n | コピー先に既に同名のファイルが存在する場合、処理を中断 |
| -f | コピー先に同名のファイルが存在していても、強制的にコピー(上書き) |
| -b | コピー(上書き)時にバックアップファイルを作成 |
| -r | ディレクトリ内を再帰的にコピー |
| -p | 所有者・属性・更新日時など元ファイルの情報を保持 |
touch
空のファイル作成
例
ls
test.py
# sample.txtを新たに作成
touch sample.txt
# 新たにpiyo.txtが作成されたことを確認します。
ls
hoge.txt piyo.txt
scp
リモートマシンーローカルマシン、もしくはリモートマシン同士でファイルの伝送を行う
# scp [-オプション] [コピー元のパス] [保存先のパス]
例 ローカルPCからAWSのEC2にファイルを転送する場合
#XXX.pemはSSH通信のための鍵
scp -i XXX.pem ./test/exam.txt ec2-user@<グローバルIPアドレス>:~/aws/sample
オプション
| 説明 | |
|---|---|
| -i 鍵 | ssh接続に使用する鍵ファイルを指定 |
| -P ポート番号 | 接続に使用するポート番号を指定 |
| -p | コピー元のタイムスタンプやパーミッションを保持 |
| -r | ディレクトリごと再帰的にコピー |
注意
2020年頃より、古くなったscpコマンドは非推奨となっており、代わりに"sftp", "rsync"コマンドが推奨されているようです。
grep
★特定パターン・文字列の検索を行う
grep [オプション] 検索パターン ファイル名* # ファイル名* は複数指定できる
コマンド | grep [オプション] 検索パターン
例
# 前提(ls > XXX.py)
cat test1.txt test2.txt Test3.txt
# test1.txt
hello.c
hello.txt
test1.txt
# test2.txt
hello.c
hello.txt
test1.txt
test2.txt
# Test3.txt
hello.c
hello.txt
test1.txt
test2.txt
Test3.txt
# "Test"を含むファイルをディレクトリ内から再帰的に検索(行番号をつけて出力)
grep -nr "Test" ./
1: Test3txt
...
# "test1"に一致するする行があるファイル名のみ表示(一致内容は非表示)
grep -l "test1" test1.txt test2.txt
test1.txt
test2.txt
# 正規表現を用いた検索
grep -E [a-z]* test1.txt Test3.txt
# 行末がtestの場合を検索
grep -E "test$" Test3.txt
# 「~test」で終わる行はないため、何も表示されない
オプション
| 説明 | |
|---|---|
| -i | 大文字と小文字を区別しない |
| -v | パターンに一致しない行を表示する |
| -n | 一致した行の行番号を表示する |
| -r/R | ディレクトリ内を再帰的に検索する |
| -l | 一致する行があるファイル名のみを表示 |
| -c | 一致する行の件数(カウント)を表示 |
| -E | 拡張正規表現を使用する |
| -F | 正規表現ではなく固定文字列として検索 |
| -o | 一致した箇所のみを表示する |
| -x | 行全体がパターンと一致するものを検索 |
正規表現
| 説明 | |
|---|---|
| . | 任意の1文字 |
| * | 特定パターンが0回以上繰り返す |
| ^ | 行の先頭 |
| $ | 行の末尾 |
| [ ] | 括弧内の任意の1文字が存在する |
| ( ) | 特定パターンのグループ化(拡張正規表現) |
| + | 特定パターンが1回以上繰り返す(拡張正規表現) |
| ? | 特定パターンが0回または1回だけ存在(拡張正規表現) |
| {n} | 特定パターンがn回繰り返す(拡張正規表現) |
| l | 2パターンのうちどちらか片方(拡張正規表現) |
*圧縮ファイルに対しては、"zgrep"を用いる(使い方はgrepと同じ)
ps
実行中のプロセスを表示するコマンド
例
ps
PID USER TIME COMMAND
1 root 0:01 {init} /bin/sh /sbin/init
2 root 0:00 [kthreadd]
...
リダイレクト
出力結果を任意のファイルに転記
例 hello.txtの記述をoutput.txtに転記
cat hello txt > output.txt
cat output.txt
hello
">"では上書き、">>"では追記となる
パイプライン
コマンドの出力を別のコマンドの入力とする(=コマンド間の橋渡し)
例1 出力を別コマンドの入力とする場合
# psの出力結果の中で、grepで"nginx"に関するファイルを検索
ps aux | grep nginx
root 1037 0.0 0.1 141124 1488 ? Ss 2021 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 1041 0.0 0.2 143944 2808 ? S 2021 0:11 nginx: worker process
prostudy 5347 0.0 0.1 15888 1076 pts/3 S+ 21:06 0:00 grep --color=auto nginx
例2 出力を別コマンドの引数とする場合
パイプ「|」と一緒に"xargs"コマンドがよく利用される
cat sample.txt
A
B
# catの結果をxargsに引数として渡し、それぞれの名前の新しいファイルを作成
cat sample.txt | xargs touch
ls
sample.txt A B
# Aから始まるファイルをすべて削除
find A* | xargs rm
ls
sample.txt B
例3 出力結果を標準出力・ファイルに送る場合
tee: パイプライン途中の出力を、標準出力に出力すると同時に後続ファイルの入力とする。
# ファイル一覧を表示し、その結果をsample.txtに保存しつつ、画面にも表示する
ls | tee sample.txt
番外編
1. sudoコマンド
root権限(管理者権限)を行使するための特別なコマンド
1-1. sudoコマンドの例
# パッケージの更新
sudo apt update
# パッケージvimのインストール
sudo apt install vim
# コマンドを実行するユーザーを指定します。
sudo -u ユーザー名 コマンド
# usrというユーザーでコマンドを実行します。
sudo -u usr cat /etc/passwd
* sudoコマンドの実行時にパスワードの入力が要求されることがある。仕様上、入力してもパスワードは表示されないため注意。
1-2. オプション
| 説明 | |
|---|---|
| -n | パスワードを要求するプロンプトを表示しない(パスワードが必要なコマンドはエラーとなり、実行を終了) |
| -S | 端末を使わず、プロンプトを標準エラーに書き出し、パスワードを標準出力から読み込む(パスワードの末尾には改行が必要) |
| -b | 指定したコマンドをバックグラウンドで実行 |
| -l | 起動ユーザーに対し許可(および禁止)されたコマンドの一覧を表示する |
| -u | userを設定(user名またはuser ID)して、コマンドを実行 |
| -g | groupを設定(group名またはgroup ID)して、コマンドを実行 |
| -k | 保存されている認証情報を無効にする(次回のsudo実行時にはパスワードが必要) |
| -K | 保存されている認証情報を完全に消去 |
| -v | 保存されている認証情報を更新 |
1-3. /etc/sudoers
sudoコマンドの設定ファイル
例
# 「誰が どこで = (誰として) どんなことを」 の書式
root ALL = (ALL) ALL
上記の場合では、「rootユーザーは、rootユーザーでどこでもどんなことでもできる」ということを表す。
/etc/sudoersを編集するには、rootユーザーとして"sudo visudo"コマンドを使用する。
2. 環境変数PATH
トラブった時に何かと環境変数が原因の場合が多いので、ここで簡単にまとめます。
2-1. PATHとは
シェル(コマンドとOSを繋ぐプログラム)が実行ファイルの場所を探すための手がかり。
PATHが通っていないと、実行ファイルの場所がわからず「command not found」のようなエラーが発生します。
2-2. 設定されているPATHの確認
echo $PATH
/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin
2-3. PATHの設定
# 書き方
export PATH=$PATH:(追加したいパス)
# 例:/usr/local/sbinにPATHを通す
export PATH=$PATH:/usr/local/sbin
3. Windows・Linuxコマンドの対応表
| 操作 | Linux | Windows |
|---|---|---|
| ファイル一覧表示 | ls -al | dir |
| ディレクトリ移動 | cd | cd |
| 現在地表示 | pwd | cd (引数なし) |
| ディレクトリ作成 | mkdir | mkdir / md |
| ファイルコピー | cp | copy |
| ファイル移動/名前変更 | mv | move / ren |
| ファイル削除 | rm | del |
| ディレクトリ削除 | rm -r | rmdir /s /q |
| テキスト表示 | cat | type |
| ファイル検索 | grep | find / findstr |
| プロセス表示 | top / ps | tasklist |
| プロセス終了 | kill | taskkill |
まとめ
備忘録的にLinuxコマンド(+α)を簡単にまとめてみました。
何かのお役に立てれば幸いです。