はじめに
読んだので気になった部分をメモ。
- 出版社/メーカー: 技術評論社
- 発売日: 2017/06/17
- メディア: 雑誌
- この商品を含むブログ (1件) を見る
特集:理論&応用でシェル力の幅を広げる
第1章 シェル初心者から中級者への次に一歩
パイプやリダイレクトの話が中心でした。が、論理演算の&&と||はあらためてなるほどと思いました。
よく見りゃ当たり前なんですが、&&は両方真でないとtrueにならない、だから前コマンドが失敗したときは次のコマンドは実行されない。前コマンドが成功したとき"だけ"後コマンドが実行されるわけですね。
そして||は前コマンドが成功した場合は全体として真になるので、後コマンドは実行されない。つまり前コマンドが失敗したときのみ後コマンドが実行されます。
よく考えればそうなんだけど、なるほどなぁと感心しました。
ちなみに僕は普段fishを使ってるんですが&&使えません。
第2章 シェルスクリプト初心者から中級者への次の一歩
タイトル同じやん。
シェル哲学についてですね。
- 成否は終了ステータスで返す
- 成功したときは何も表示しない
- 失敗したときは静かなエラー
- エラーは標準エラー出力に出力する
- フィルタとパイプを意識する
- bashに依存しているのに#!/bin/shと書かない
特に6は僕も最近引っかかったので明示的に#!/bin/bashと書くようにしています。
ただ、失敗したときは静かなエラー、例としてcpで存在しないファイルをしていしたときの「No such file or directory」をあげていますが、例えばgitなんかはコマンド間違いのときていねいに「もしかしてこれじゃない?」と教えてくれたり「たぶんpullしないといけないよ」って言ってくれますよね。コマンドを組み合わせて使うことを考えるとエラーは静かな方がいいかもしれませんが、親切なのも助かりますね。
第3章 しくみを知れば、bashは怖くない
bashはシェルの一種。そしてシェルはOSを操作するためのベースのインターフェイスだということを体感するために、phpのインタラクティブモードをデフォルトシェルにしてみるお話。
ただのプログラミング言語の一種なんだよーということをわかってもらう記事ですね。
ビルトインコマンドと外部コマンドの違いを確認しておきます。
whichやpwdは外部コマンドで、cdはビルトインコマンドのようです。
vagrant@docker:~$ which cd vagrant@docker:~$ which which /usr/bin/which vagrant@docker:~$ which pwd /bin/pwd
typeで確認できます。
vagrant@docker:~$ type cd cd is a shell builtin vagrant@docker:~$ type pwd pwd is a shell builtin vagrant@docker:~$ type which which is hashed (/usr/bin/which)
pwdはどっちやねん。
vagrant@docker:~$ help GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu) These shell commands are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. Use `man -k' or `info' to find out more about commands not in this list. A star (*) next to a name means that the command is disabled. job_spec [&] history [-c] [-d offset] [n] or history -anrw [filename] or> (( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS;> . filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x command [args] : kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... > [ arg... ] let arg [arg ...] [[ expression ]] local [option] name[=value] ... alias [-p] [name[=value] ... ] logout [n] bg [job_spec ...] mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C > bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u nam> popd [-n] [+N | -N] break [n] printf [-v var] format [arguments] builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir] caller [expr] pwd [-LP] case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N> cd [-L|[-P [-e]] [-@]] [dir] readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-> command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or readonly -p compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat> return [n] complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action]> select NAME [in WORDS ... ;] do COMMANDS; done compopt [-o|+o option] [-DE] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...] continue [n] shift [n] coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...] declare [-aAfFgilnrtux] [-p] [name[=value] ...] source filename [arguments] dirs [-clpv] [+N] [-N] suspend [-f] disown [-h] [-ar] [jobspec ...] test [expr] echo [-neE] [arg ...] time [-p] pipeline enable [-a] [-dnps] [-f filename] [name ...] times eval [arg ...] trap [-lp] [[arg] signal_spec ...] exec [-cl] [-a name] [command [arguments ...]] [redirection > true exit [n] type [-afptP] name [name ...] export [-fn] [name[=value] ...] or export -p typeset [-aAfFgilrtux] [-p] name[=value] ... false ulimit [-SHabcdefilmnpqrstuvxT] [limit] fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [comm> umask [-p] [-S] [mode] fg [job_spec] unalias [-a] name [name ...] for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [-n] [name ...] for (( exp1; exp2; exp3 )); do COMMANDS; done until COMMANDS; do COMMANDS; done function name { COMMANDS ; } or name () { COMMANDS ; } variables - Names and meanings of some shell variables getopts optstring name [arg] wait [-n] [id ...] hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done help [-dms] [pattern ...] { COMMANDS ; }
helpで表示されるものがビルトインコマンドなんですね。
ビルトインコマンドはbashから直接実行されていることをpsで確かめています。
第4章 じつはこんな機能があった!bashの新機能、便利機能
bashのバージョンとか全然意識してないですね。vagrantで作ったubuntuで確認してみます。
vagrant@docker:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS" vagrant@docker:~$ bash --version GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
4.3.48です。2016年9月に4.4がリリースされたと書かれていますね。
|&で標準出力と標準エラー出力をまとめてパイプに出せるのは使いそうです。shoptで有効にできるglobster、failglob、autocdは何でしょうか。
globsterは*以下をすべて再帰マッチする。autocdはディレクトリ名を入力したときcdの引数とみなす、faillobはパターンマッチしなかったときに失敗とみなす。
他にもいろいろあるみたいで、別の機会に見ておきたい。
コプロセス
絶対子プロセスだと思った。co-process。ざっくりいうとコマンドを立ち上がりっぱなしにする、サーバ化するもののようです。coprocコマンドで検索したほうがでますね。ループでなんども同じコマンドを実行するときに検討できる機能とのこと。使わないだろうな。。。
参考
- techiela: 超簡単!shoptでbashの”秘められた真のチカラ”を開放する 【サンプルあり】
- shoptコマンドで設定できるbashの便利設定まとめ | 俺的備忘録 〜なんかいろいろ〜
- 「GNU Bash 4.4」がリリース | OSDN Magazine
- Bash Co-Processes | Linux Journal
- bashのcoprocコマンド: レンタルサーバーでLinuxのお勉強
第5章 意外と使える!? Bash on Ubuntu on Windows
Windows10の機能であるbash on windowsについて。仕事ではWindows10なんですがこの機能使えないんですよね。プライベートだとmacなので、もちろん使わない。記事によるとだいたいのことが問題なくできる、とのことです。
ハッシュ関数を使いこなしていますか?後編
ハッシュアルゴリズムの安全性指標を復習しておきましょう。
衝突困難性
同じハッシュ値を持つ2つのデータを見つけることが難しいという性質
原像計算困難性
ハッシュ値から元のデータを算出することが難しいという性質
第2原像計算困難性
あるデータがあったときに、そのデータのハッシュ値と同じハッシュ値を持つほかのデータを見つけることが難しいという性質
また、データベースのキーからハッシュでurlを生成するときの注意はなるほどと思いました。キーをハッシュ化しているということは、連番になっているので、1つわかれば全てのキーが推測可能になります。対策として、ソルトを足してやることが大切です。
また、パスワードに関しては、ソルトを使ったとして「よく使われるパスワード」であれば同じハッシュ値が生成されてしまいます。このときはユーザ名など、キー固有の値をソルトに使うことで推測を困難にさせることができます。
レッドハット系ソフトウェア最新解説 コンテナを使ってみよう
Red Hat Summit2017が7月にあり、OpenShiftが注目を浴びたとのこと。OpenShiftとは?
Docker、kubernetesの上にのるコンテナプラットフォームのようです。
http://jp-redhat.com/openeye_online/column/omizo/4093/
おわりに
雑誌ははやく読んで、インプットの入り口にしないといけない。買うはいいけどためがちなのではやめの消化を今後も心がけたい。