LPICの勉強で学んだGNUとUnixのコマンド全部書く

LPIC（Linux技術者認定試験）の101試験（Ver4.0）の勉強をしていたときに学んだGNUとUnixのコマンドをまとめてみました。ただコマンドを羅列するのではなく、その説明や使用例を交えて書きました。これからLPICを受験しようと思っている方やLinux初心者の方の参考になれば幸いです。私自身もLinux初心者なので、コマンドの書き方や説明が誤っていたり、もっとこうした方がわかりやすい！なんてのがあれば教えていただけると嬉しいです。

- 使用環境：Raspbian GNU/Linux 8.0 (jessie)

# echo
```bash
# 指定した文字列を表示する
$ echo hoge
hoge

# 指定した変数の値を表示する
$ echo $HOME
/home/pi
```

# env, printenv, set
```bash
# 環境変数を一覧表示する
$ env

# 環境変数を一覧表示する
$ printenv

# 環境変数とシェル変数を表示する
$ set
```

# unset
```bash
$ hoge=HOGE
$ echo $hoge
HOGE

# 変数を削除する
$ unset hoge 
# 何も表示されない
$ echo $hoge

```

# export
```bash
# 環境変数を定義する
$ export HOGE=hoge

$ echo $HOGE
hoge
```

# pwd
```bash
# カレントディレクトリの絶対パスを表示する
$ pwd
/home/pi
```

# man
```bash
# コマンドのマニュアルを表示する
$ man ssh

SSH(1)                             BSD General Commands Manual                             SSH(1)

NAME
     ssh — OpenSSH SSH client (remote login program)

SYNOPSIS
     ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
         [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
         [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd]
         [-o option] [-p port] [-Q cipher | cipher-auth | mac | kex | key]
         [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
         [-w local_tun[:remote_tun]] [user@]hostname [command]

DESCRIPTION
     ssh (SSH client) is a program for logging into a remote machine and for executing commands
     on a remote machine.  It is intended to replace rlogin and rsh, and provide secure encrypted
     communications between two untrusted hosts over an insecure network.  X11 connections, arbi‐
     trary TCP ports and UNIX-domain sockets can also be forwarded over the secure channel.

     ssh connects and logs into the specified hostname (with optional user name).  The user must
     prove his/her identity to the remote machine using one of several methods depending on the
     protocol version used (see below).

 Manual page ssh(1) line 1 (press h for help or q to quit)

# すべてのセクションのマニュアルを表示する
$ man -a ssh

# 指定されたキーワード（完全一致）を含むドキュメントを表示する
$ man -f ssh
ssh (1)              - OpenSSH SSH client (remote login program)

# 指定されたキーワード（部分一致）を含むドキュメントを表示する
$ man -k ssh
authorized_keys (5)  - OpenSSH SSH daemon
git-shell (1)        - Restricted login shell for Git-only SSH access
pam_chksshpwd (8)    - Checks to see if SSH is available using the default password
rlogin (1)           - OpenSSH SSH client (remote login program)
rsh (1)              - OpenSSH SSH client (remote login program)
slogin (1)           - OpenSSH SSH client (remote login program)
ssh (1)              - OpenSSH SSH client (remote login program)
ssh-add (1)          - adds private key identities to the authentication agent
ssh-agent (1)        - authentication agent
ssh-argv0 (1)        - replaces the old ssh command-name as hostname handling
ssh-copy-id (1)      - use locally available keys to authorise logins on a remote machine
ssh-keygen (1)       - authentication key generation, management and conversion
ssh-keyscan (1)      - gather ssh public keys
ssh-keysign (8)      - ssh helper program for host-based authentication
ssh-pkcs11-helper (8) - ssh-agent helper program for PKCS#11 support
ssh_config (5)       - OpenSSH SSH client configuration files
sshd (8)             - OpenSSH SSH daemon
sshd_config (5)      - OpenSSH SSH daemon configuration file


# マニュアルの置かれているディレクトリを表示する
$ man -w ssh
/usr/share/man/man1/ssh.1.gz
```

# uname
```bash
# OSの種類を表示する
$ uname
Linux

# システムのアーキテクチャやOSを表示する
$ uname -a
Linux raspberrypi3 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
```

# history
```bash
# コマンドの実行履歴を表示する
$ history
 1983  echo $DATE
 1984  echo hoge
 1985  set
 1986  env
 1987  echo $HOME
 1988  echo $PATH
 1989  env
 1990  man export

# 履歴番号を指定してコマンドを実行する
$ !1984
echo hoge
hoge

# コマンド履歴が書き込まれるファイル
$ ~/.bash_history
```

# cat
```bash
# ファイルの内容を表示する
$ cat hoge.txt
hoge
hoge
hoge

# 行番号を付けて（空行含む）ファイルの内容を表示する
$ cat -n file1
     1	file1
     2	
     3	file1

# 行番号を付けて（空行含まない）ファイルの内容を表示する
$ cat -b file1 
     1	file1

     2	file1

# ファイルを連結して1つのファイルにまとめる
$ cat file1 file2 > newfile
```

# cut
```bash
$ cat file
hoge1:hoge2:hoge3
foo1:foo2:foo3
bar1:bar2:bar3

# 各行の3文字目を取り出す
$ cut -c 3 file
g
o
r

# 各行の1〜3文字目を取り出す
$ cut -c 1-3 file
hog
foo
bar

# 各行の区切り文字（-d）とフィールド（-f）を指定して取り出す
$ cut -d: -f 3 file
hoge3
foo3
bar3
```

# expand
```bash
$ cat hoge.txt
	hoge	hoge	hoge
	hoge	hoge	hoge
	hoge	hoge	hoge

# テキストファイル内のタブをスペースに変換する
$ expand hoge.txt
        hoge    hoge    hoge
        hoge    hoge    hoge
        hoge    hoge    hoge

# テキストファイル内のタブをスペースに変換する（行頭のタブのみ）
$ expand -i hoge.txt
        hoge	hoge	hoge
        hoge	hoge	hoge
        hoge	hoge	hoge

# テキストファイル内のタブをスペースに変換する（タブ幅を設定する、デフォルト8桁）
$ expand -t 4 hoge.txt 
    hoge    hoge    hoge
    hoge    hoge    hoge
    hoge    hoge    hoge
```


# fmt
```bash
$ cat hoge.txt
hoge is hoge.

# テキストを指定した桁に整形する
$ fmt -w 1 hoge.txt
hoge
is
hoge.
```

# head
```bash
# ファイルの先頭部分を表示する
$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

# ファイルの先頭部分を表示する（行数指定）
$ head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

# ファイルの先頭部分を表示する（行数指定）
$ head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

# ファイルの先頭部分を表示する（バイト数指定）
$ head -c 10 /etc/passwd
root:x:0:0 
```

# join
```bash

$ cat hoge1.txt
01 aaa
02 bbb
03 ccc

$ cat hoge2.txt
01 AAA
02 BBB
03 CCC

# 2つのファイルを読み込んで、共通のフィールド（-j）を持つ行を連結する
$ join -j 1 hoge1.txt hoge2.txt
01 aaa AAA
02 bbb BBB
03 ccc CCC
```

# less
```bash
# テキストを1画面ずつ表示する
# k, ↑ 上方向に1行スクロール
# j, ↓ 下方向に1行スクロール
# スペースキー, f 下方向に1画面スクロール
# b 上方向に1画面スクロール
# q 終了
# /検索文字列 下方向に文字列検索
# ?検索文字列 上方向に文字列検索
# h ヘルプを表示する

$ less /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
pi:x:1000:1000:,,,:/home/pi:/bin/bash
```

# nl
```bash
# ファイルに行番号を付けて表示する
$ nl hoge.txt 
     1	hoge
       
     2	hoge

# ファイルに行番号を付けて表示する（空行含む）
$ nl -b a hoge.txt 
     1	hoge
     2	
     3	hoge

# ファイルに行番号を付けて表示する（空行含まない）
$ nl -b t hoge.txt 
     1	hoge
       
     2	hoge
```

# od
```bash
# バイナリファイルの内容を8進数で表示する
# od -t o /etc/localtimeと同じ意味
$ od /etc/localtime
0000000 055124 063151 000062 000000 000000 000000 000000 000000
0000020 000000 000000 000000 001400 000000 001400 000000 000000
0000040 000000 004000 000000 001400 000000 004000 037327 110036
0000060 166327 100026 174730 110026 145731 100370 003733 010035
0000100 125733 100332 163334 010377 105735 100274 001001 001001
0000120 001001 001001 000000 110176 000000 000000 120214 002001
0000140 000000 110176 000000 051512 000124 042112 000124 000001
0000160 000400 000000 055124 063151 000062 000000 000000 000000
0000200 000000 000000 000000 000000 000000 002000 000000 002000
0000220 000000 000000 000000 004400 000000 002000 000000 006000
0000240 177777 177777 141145 070244 177777 177777 037327 110036
0000260 177777 177777 166327 100026 177777 177777 174730 110026
0000300 177777 177777 145731 100370 177777 177777 003733 010035
0000320 177777 177777 125733 100332 177777 177777 163334 010377
0000340 177777 177777 105735 100274 000403 000402 000402 000402
0000360 000002 101400 000003 000000 106000 000640 000004 077000
0000400 000220 000010 077000 000220 046010 052115 045000 052104
0000420 045000 052123 000000 000000 000001 000000 005001 051512
0000440 026524 005071
0000444

# バイナリファイルの内容を16進数で表示する
$ od -t x /etc/localtime 
0000000 66695a54 00000032 00000000 00000000
0000020 00000000 03000000 03000000 00000000
0000040 08000000 03000000 08000000 901e3ed7
0000060 8016ecd7 9016f9d8 80f8cbd9 101d07db
0000100 80daabdb 10ffe6dc 80bc8bdd 02010201
0000120 02010201 907e0000 00000000 0401a08c
0000140 907e0000 534a0000 444a0054 00010054
0000160 00000100 66695a54 00000032 00000000
0000200 00000000 00000000 04000000 04000000
0000220 00000000 09000000 04000000 0c000000
0000240 ffffffff 70a4c265 ffffffff 901e3ed7
0000260 ffffffff 8016ecd7 ffffffff 9016f9d8
0000300 ffffffff 80f8cbd9 ffffffff 101d07db
0000320 ffffffff 80daabdb ffffffff 10ffe6dc
0000340 ffffffff 80bc8bdd 01020103 01020102
0000360 83000002 00000003 01a08c00 7e000004
0000400 00080090 00907e00 544d4c08 54444a00
0000420 54534a00 00000000 00000001 534a0a01
0000440 0a392d54
0000444

# バイナリファイルの内容をASCII文字で表示する
$ od -t c /etc/localtime 
0000000   T   Z   i   f   2  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0  \0  \0  \0 003  \0  \0  \0 003  \0  \0  \0  \0
0000040  \0  \0  \0  \b  \0  \0  \0 003  \0  \0  \0  \b 327   > 036 220
0000060 327 354 026 200 330 371 026 220 331 313 370 200 333  \a 035 020
0000100 333 253 332 200 334 346 377 020 335 213 274 200 001 002 001 002
0000120 001 002 001 002  \0  \0   ~ 220  \0  \0  \0  \0 214 240 001 004
0000140  \0  \0   ~ 220  \0  \0   J   S   T  \0   J   D   T  \0 001  \0
0000160  \0 001  \0  \0   T   Z   i   f   2  \0  \0  \0  \0  \0  \0  \0
0000200  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0 004  \0  \0  \0 004
0000220  \0  \0  \0  \0  \0  \0  \0  \t  \0  \0  \0 004  \0  \0  \0  \f
0000240 377 377 377 377   e 302 244   p 377 377 377 377 327   > 036 220
0000260 377 377 377 377 327 354 026 200 377 377 377 377 330 371 026 220
0000300 377 377 377 377 331 313 370 200 377 377 377 377 333  \a 035 020
0000320 377 377 377 377 333 253 332 200 377 377 377 377 334 346 377 020
0000340 377 377 377 377 335 213 274 200 003 001 002 001 002 001 002 001
0000360 002  \0  \0 203 003  \0  \0  \0  \0 214 240 001 004  \0  \0   ~
0000400 220  \0  \b  \0  \0   ~ 220  \0  \b   L   M   T  \0   J   D   T
0000420  \0   J   S   T  \0  \0  \0  \0 001  \0  \0  \0 001  \n   J   S
0000440   T   -   9  \n
0000444
```

# paste
```bash
$ cat hoge1.txt
aaa
bbb

$ cat hoge2.txt
AAA
BBB

# ファイルを水平方向に連結する
# -d 区切り文字 区切り文字を指定する
$ paste -d, hoge1.txt hoge2.txt
aaa,AAA
bbb,BBB
```

# pr
```bash
# 印刷用にファイルを成型する
# -l ページ長 ヘッダとフッタを含めたページの長さを行数で指定する（デフォルト66行）
# +開始ページ[:終了ページ] 開始ページや終了ページを指定する
$ pr -l 30  +1:2 /etc/passwd

2017-08-20 12:45                  /etc/passwd                   1 ページ


root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false







2017-08-20 12:45                  /etc/passwd                   2 ページ


systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
pi:x:1000:1000:,,,:/home/pi:/bin/bash
messagebus:x:104:109::/var/run/dbus:/bin/false
avahi:x:105:110:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
ntp:x:106:111::/home/ntp:/bin/false
sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin
statd:x:108:65534::/var/lib/nfs:/bin/false
lightdm:x:109:114:Light Display Manager:/var/lib/lightdm:/bin/false
pulse:x:110:116:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:111:118:RealtimeKit,,,:/proc:/bin/false
colord:x:112:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/bin/false
saned:x:114:121::/var/lib/saned:/bin/false
```

# sed
```bash
$ cat hoge1.txt 
hoge11 hoge12 hoge13
hoge21 hoge22 hoge23
hoge31 hoge32 hoge33

# hoge1.txtの1行目から2行目を削除して、hoge2.txtに保存する
$ sed '1,2d' hoge1.txt > hoge2.txt
$ cat hoge2.txt 
hoge31 hoge32 hoge33

# hoge1.txt内のhogeをHOGEに置換して表示する（行の最初にマッチした部分のみ置換）
$ sed s/hoge/HOGE/ hoge1.txt
HOGE11 hoge12 hoge13
HOGE21 hoge22 hoge23
HOGE31 hoge32 hoge33

# hoge1.txt内のhogeをHOGEに置換して表示する（全置換）
$ sed s/hoge/HOGE/g hoge1.txt
HOGE11 HOGE12 HOGE13
HOGE21 HOGE22 HOGE23
HOGE31 HOGE32 HOGE33

$ cat hoge.txt
aAbBcC
# hoge.txt内のAを1に、Bを2に、Cを3に置換して表示する
$ sed y/ABC/123/ hoge.txt
a1b2c3
```

# sort
```bash
$ cat hoge.txt
10
3
5
1

# 行単位でファイルの内容を並び替えする
# デフォルトでは、昇順、文字列で並び替えする
$ sort hoge.txt
1
10
3
5

# 行単位でファイルの内容を並び替えする（降順）
$ sort -r hoge.txt
5
3
10
1

# 行単位でファイルの内容を並び替えする（数値）
$ sort -n hoge.txt
1
3
5
10
```

# split
```bash
$ cat hoge.txt 
1
2
3

# 指定行数ごとにファイルを分割する
# -行数 入力ファイルを指定された行ごとに分割する
$ split -1 hoge.txt hoge.
$ ls
hoge.aa  hoge.ab  hoge.ac
```

# tail
```bash
# ファイルの末尾部分を表示する
$ tail /etc/passwd
avahi:x:105:110:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
ntp:x:106:111::/home/ntp:/bin/false
sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin
statd:x:108:65534::/var/lib/nfs:/bin/false
lightdm:x:109:114:Light Display Manager:/var/lib/lightdm:/bin/false
pulse:x:110:116:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:111:118:RealtimeKit,,,:/proc:/bin/false
colord:x:112:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/bin/false
saned:x:114:121::/var/lib/saned:/bin/false

# ファイルの末尾部分を表示する（行数指定）
$ tail -n 3 /etc/passwd
colord:x:112:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/bin/false
saned:x:114:121::/var/lib/saned:/bin/false

# ファイルの末尾部分を表示する（行数指定）
$ tail -3 /etc/passwd
colord:x:112:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/bin/false
saned:x:114:121::/var/lib/saned:/bin/false

# ファイルの末尾部分を表示する（バイト数指定）
$ tail -c 10 /etc/passwd
bin/false

# ファイルの末尾に追加された行を表示し続ける
$ tail -f /etc/passwd
avahi:x:105:110:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
ntp:x:106:111::/home/ntp:/bin/false
sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin
statd:x:108:65534::/var/lib/nfs:/bin/false
lightdm:x:109:114:Light Display Manager:/var/lib/lightdm:/bin/false
pulse:x:110:116:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:111:118:RealtimeKit,,,:/proc:/bin/false
colord:x:112:120:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:113:65534:dnsmasq,,,:/var/lib/misc:/bin/false
saned:x:114:121::/var/lib/saned:/bin/false
```

# tr
```bash
$ cat /etc/hosts
127.0.0.1	localhost
::1		localhost ip6-localhost ip6-loopback
ff02::1		ip6-allnodes
ff02::2		ip6-allrouters

127.0.1.1	raspberrypi3

# 標準入力から読み込まれたファイル内の文字列を変換する
$ cat /etc/hosts | tr 'a-z' 'A-Z'
127.0.0.1	LOCALHOST
::1		LOCALHOST IP6-LOCALHOST IP6-LOOPBACK
FF02::1		IP6-ALLNODES
FF02::2		IP6-ALLROUTERS

127.0.1.1	RASPBERRYPI3

# 標準入力から読み込まれたファイル内の文字列を変換する（クラス指定）
# [:alpha:] 英字
# [:lower:] 英小文字
# [:upper:] 英大文字
# [:digit:] 数字
# [:alnum:] 英数字
# [:space:] スペース
$ cat /etc/hosts | tr [:lower:] [:upper:]
127.0.0.1	LOCALHOST
::1		LOCALHOST IP6-LOCALHOST IP6-LOOPBACK
FF02::1		IP6-ALLNODES
FF02::2		IP6-ALLROUTERS

127.0.1.1	RASPBERRYPI3

# ファイル内の「:」を削除して表示する
$ tr -d : < /etc/hosts
127.0.0.1	localhost
1		localhost ip6-localhost ip6-loopback
ff021		ip6-allnodes
ff022		ip6-allrouters

127.0.1.1	raspberrypi3
```

# unexpand
```bash
$ cat hoge.txt 
        hoge        hoge        hoge
        hoge        hoge        hoge
        hoge        hoge        hoge

# 行頭にある連続した空白（デフォルト8桁）をタブに変換する
$ unexpand hoge.txt
	hoge        hoge        hoge
	hoge        hoge        hoge
	hoge        hoge        hoge

# 行頭以外の空白もタブに変換する
$ unexpand -a hoge.txt 
	hoge	    hoge	hoge
	hoge	    hoge	hoge
	hoge	    hoge	hoge

# タブ幅を指定して空白をタブに変換する
$ unexpand -a -t 8 hoge.txt
	hoge	    hoge	hoge
	hoge	    hoge	hoge
	hoge	    hoge	hoge
```

#uniq
```bash
$ cat hoge.txt
aaa
bbb
bbb
ccc

# 重複行を1行にまとめて表示する
$ uniq hoge.txt
aaa
bbb
ccc

# 重複している行のみを表示する
$ uniq -d hoge.txt
bbb

# 重複していない行のみを表示する
$ uniq -u hoge.txt
aaa
ccc
```

# wc
```bash
# ファイルの行数、単語数、文字数を表示する
$ wc /etc/passwd
  34   54 1838 /etc/passwd

# ファイルの行数を表示する
$ wc -l /etc/passwd
34 /etc/passwd

# ファイルの単語数を表示する
$ wc -w /etc/passwd
54 /etc/passwd

# ファイルの文字数を表示する
$ wc -c /etc/passwd
1838 /etc/passwd
```

# cp
```bash
# hoge1.txtをhoge2.txtという名前でコピーする
$ cp hoge1.txt hoge2.txt

# コピー先に同名のファイルがあれば上書きする
$ cp -f hoge1.txt hoge2.txt

# コピー先に同名のファイルがあれば上書きするかどうか確認する
$ cp -i hoge1.txt hoge2.txt 
cp: `hoge2.txt' を上書きしますか? y

# コピー元ファイルの属性（所有者、所有グループ、アクセス権、タイムスタンプ）を保持したままコピーする
$ cp -p hoge1.txt hoge2.txt

# ディレクトリ内を再帰的にコピーする（ディレクトリをコピーする）
$ cp -r dir ~
```

# find
```bash
# 指定したディレクトリから検索条件にマッチするファイルやディレクトリを表示する
$ find ~ -name "hoge*"
/home/pi/hoge3.txt
/home/pi/hoge1.txt
/home/pi/hoge2.txt
```

# mkdir
```bash
# ディレクトリを作成する
$ mkdir dir

# 指定したアクセス権でディレクトリを作成する
$ mkdir -m 700 dir

# 親ディレクトリも同時に作成する
$ mkdir -p dir/dir1/dir2
```

# mv
```bash
# ファイルを移動する
$ mv hoge.txt ~

# ファイル名を変更する
$ mv hoge.txt hoge1.txt
$ ls
hoge1.txt
```

# ls
```bash
# カレントディレクトリのファイルを表示する
$ ls
Desktop    Downloads  Pictures  Scratch  cron    python_games
Documents  Music      Public    Videos   dasher  scratchgpio5

# ディレクトリ内のファイルを表示する
$ ls /home/pi
Desktop    Downloads  Pictures  Scratch  cron    python_games
Documents  Music      Public    Videos   dasher  scratchgpio5

# 「.」ファイルも含めて表示する
$ ls -a /home/pi
.               .config          .mozc             .thonny               Downloads
..              .dbus            .npm              .thumbnails           Music
.WolframEngine  .gconf           .pip              .viminfo              Pictures
.Xauthority     .gstreamer-0.10  .pki              .vimrc                Public
.aptitude       .homebridge      .profile          .vnc                  Scratch
.bash_history   .idlerc          .python_history   .voice.txt.swp        Videos
.bash_logout    .kde             .scratch          .xsession-errors      cron
.bashrc         .lesshst         .selected_editor  .xsession-errors.old  dasher
.cache          .local           .ssh              Desktop               python_games
.claws-mail     .minecraft       .themes           Documents             scratchgpio5

# ファイルの詳細な情報を表示する
$ ls -l /home/pi
合計 48
drwxr-xr-x 2 pi pi 4096  6月 12  2017 Desktop
drwxr-xr-x 5 pi pi 4096  6月 11  2017 Documents
drwxr-xr-x 2 pi pi 4096 12月 24 22:32 Downloads
drwxr-xr-x 2 pi pi 4096  6月 17  2017 Music
drwxr-xr-x 2 pi pi 4096  4月 10  2017 Pictures
drwxr-xr-x 2 pi pi 4096  4月 10  2017 Public
drwxr-xr-x 2 pi pi 4096  6月  4  2017 Scratch
drwxr-xr-x 2 pi pi 4096  4月 10  2017 Videos
drwxr-xr-x 2 pi pi 4096 12月 29 07:24 cron
drwxr-xr-x 7 pi pi 4096  8月 14 17:26 dasher
drwxr-xr-x 2 pi pi 4096  4月 10  2017 python_games
drwxr-xr-x 3 pi pi 4096  6月 18  2017 scratchgpio5
```

# rm
```bash
# ファイルを削除する
$ rm hoge.txt

# ファイルを削除する（確認なし）
$ rm -f hoge.txt

# ファイルを削除する（確認あり）
$ rm -i hoge.txt

# 再帰的にディレクトリを削除する
$ rm -r dir or rm -R dir
```

# rmdir
```bash
# 空のディレクトリを削除する
$ rmdir dir

# 複数階層の空ディレクトリを削除する
$ rmdir -p dir/dir1
```

# touch
```bash
# 空ファイルを作成する
$ touch hoge.txt

# アクセス時刻だけ変更する
$ touch -a hoge.txt

# 修正時刻だけ変更する
$ touch -m hoge.txt

# タイムスタンプを指定時刻に変更する
$ touch -t 201801011200 hoge.txt
```

# tar
```bash
# 複数のファイルを1つのアーカイブファイルにまとめる
$ tar cvf hoge.tar hoge1.txt hoge2.txt hoge3.txt 

# アーカイブファイルの展開を行う
$ tar xvf hoge.tar 

# アーカイブファイルの内容を表示する
$ tar tvf hoge.tar 
-rw-r--r-- pi/pi             2 2018-01-05 16:08 hoge1.txt
-rw-r--r-- pi/pi             2 2018-01-05 16:09 hoge2.txt
-rw-r--r-- pi/pi             2 2018-01-05 16:09 hoge3.txt
```

# cpio
```bash
# ファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーしたりする
# -i アーカイブからファイルを抽出する
# -o アーカイブを作成する
$ ls | cpio -o > /tmp/backup
```

# dd
```bash
# ファイルからの入力をファイルもしくは標準出力に送る
# if= 入力ファイル 入力側ファイルを指定する（デフォルトは標準入力）
# of= 出力ファイル 出力側ファイルを指定する（デフォルトは標準出力）
# bs=バイト数 入出力のブロックサイズを指定する
# count=回数 回数分の入力ブロックをコピーする
$ dd if=/dev/sdb of=/dev/sdc
```

# file
```bash
# ファイルの種別を表示する
$ file /etc/hosts
/etc/hosts: ASCII text

$ file /bin/bash 
/bin/bash: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=63aef36943da49b10c68826319a6efcdc1744f8b, stripped

$ file /etc
/etc: directory
```

# gzip
```bash
# gzip形式でファイルを圧縮する
$ gzip file

# gzip形式でファイルを圧縮する（圧縮前のファイルを残す）
$ gzip -c file > file.gz

# gzip形式の圧縮ファイルを展開する
$ gzip -d file
```

# gunzip
```bash
# gzip形式で圧縮されたファイルを展開する
$ gunzip file.gz or gzip -d file.gz
```

# bzip2
```bash
# bzip2形式で圧縮されたファイルを展開する
$ bunzip2 file.bz2 or bzip2 -d file.bz
```

# xz
```bash
# xz形式でファイルを圧縮する
$ xz file

# xz形式の圧縮ファイルを展開する
$ xz -d file.xz

# xz形式でファイルを圧縮、展開するときに元ファイルを削除しない
$ xz -k file or xz -k file.xz
```

# tee
```bash
# コマンドの結果を標準出力とファイルの両方に出力する
$ ls | tee hoge.txt
Desktop
Documents
Downloads
Music
Pictures
Public
Scratch
Videos
cron
dasher
hoge.txt
python_games
scratchgpio5

$ ls
Desktop    Downloads  Pictures  Scratch  cron    hoge.txt      scratchgpio5
Documents  Music      Public    Videos   dasher  python_games

# 標準出力を出力し、ファイルに追記する
$ ls | tee -a hoge.txt
```

# xargs
```bash
# 標準入力から受け取った文字列を引数に指定して、指定のコマンドを実行する
$ find . -name "hoge*" | xargs grep Do
Documents
Downloads
Documents
Downloads
```

# &
```bash
# コマンドをバックグラウンドで実行する
$ tail -f /var/log/messages &
[1] 11656
```

# bg
```bash
# Ctrl + Zで現在のジョブを一時停止する
$ tail -f /var/log/messages
[1]+  停止                  tail -f /var/log/messages

# 実行中のジョブをバックグラウンドで実行する
$ bg 1
[1]+ tail -f /var/log/messages &
```

# fg
```bash
$ tail -f /var/log/messages &
[1] 11661

# 実行中のジョブをフォアグラウンドで実行する
$ fg 1
tail -f /var/log/messages
```

# jobs
```bash
# 実行中のジョブを表示する
$ jobs
[1]+  実行中               tail -f /var/log/messages &
```

# kill
```bash
# プロセスを終了する（PID指定）
# HUP 1 再起動
# INT 2 割り込み（Ctrl + C）
# KILL 9 強制終了
# TERM 15 終了（デフォルト）
# CONT 18 停止しているプロセスを再開
# STOP 19 一時停止
kill 300 or kill -15 300 or kill -s 15 300 or kill -TERM 300 or kill -SIGTERM 300
```

# nohup
```bash
# ログアウト後もプログラムを実行させる
$ nohup tail -f /var/log/messages &
```

# free
```bash
# メモリの利用状況、空き状況を表示する
$ free
             total       used       free     shared    buffers     cached
Mem:        880552     796376      84176      12624     106940     374856
-/+ buffers/cache:     314580     565972
Swap:       102396          0     102396

# MB単位で表示する
$ free -m
             total       used       free     shared    buffers     cached
Mem:           859        777         82         12        104        366
-/+ buffers/cache:        307        552
Swap:           99          0         99
```

# uptime
```bash
# システムの稼働時間、平均負荷を表示する
$ uptime
 15:10:59 up 19 days, 18:10,  3 users,  load average: 0.10, 0.06, 0.00
```

# pgrep
```bash
# 指定したプロセス名に対応するPIDを表示する
$ pgrep npm
652

# プロセスの実行ユーザを指定する
$ pgrep -u pi
534
535
653
660
```

# pkill
```bash
# プロセスを終了する（プロセス名指定）
# シグナルの指定方法はkillと同じ
pkill npm
```

# killall
```bash
# プロセスを終了する（プロセス名指定）
# シグナルの指定方法はkillと同じ
killall npm
```

# screen
```bash
# 複数の仮想端末を開いてタブのように切り替えできる
# ウインドウを分割して表示できる
# 作業の状態を保存し、次回ログイン時に再開できる
$ screen
```

# nice
```bash
# プログラムを実行する優先度を変更する
# 優先度は、（高）-20〜19（低）
$ nice -n 10 sh hoge.sh or nice -10 sh hoge.sh
```

# ps
```bash
# ユーザ自身が実行しているプロセスを表示する
$ ps
  PID TTY          TIME CMD
 9893 pts/0    00:00:07 bash
11129 pts/0    00:00:00 ps

# すべてのプロセスを表示する
# ps -eと同じ意味
$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:38 /sbin/init splash
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:05 [ksoftirqd/0]
    5 ?        S<     0:00 [kworker/0:0H]
    7 ?        S      3:31 [rcu_sched]
    8 ?        S      0:00 [rcu_bh]
    9 ?        S      0:00 [migration/0]
   10 ?        S<     0:00 [lru-add-drain]
〜略〜
```

# renice
```bash
# 実行中のプロセスの優先度を変更する
renice -n 10 sh hoge.sh or renice 10 sh hoge.sh

# PIDを指定する
renice -n 10 -p 1000

# ユーザ名を指定する
renice -n 10 -u pi
```

# top
```bash
# 実行中のプロセスを継続的に監視する
$ top
top - 15:00:54 up 19 days, 18:00,  3 users,  load average: 0.11, 0.06, 0.00
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.5 id,  0.1 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:    880552 total,   796344 used,    84208 free,   106940 buffers
KiB Swap:   102396 total,        0 used,   102396 free.   374856 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                        
11111 pi        20   0    4596   2560   2160 R   1.0  0.3   0:00.09 top                            
  842 root      20   0  123812  38788  22540 S   0.3  4.4  16:48.65 Xorg                           
25101 root      20   0   46868  10420   9492 S   0.3  1.2  35:02.38 packagekitd                    
    1 root      20   0   23920   3996   2740 S   0.0  0.5   0:38.17 systemd                        
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.96 kthreadd                       
    3 root      20   0       0      0      0 S   0.0  0.0   0:05.00 ksoftirqd/0                    
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                   
    7 root      20   0       0      0      0 S   0.0  0.0   3:31.23 rcu_sched                      
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                         
    9 root      rt   0       0      0      0 S   0.0  0.0   0:00.11 migration/0                    
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                  
   11 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/0                        
   12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/1                        
   13 root      rt   0       0      0      0 S   0.0  0.0   0:00.18 migration/1                    
   14 root      20   0       0      0      0 S   0.0  0.0   0:00.10 ksoftirqd/1                    
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                   
   17 root      20   0       0      0      0 S   0.0  0.0   0:00.00 cpuhp/2 
```

# grep
```bash
$ cat hoge.txt 
aaa
bbb
ccc

# 検索パターンにマッチした文字列が含まれる行をすべて表示する
$ grep a hoge.txt 
aaa

# 検索パターンにマッチした文字列が含まれる行数を表示する
$ grep -c a hoge.txt 
1

# 大文字小文字を区別しない
$ grep -i A hoge.txt 
aaa

# 行番号も表示する
$ grep -n a hoge.txt 
1:aaa

# 検索パターンにマッチしない行を表示する
$ grep -v a hoge.txt 
bbb
ccc
```

# egrep
```bash
# 拡張正規表現を使ってgrepする
# grep -Eと同じ意味
# + 直前の文字の1回以上の繰り返し
# ? 直前の文字の0回もしくは1回の繰り返し
# | 左右いずれかの記述にマッチする
$ egrep '\s(22|53)/tcp' /etc/services
ssh		22/tcp				# SSH Remote Login Protocol
domain		53/tcp				# Domain Name Server
```

# fgrep
```bash
$ cat hoge.txt 
.*

# 検索パターンに正規表現を使わずにgrepする
$ fgrep '.*' hoge.txt 
.*

```

# vi, Vim
```bash
# Linuxの標準エディタ
# 習うより慣れろ！ということで、Vimのチュートリアルで基本的な操作方法を覚えましょう
$ vimtutor
===============================================================================
=    V I M 教 本 (チュートリアル) へ よ う こ そ        -    Version 1.7      =
===============================================================================

     Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常
     に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ
     ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう
     なっています。

     チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
     け時間を使うのかにもよりますが、およそ25から30分です。

     ATTENTION:
     以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
     にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。

     このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し
     ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ
     ならないのです。文章を読んだだけならば、きっと忘れてしまいます!。

     さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に
     レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま
     しょう。
```

## 参考本
- [Linux教科書 LPICレベル1 Version4.0対応](https://www.amazon.co.jp/gp/product/4798141917/ref=oh_aui_search_detailpage?ie=UTF8&psc=1)
- [Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応](https://www.amazon.co.jp/gp/product/4798141895/ref=oh_aui_search_detailpage?ie=UTF8&psc=1)