Linuxコマンドをいちいち調べるのが面倒なため自分用にメモ
ディレクトリ操作
カレントディレクトリの確認
$ pwd
/home/ubuntu
ディレクトリの確認
- オプション無し
$ ls
bin dev home lib64 mnt proc run srv tmp var
- オプション有り(詳細表示)
$ ls -l
drwxr-xr-x 2 root root 4096 Feb 2 10:29 dir1
drwxr-xr-x 2 root root 4096 Feb 2 10:34 dir2
-rw-r--r-- 1 root root 0 Feb 2 10:29 file1
ls表示内容見方
左から | 説明 |
---|---|
d | ディレクトリ(ファイルの場合は「-」、シンボリックリンクの場合は「l」) |
rwxr | アクセス権 |
2 | ディレクトリはファイル数、ファイルはハードリンク数 |
root | 所有者 |
root | 所有グループ |
4096 | サイズ |
Feb 2 10:29 | 最終更新日時 |
dir1 | ファイル名、フォルダ名 |
- オプション有り(隠しファイル表示)
$ ls -a
. .. ubuntu
- オプション有り(隠しファイル&詳細表示)
$ ls -al
drwxr-xr-x 3 root root 4096 Dec 13 02:14 .
drwxr-xr-x 1 root root 4096 Jan 12 11:18 ..
drwxr-x--- 2 ubuntu ubuntu 4096 Dec 13 02:14 ubuntu
作成
- 指定したディレクトリの作成
$ mkdir dirName
+ dirName
注意
複数階層のディレクトリは作成できない
- 複数階層ディレクトリの作成
$ mkdir -p dirName/dirName2/dirName3
+ dirName
+ dirName/dirName2
+ dirName/dirName2/dirName3
削除
- 空のディレクトリ削除
$ rmdir dirName
- dirName
注意
ディレクトリの中が空で無い場合は削除できない
コピー
コピーコマンドに「-r」オプションを付けてる
$ cp -r fromDirName copyDirName
+ copyDirName
ディレクトリ移動
指定して移動
- 絶対パス
$ cd /home/ubuntu
- 相対パス
$ cd ./home/ubuntu
$ cd home/ubuntu
ホームディレクトリに移動
複数のコマンドで移動が可能
一つ目と二つ目が一般的?
$ cd
$ cd ~
$ cd /home/ユーザー名
一つ前のカレントディレクトリに移動
$ cd -
ファイル操作
作成
$ touch newFile
+ newFile
補足
ファイルが存在する場合はタイムスタンプが更新される
作成(ブレース展開)
- 複数指定して作成
「,」で区切って指定を行う
$ touch newFile{1,3}
+ newFile1
+ newFile3
- 範囲指定して作成
「..」で範囲して行う
$ touch newFile{1..4}
+ newFile1
+ newFile2
+ newFile3
+ newFile4
削除
$ rm delFile
- delFile
注意
ハードリンクが複数ある場合はハードリンクのみ削除される
削除(パス名展開)
$ ls
file1 file2 file3 file4
$ rm file*
- file1
- file2
- file3
- file4
コピー
$ cp コピー対象 コピー後ファイル名(または格納ディレクトリ)
+ copyFileName
$ cp copyFrom.txt copyTo.txt
ファイル名変更
$ mv 対象ファイル名 変更後ファイル名
対象ファイル名 → 変更後ファイル名
格納ディレクトリ移動
$ mv 対象ファイル 移動先ディレクトリ
- 対象ファイル
+ 移動先ディレクトリ/対象ファイル
検索
findコマンド
指定したでディレクトリ配下から、検索条件に当てはまる検索結果が表示される
- オプション
$ find ディレクトリ 検索条件
$ find . -name "*.txt"
./file1.txt
./file2.txt
./file3.txt
$ find . -type d
.
./ubuntu
op名 | 説明 |
---|---|
-name | 検索名をワイルドカードなどで指定 |
-type | ファイル種別の指定 |
- typeコマンドの種別
$ find . -type d -name "user*"
$ find . -type f
$ find . -type l
入力値 | 種別 |
---|---|
d | ディレクトリ |
f | ファイル |
l | シンボリックリンク |
grepコマンド
正規表現を使った検索
$ grep ディレクトリ 正規表現
ハイフン(-)の検索
grep -
でハイフンを含む文字列の検索はできない
ハイフンの検索を行う場合は、grep - -
で実行する
パーミッションの変更
数値
全ての権限をまとめて変更が可能
設定したい権限パターンを数値で指定する
権限パターンは7種類存在しており、
それぞれの権限パターンの数値は以下となる
読み取り(r) | 書き込み(w) | 実行(x) | 権限パターン(cmd) |
---|---|---|---|
○ | - | - | 4 |
- | ○ | - | 2 |
- | - | ○ | 1 |
○ | ○ | - | 6 |
- | ○ | ○ | 3 |
○ | - | ○ | 5 |
○ | ○ | ○ | 7 |
$ chmod 764 change.sh
シンボル
一部の権限の変更が可能
「誰に」、「設定する」、「権限」を指定する
シンボル: 誰に
誰に | cmd |
---|---|
オーナー | u |
グループ | g |
その他のユーザー | o |
全てのユーザー | a |
シンボル: 設定するか
設定するか | cmd |
---|---|
権限追加 | + |
権限削除 | - |
指定した権限に設定する | = |
シンボル: 権限
権限 | cmd |
---|---|
読み取り | r |
書き込み | w |
実行 | x |
例えば、その他のユーザーに実行権限を追加する場合
$ chmod o+x change.sh
特定文字(意味を持つ文字列)を文字列として扱う
linuxコマンドで意味を持つ「\」「?」「!」..などを文字列として扱いたい場合は以下の方法を使う
バックスラッシュ
全ての特殊文字を文字列として扱うことができる
$ echo \~
~
シングルコーテーション
バックスラッシュと同様に全ての特殊文字を文字列として扱うことができる
$ echo '~'
~
ダブルコーテーション
一部の特殊文字のみ文字列として扱うことができr
「!」「$」「`」は文字列として扱われない
$ echo !2
echo ls -l
ls -l
$ echo "!2"
echo ls -l
ls -l
$ echo "\2"
\2
リンク
ハードリンク
ファイルに別名を追加で結びつける
ディレクトリに対してはハードリンクは使用できない
下記のコマンドで作成した「system2.conf」は「system.conf」と同じファイルを参照することになる
$ ln sytem.conf system2.conf
$ ls -l
-rw-r--r-- 2 root root 0 Feb 2 10:29 system.conf
-rw-r--r-- 2 root root 0 Feb 2 10:29 system2.conf
「sytem2.conf」を削除した場合どうなるか??
$ rm sytem2.conf
$ ls -l
-rw-r--r-- 1 root root 0 Feb 2 10:29 system.conf
複数ハードリンクが存在する
ファイルのハードリンクを削除しても実ファイルは削除されない。
この場合、「system2.conf」を削除しても「system.conf」のハードリンクがまだ残っている。
そのため、実ファイルはまだ削除できていない
ただ、「system2.conf」のハードリンクが削除されたことで、「system.conf」のハードリンク数が「2」から「1」に減っている。
そしたら、「system.conf」のハードリンクを削除した場合どうなるか??
$ rm system.conf
$ ls -l
void
「system.conf」に紐づいていた実ファイルは、紐づくハードリンクを完全に失ったため実ファイルも削除された
シンボリックリンク
名前空間に名前空間を結びつけるのがシンボリックリンク
ハードリンクと違いディレクトリにも使用できる
紐づき先が存在しなくても存在できるなど、windowsのショートカットに近い?
ハードリンク作成コマンドに「-s」オプションを付与することでシンボリックリンクの作成ができる
$ ln -s sytem.conf system.conf.link
$ ls -l
-rw-r--r-- 1 root root 0 Feb 2 12:33 system.conf
lrwxrwxrwx 1 root root 11 Feb 2 12:33 system.conf.link -> system.conf
注意
リンク先ファイルやディレクトリは絶対パスでの指定を推奨する。相対パスで指定してしまうとシンボリックリンクが格納されているディレクトリ起点のパスとなってしまうため、想定しないファイルやディレクトリに紐づいてしまう
リダイレクト
cmd | 結果 |
---|---|
< file |
入力を指定したファイルに変更 |
> file |
出力を指定したファイルに変更 |
2> file |
エラーをファイルに出力する |
>> file |
出力をファイルの末尾に追記 |
2>> file |
エラーをファイルの末尾に追記 |
>file 2>&1 |
出力とエラーをファイルの末尾に追記 |
/dev/null
の活用
デバックでエラーのみ確認したい場合、出力先に/dev/null
を指定することでエラーのみ確認することができる
プロセス管理
プロセス一覧
$ ps
PID TTY TIME CMD
9 pts/1 00:00:00 bash
43 pts/1 00:00:00 ps
列名 | 説明 |
---|---|
PID | プロセスID |
TTY | ターミナル識別 デーモンは「?」で表示される |
TIME | CPU使用時間 |
CMD | コマンドファイル |
- 全てのユーザー/デーモンを含める
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 4944 4192 pts/0 Ss+ 05:54 0:00 /bin/bash
root 9 0.0 0.4 4944 4404 pts/1 Ss 05:54 0:00 /bin/bash
root 51 0.0 0.3 5592 3388 pts/1 R+ 06:29 0:00 ps aux
プロセス終了
$ kill プロセスID
[1]+ Terminated prosess001
プロセス強制終了
$ kill -9 プロセスID
[1]+ Killed prosess001
- killコマンドの全てのシグナル
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
コマンドライン操作
カーソルの移動
操作 | cmd | 説明 |
---|---|---|
後方に移動 | ctrl + b |
矢印キー(←)と同じ |
前方に移動 | ctrl + f |
矢印キー(→)と同じ |
行頭に移動 | ctrl + a |
コマンドの一番左に移動 |
行末に移動 | ctrl + e |
コマンドの一番右に移動 |
文字の削除
操作 | cmd | 説明 |
---|---|---|
1単語の削除 | ctrl + w |
単語単位で削除 |
切り取り(カット)とペースト(ヤンク)
操作 | cmd | 説明 |
---|---|---|
カーソルから行末を切り取り | ctrl + k |
- |
カーソルから行頭を切り取り | ctrl + u |
- |
ペースト | ctrl + y |
- |
コマンド履歴の確認
$ history
1 cd hme
2 cd /home
3 l -l
4 pwd
$ !2 ← 履歴からコマンドを実行