[Udemyの動画講座]:https://www.udemy.com/course/linuxlpic/?utm_source=bene-content-marketing&utm_campaign=normal&utm_content=story&utm_term=career&utm_medium=udemyads
[Linux入門 3-5]:https://qiita.com/hoglet/items/d6f97403e3e90283e742
[Linux入門 3-7]:https://qiita.com/hoglet/items/b2f389fb7f82e6bc9e79
はじめに
Linux初学者である自分向け用の記事です。[Udemyの動画講座]を参考にしました。
僕の勉強法は動画を見る
→実際に動かしてみる
→問題演習
という流れです。
前回まで:[Linux入門 3-5]
3. LinuC 101 Ver .10.0(問題、テスト、演習)
フィルタを使ったテキストストリームの処理
catコマンド
ファイルの中身を標準出力に表示するコマンド
[root@52793acd2b0f test]# cat test.txt
apple
lemon
grape
ABCDE
[root@52793acd2b0f test]# cat -n test.txt
1 apple
2 lemon
3
4 grape
5
6
7 ABCDE
[root@52793acd2b0f test]# cat -b test.txt
1 apple
2 lemon
3 grape
4 ABCDE
cutコマンド
ファイルから一部を抽出して出力するコマンド
[root@52793acd2b0f test]# cat test.txt
1,apple
2,lemon
3,grape
[root@52793acd2b0f test]# cut -c 1 test.txt
1
2
3
[root@52793acd2b0f test]# cut -c 1-3 test.txt
1,a
2,l
3,g
[root@52793acd2b0f test]# cut -d , -f 2 test.txt
apple
lemon
grape
[root@52793acd2b0f test]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@52793acd2b0f test]# cut -d : -f 1-4 /etc/passwd
root:x:0:0
bin:x:1:1
daemon:x:2:2
adm:x:3:4
lp:x:4:7
sync:x:5:0
shutdown:x:6:0
halt:x:7:0
mail:x:8:12
operator:x:11:0
games:x:12:100
ftp:x:14:50
nobody:x:99:99
systemd-network:x:192:192
dbus:x:81:81
expandコマンド, unexpandコマンド
テキスト内のタブをスペースに変換するコマンド
行頭のスペースをタブに変換するコマンド
[root@52793acd2b0f test]# cat test.txt
1 apple
2 lemon
3 grape
[root@52793acd2b0f test]# expand -t 1 test.txt
1 apple
2 lemon
3 grape
[root@52793acd2b0f test]# unexpand -t 8 test1.txt
1 apple
2 lemon
3 grape
lessコマンド
ファイルの中身を閲覧するコマンド
[root@52793acd2b0f test]# less test1.txt
1 apple
2 lemon
3 grape
test1.txt (END)
fmtコマンド
テキストを決められた桁に整形する
[root@52793acd2b0f test]# cat test.txt
I Like an apple .
[root@52793acd2b0f test]# fmt -u test.txt
I Like an apple .
prコマンド
印刷用にファイルの書式を整形する
[root@52793acd2b0f test]# pr -h "////PRINT////" /etc/passwd | less
2020-11-13 01:55 ////PRINT//// Page 1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
headコマンド, tailコマンド
ファイルを先頭から表示する
指定したファイルの末尾から表示
[root@52793acd2b0f test]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@52793acd2b0f test]# tail -n 2 /etc/passwd
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sedコマンド
ファイルの編集を行うコマンド
[root@52793acd2b0f test]# cat test.txt
1,apple
2,lemon
3,grape
4,apple
5,orange
[root@52793acd2b0f test]# sed s/a/AAA/ test.txt
1,AAApple
2,lemon
3,grAAApe
4,AAApple
5,orAAAnge
sortコマンド
ファイルの行の並び替えをする
[root@52793acd2b0f test]# cat test.txt
2,apple
11,lemon
4,grape
1,apple
9,orange
[root@52793acd2b0f test]# sort test.txt
1,apple
11,lemon
2,apple
4,grape
9,orange
[root@52793acd2b0f test]# sort -n test.txt
1,apple
2,apple
4,grape
9,orange
11,lemon
uniqコマンド
sortコマンドと併用することで効果発動!!
ソート済みの文字列から重複行を調べて、削除して取り出す
[root@52793acd2b0f test]# cat test.txt
111
P@ssw0rd
222
p@ss
333
pass
111
p@ss
222
[root@52793acd2b0f test]# uniq test.txt
111
P@ssw0rd
222
p@ss
333
pass
111
p@ss
222
[root@52793acd2b0f test]# sort test.txt | uniq
111
222
333
P@ssw0rd
p@ss
pass
splitコマンド
ファイルを分割するコマンド
[root@52793acd2b0f split]# for i in `seq 1000` ;do echo $i; done
1
2
3
.
.
.
999
1000
[root@52793acd2b0f split]# for i in `seq 1000` ;do echo $i >> aaa.txt; done
[root@52793acd2b0f split]# mkdir bk
[root@52793acd2b0f split]# split -100 aaa.txt bk/bbb.
[root@52793acd2b0f split]# ls bk
bbb.aa bbb.ab bbb.ac bbb.ad bbb.ae bbb.af bbb.ag bbb.ah bbb.ai bbb.aj
diffコマンド
[root@52793acd2b0f diff]# cat a.txt
apple
lemon
grape
orange
pen
[root@52793acd2b0f diff]# cat b.txt
apple
lemon
grape
orange
test
[root@52793acd2b0f diff]# diff a.txt b.txt
5c5
< pen
---
> test
ストリーム、パイプ、リダイレクトの使用
- ストリーム: キーボードやファイルからプログラムへのデータの入力、プログラムからディスプレイやファイルへのデータの出力などのデータの流れのこと
- 標準入力: プログラムへの入力ストリーム
- 標準出力: プログラムからの出力ストリーム
- 標準エラー出力: プログラムからのエラーメッセージの出力
番号 | 入出力名 | デフォルト |
---|---|---|
0 | 標準入力 | キーボード |
1 | 標準出力 | 画面(端末) |
2 | 標準エラー出力 | 画面(端末) |
パイプ(|)
1つ目のコマンドの標準出力を2つ目のコマンドに渡す(コマンドA | コマンドB)
[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
/dev/null
簡単にいうと、ゴミ箱のこと。
スペシャルファイルの1つで、そこに書き込まれたデータを全て捨て(writeシステムコールは成功する)、読み出してもどんなプロセスに対してもデータを返さない
tee
標準出力を画面表示とファイルへの書き込み両方行う
[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@c6140de26466 3]# cat /etc/passwd | grep root | tee root.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@c6140de26466 3]# cat root.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
コマンド > ファイル名
標準出力をファイルに上書きして書き込み(リダイレクト)
[root@c6140de26466 3]# echo ABC > test.txt
[root@c6140de26466 3]# cat test.txt
ABC
[root@c6140de26466 3]# echo DEF > test.txt
[root@c6140de26466 3]# cat test.txt
DEF
コマンド >> ファイル名
標準出力をファイルに追記(リダイレクト)
[root@c6140de26466 3]# echo DEF >> test.txt
[root@c6140de26466 3]# cat test.txt
ABC
DEF
コマンド < ファイル名
ファイルを入力としてコマンドに渡す
[root@c6140de26466 3]# cat test.txt
taro
jiro
saburo
hanako
[root@c6140de26466 3]# grep jiro < test.txt
jiro
[root@c6140de26466 3]# grep -v jiro < test.txt
taro
saburo
hanako
コマンド << 文字列
指定した文字列が入力されるまで、標準入力を行う
[root@c6140de26466 3]# grep hello << EOF
> a
> aaa
> goodbye
> thankyou
> hello
> bye
> hello world
> konnichiwa
> EOF
hello
hello world
コマンド 2> ファイル名
標準エラー出力をファイルに書き込む
[root@c6140de26466 3]# echo ABC
ABC
[root@c6140de26466 3]# ech ABC
bash: ech: command not found
[root@c6140de26466 3]# ech ABC > error.txt
bash: ech: command not found
[root@c6140de26466 3]# cat error.txt
[root@c6140de26466 3]# ech ABC 2> error.txt
[root@c6140de26466 3]# cat error.txt
bash: ech: command not found
コマンド 2>> ファイル名
標準エラー出力をファイルに追記
[root@c6140de26466 3]# ech hello
bash: ech: command not found
[root@c6140de26466 3]# ech hello 2>> error.txt
[root@c6140de26466 3]# cat error.txt
bash: ech: command not found
bash: ech: command not found
1>&2
標準出力を標準エラー出力に渡す(あんまり使わない)
[root@c6140de26466 3]# ./sample.sh > log.txt 1>&2
/home/3
./sample.sh: line 4: echoo: command not found
[root@c6140de26466 3]# cat log.txt
コマンド > ファイル 2>&1
標準出力と標準エラー出力をファイルに書き込む
[root@c6140de26466 3]# cat sample.sh
#!/bin/bash
echo `pwd` #標準出力
echoo `pwd` #標準エラー出力
[root@c6140de26466 3]# ./sample.sh
/home/3
./sample.sh: line 4: echoo: command not found
[root@c6140de26466 3]# ./sample.sh > log.txt 2>&1
[root@c6140de26466 3]# cat log.txt
/home/3
./sample.sh: line 4: echoo: command not found
コマンドA | コマンドB
コマンドAの標準出力をコマンドBの入力にする
[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
xargs
標準入力から読み込んだ内容をコマンドの引数に変換して渡す
|xargs –I○○ コマンド ○○ # -Iですると引数を別名で渡すことができる
[root@c6140de26466 3]# touch ex1 ex2 ex3
[root@c6140de26466 3]# vi rm_file.txt
[root@c6140de26466 3]# cat rm_file.txt
ex1
ex2
[root@c6140de26466 3]# cat rm_file.txt | rm
rm: missing operand
Try 'rm --help' for more information.
[root@c6140de26466 3]# cat rm_file.txt | xargs rm
[root@c6140de26466 3]# ll
total 4
-rw-r--r-- 1 root root 0 Jan 1 13:12 ex3
-rw-r--r-- 1 root root 8 Jan 1 13:13 rm_file.txt
To Be Continued...
[Linux入門 3-7] へ