はじめに
基本的にSoftwareDesignは特集で買うかどうかを決めます。なぜかというと連載モノは連続で買わないと読めないんですよね。というか最初から読まないといけない、に近い。1つで完結した内容になってないんですよね。まぁそれはさておき。
- 出版社/メーカー: 技術評論社
- 発売日: 2016/05/18
- メディア: 雑誌
- この商品を含むブログ (2件) を見る
今回の特集は「bash再入門」と「MySQLを武器にSQLをはじめよう」の2つ。
bashを使わずに仕事をすることはできません。基本的な内容はあるとしても、何か1つでも得ることはあるだろうと思い、これを機に復習することにしました。
MySQLのほうもMariaDBいれたりガレラクラスタ組んだりして、SQLもしもしする練習もしたいんですが、今回は見送り。
bashとは何か?
第1章 bashとは何か〜古くて新しいシェル環境 より
bashって何ですか?というのを知ったのは実は最近だったりする。。。シェルはユーザインターフェイスのことと言ってもいいだろう。ユーザとUNIXカーネルの橋渡しをする存在。そのシェルの中でもbash、csh、zshと様々な種類のソフトウェアがある。ほとんどのLinuxディストリビューションにおいてbashが標準であるため、bashは最低限押さえておく必要がある。
同期氏はzsh推しだから使ってみたい気もするけど、まずは標準からですね。
今使っているシェルを確認する
第2章 最初につまづかないためのbashひとめぐりより
普段自分が今何のシェルを使っているかを意識したことがないので、おそらくbashだったのでしょうが、確認しておきましょう。
インストールされているシェル
/etc/shellsを確認してみます。
MacBook-Air:~ take$ cat -n /etc/shells 1 # List of acceptable shells for chpass(1). 2 # Ftpd will not allow users to connect who are not using 3 # one of these shells. 4 5 /bin/bash 6 /bin/csh 7 /bin/ksh 8 /bin/sh 9 /bin/tcsh 10 /bin/zsh
ログインシェル
$SHELLに入っているようです。
MacBook-Air:~ take$ echo $SHELL /bin/bash
シェルを変更する
chshで変更します。
MacBook-Air:~ take$ chsh -s /bin/zsh Changing shell for take. Password for take: MacBook-Air:~ take$
ログインシェルは通常/etc/passwdに書かれてあるらしいですが、Macの場合別の場所で管理されてるそう。
システム環境設定→ユーザとグループから。
ちゃんとログインシェル変わってますね。
シェルのショートカットキー
Ctrl-aで行頭、Ctrl-eで行末へ移動知らなかった。。。カーソル連打で戻ってたよ。。。
その他単語レベルでの移動やカットも便利そう。
history(コマンド実行履歴)の利用
たまに過去のコマンド探すのにhistoryをgrepしたりはしますが、これ、Ctrl-rで検索できるじゃん。。知らなかったよ。。。
(reverse-i-search)`grep': grep take /etc/passwd
(Ctrl-rを押すと(reverse-i-search)と表示され、文字を入力すると候補が出る。続けてCtrl-rを押せば上にあがっていく。
シェルスクリプトの復習
第4章 シェル芸問題で腕を磨け!テキスト処理・計算・調査の定石 より
シェル芸!何でもワンライナーで書く必要はないですが、その能力は必ず役に立ちますよね。この章で出てくるコマンドについて復習します。
tr
ファイル内の文字を一括変換する、と言われてもイマイチピンとこない。
Linuxコマンド集 - 【 tr 】 文字を一括変換する:ITpro
オプションなし
MacBook-Air:bash take$ cat test.txt hogepogehogepoge hogepogehogepoge hogepogehogepoge MacBook-Air:bash take$ cat test.txt | tr hoge HOGE HOGEpOGEHOGEpOGE HOGEpOGEHOGEpOGE HOGEpOGEHOGEpOGE
これ、単語レベルじゃなくて、hはHに、oはOにgはGに、eはEに変換されるんですね。
-cオプション
MacBook-Air:bash take$ cat test.txt | tr -c ge GE
EEgeEEgeEEgeEEgeEEEgeEEgeEEgeEEgeEEEgeEEgeEEgeEEgeEEMacBook-Air:bash take$
ごめんどういう挙動か全然わかんない。。。
manを見てみる。
-C Complement the set of characters in string1, that is ``-C ab'' includes every character except for `a' and `b'. -c Same as -C but complement the set of values in string1.
String1で指定した文字以外の文字を、String2で指定した文字列に置換するのか。
MacBook-Air:bash take$ cat test2.txt 1234 5678 90 MacBook-Air:bash take$ cat test2.txt | tr -c 159 a 1aaaa5aaaa9aa
1,5,9以外の文字が全てaに置換されてますね。ちなみにString2をabとすると全部bに変わっちゃいます。最後の文字を対象にしているのかな。補集合を変換したいときに使うんですね。で、改行文字も変換されちゃってるってわけか。
-dオプション
これは削除なのでわかりやすい。
MacBook-Air:bash take$ cat test2.txt 1234 5678 90 MacBook-Air:bash take$ cat test2.txt | tr -d 159 234 678 0
-tオプション
String1をString2の長さに切り詰めるって何を言ってるかわかんないので使ってみます。
MacBook-Air:bash take$ cat test2.txt | tr -t 123 123 tr: illegal option -- t usage: tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2
おこられる。確かにmanに載ってない。なんだこれ。
-sオプション
連続文字を1文字にする
MacBook-Air:bash take$ cat test3.txt
hogeeeeeeeeee
pogeeeeeee
togee
MacBook-Air:bash take$ cat test3.txt | tr -s e
hoge
poge
toge
分かりやすいね。
xargs
xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ
ファイル名の一覧を標準入力から受け取って、そのファイル一覧を任意のコマンドに引数として渡すコマンド。ファイル一覧でなくてもなんでもよい。
日本語で頼む。
findもしくはls、またはファイル一覧を入力として、それを1つずつ次のコマンドに渡してやるって感じかな。
MacBook-Air:bash take$ ls test.txt test2.txt test3.txt MacBook-Air:bash take$ ls | xargs cat hogepogehogepoge hogepogehogepoge hogepogehogepoge 1234 5678 90 hogeeeeeeeeee pogeeeeeee togee
なるほど。覚えておいたら使いドコロがありそうだ。
bc
数値計算を行う。
やってみる。
MacBook-Air:bash take$ echo 1+3 | bc 4
なるほど、前の式を渡してやれば計算してくれるのか。
おわりに
実は下書きのまま残っていたものを投稿しました。このあとfishの特集があり、これを読んだ時にfishをいれて今も使っているのですが、使いこなせてないので、機能調べがてら、fishの記事を書こうと思います。