LPIC(Linux技術者認定試験)の101試験(Ver4.0)の勉強をしていたときに学んだGNUとUnixのコマンドをまとめてみました。ただコマンドを羅列するのではなく、その説明や使用例を交えて書きました。これからLPICを受験しようと思っている方やLinux初心者の方の参考になれば幸いです。私自身もLinux初心者なので、コマンドの書き方や説明が誤っていたり、もっとこうした方がわかりやすい!なんてのがあれば教えていただけると嬉しいです。
- 使用環境:Raspbian GNU/Linux 8.0 (jessie)
echo
# 指定した文字列を表示する
$ echo hoge
hoge
# 指定した変数の値を表示する
$ echo $HOME
/home/pi
env, printenv, set
# 環境変数を一覧表示する
$ env
# 環境変数を一覧表示する
$ printenv
# 環境変数とシェル変数を表示する
$ set
unset
$ hoge=HOGE
$ echo $hoge
HOGE
# 変数を削除する
$ unset hoge
# 何も表示されない
$ echo $hoge
export
# 環境変数を定義する
$ export HOGE=hoge
$ echo $HOGE
hoge
pwd
# カレントディレクトリの絶対パスを表示する
$ pwd
/home/pi
man
# コマンドのマニュアルを表示する
$ 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
# 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
# コマンドの実行履歴を表示する
$ 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
# ファイルの内容を表示する
$ 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
$ 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
$ 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
$ cat hoge.txt
hoge is hoge.
# テキストを指定した桁に整形する
$ fmt -w 1 hoge.txt
hoge
is
hoge.
head
# ファイルの先頭部分を表示する
$ 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
$ 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
# テキストを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
# ファイルに行番号を付けて表示する
$ 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
# バイナリファイルの内容を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
$ cat hoge1.txt
aaa
bbb
$ cat hoge2.txt
AAA
BBB
# ファイルを水平方向に連結する
# -d 区切り文字 区切り文字を指定する
$ paste -d, hoge1.txt hoge2.txt
aaa,AAA
bbb,BBB
pr
# 印刷用にファイルを成型する
# -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
$ 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
$ 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
$ cat hoge.txt
1
2
3
# 指定行数ごとにファイルを分割する
# -行数 入力ファイルを指定された行ごとに分割する
$ split -1 hoge.txt hoge.
$ ls
hoge.aa hoge.ab hoge.ac
tail
# ファイルの末尾部分を表示する
$ 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
$ 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
$ 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
$ 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
# ファイルの行数、単語数、文字数を表示する
$ 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
# 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
# 指定したディレクトリから検索条件にマッチするファイルやディレクトリを表示する
$ find ~ -name "hoge*"
/home/pi/hoge3.txt
/home/pi/hoge1.txt
/home/pi/hoge2.txt
mkdir
# ディレクトリを作成する
$ mkdir dir
# 指定したアクセス権でディレクトリを作成する
$ mkdir -m 700 dir
# 親ディレクトリも同時に作成する
$ mkdir -p dir/dir1/dir2
mv
# ファイルを移動する
$ mv hoge.txt ~
# ファイル名を変更する
$ mv hoge.txt hoge1.txt
$ ls
hoge1.txt
ls
# カレントディレクトリのファイルを表示する
$ 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
# ファイルを削除する
$ rm hoge.txt
# ファイルを削除する(確認なし)
$ rm -f hoge.txt
# ファイルを削除する(確認あり)
$ rm -i hoge.txt
# 再帰的にディレクトリを削除する
$ rm -r dir or rm -R dir
rmdir
# 空のディレクトリを削除する
$ rmdir dir
# 複数階層の空ディレクトリを削除する
$ rmdir -p dir/dir1
touch
# 空ファイルを作成する
$ touch hoge.txt
# アクセス時刻だけ変更する
$ touch -a hoge.txt
# 修正時刻だけ変更する
$ touch -m hoge.txt
# タイムスタンプを指定時刻に変更する
$ touch -t 201801011200 hoge.txt
tar
# 複数のファイルを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
# ファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーしたりする
# -i アーカイブからファイルを抽出する
# -o アーカイブを作成する
$ ls | cpio -o > /tmp/backup
dd
# ファイルからの入力をファイルもしくは標準出力に送る
# if= 入力ファイル 入力側ファイルを指定する(デフォルトは標準入力)
# of= 出力ファイル 出力側ファイルを指定する(デフォルトは標準出力)
# bs=バイト数 入出力のブロックサイズを指定する
# count=回数 回数分の入力ブロックをコピーする
$ dd if=/dev/sdb of=/dev/sdc
file
# ファイルの種別を表示する
$ 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
# gzip形式でファイルを圧縮する
$ gzip file
# gzip形式でファイルを圧縮する(圧縮前のファイルを残す)
$ gzip -c file > file.gz
# gzip形式の圧縮ファイルを展開する
$ gzip -d file
gunzip
# gzip形式で圧縮されたファイルを展開する
$ gunzip file.gz or gzip -d file.gz
bzip2
# bzip2形式で圧縮されたファイルを展開する
$ bunzip2 file.bz2 or bzip2 -d file.bz
xz
# xz形式でファイルを圧縮する
$ xz file
# xz形式の圧縮ファイルを展開する
$ xz -d file.xz
# xz形式でファイルを圧縮、展開するときに元ファイルを削除しない
$ xz -k file or xz -k file.xz
tee
# コマンドの結果を標準出力とファイルの両方に出力する
$ 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
# 標準入力から受け取った文字列を引数に指定して、指定のコマンドを実行する
$ find . -name "hoge*" | xargs grep Do
Documents
Downloads
Documents
Downloads
&
# コマンドをバックグラウンドで実行する
$ tail -f /var/log/messages &
[1] 11656
bg
# Ctrl + Zで現在のジョブを一時停止する
$ tail -f /var/log/messages
[1]+ 停止 tail -f /var/log/messages
# 実行中のジョブをバックグラウンドで実行する
$ bg 1
[1]+ tail -f /var/log/messages &
fg
$ tail -f /var/log/messages &
[1] 11661
# 実行中のジョブをフォアグラウンドで実行する
$ fg 1
tail -f /var/log/messages
jobs
# 実行中のジョブを表示する
$ jobs
[1]+ 実行中 tail -f /var/log/messages &
kill
# プロセスを終了する(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
# ログアウト後もプログラムを実行させる
$ nohup tail -f /var/log/messages &
free
# メモリの利用状況、空き状況を表示する
$ 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
# システムの稼働時間、平均負荷を表示する
$ uptime
15:10:59 up 19 days, 18:10, 3 users, load average: 0.10, 0.06, 0.00
pgrep
# 指定したプロセス名に対応するPIDを表示する
$ pgrep npm
652
# プロセスの実行ユーザを指定する
$ pgrep -u pi
534
535
653
660
pkill
# プロセスを終了する(プロセス名指定)
# シグナルの指定方法はkillと同じ
pkill npm
killall
# プロセスを終了する(プロセス名指定)
# シグナルの指定方法はkillと同じ
killall npm
screen
# 複数の仮想端末を開いてタブのように切り替えできる
# ウインドウを分割して表示できる
# 作業の状態を保存し、次回ログイン時に再開できる
$ screen
nice
# プログラムを実行する優先度を変更する
# 優先度は、(高)-20〜19(低)
$ nice -n 10 sh hoge.sh or nice -10 sh hoge.sh
ps
# ユーザ自身が実行しているプロセスを表示する
$ 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
# 実行中のプロセスの優先度を変更する
renice -n 10 sh hoge.sh or renice 10 sh hoge.sh
# PIDを指定する
renice -n 10 -p 1000
# ユーザ名を指定する
renice -n 10 -u pi
top
# 実行中のプロセスを継続的に監視する
$ 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
$ 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
# 拡張正規表現を使って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
$ cat hoge.txt
.*
# 検索パターンに正規表現を使わずにgrepする
$ fgrep '.*' hoge.txt
.*
vi, Vim
# Linuxの標準エディタ
# 習うより慣れろ!ということで、Vimのチュートリアルで基本的な操作方法を覚えましょう
$ vimtutor
===============================================================================
= V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 =
===============================================================================
Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常
に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ
ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう
なっています。
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
け時間を使うのかにもよりますが、およそ25から30分です。
ATTENTION:
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。
このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し
ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ
ならないのです。文章を読んだだけならば、きっと忘れてしまいます!。
さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に
レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま
しょう。