反省点を踏まえて(Mo-ikutsuneruto Calender)
どうもこんにちは!
僕は12月1日からソロアドベントカレンダーと題して、毎日ブログを更新しようとしていました。
ですが、実際は11日目にしてブログの更新は止まりました。
改めて考えてみたのですが、そもそも25個もネタがありません。
25日連続でブログを書くなんてとてもしんどいです。
ってことで、開き直りと反省をバネに
もういくつ寝るとカレンダーを開始します。
Mo-ikutstuneruto calender(和製)
もういくつ寝ると、お正月〜
12月31日まで毎日ブログを更新して1月1日は9時にうるう秒を眺めて2度寝でも決め込みたいものです。
さっそく今日の記事後ほど投稿しよう!!
反省点を踏まえた結果(非技術)
こんにちは
Mo-ikutsuneruto Calender 1日目の記事です。
すら書くことのできないクズ野郎ということが判明しました
見てる人は少ないだろうが、それでも謝罪します。
すいませんでした。
書かなかったことにびびって自分のブログのURLにすらアクセスできませんでした。
これからは開き直って、ちょうど良い頻度でブログを更新します。
manのセクションとmanファイル(11日坊主)
- この記事はsolo_advent_calender 2016年12月11日のものです。
こんにちは ショート advent calender11日目です。
manで気になったことがあったので調べた結果です。
普段コマンドのことで分からなかったことがあったらman
使ったら良いっていう認識でサーバー触ってます。
ではそのmanのファイルはどこにいるのでしょう
どうやら$MANPATH
にmanファイルが置かれているディレクトリがありそう。
echo $MANPATH
謎の空白が帰ってきた。これはちょっとわからない。 一度置いといて
manの設定は/etc/man.config
書いてあります。
そこに
MANPATH /usr/share/man
という記述が!とりあえず移動
cd /usrshare/man
このディレクトリの中にen
やko
やja
がありました。
私の環境では日本語でmanが表示されているので
cd ja ls man1 man2 man3 man4 man5 man6 man7 man8 man9
さらにディレクトリが9個もある。。。
どれをみれば設定ファイルがあるんだ?何の数字?
結論からいうとこの数字はセクションの数字です。
セクションとは、ドキュメントの内容の分類だそうです。
セクションの数字の対応表
Linuxコマンド集 - 【 man 】 オンライン・マニュアルを参照する:ITpro
このページで記されてますので参考にします。
そしてmanコマンドで
コマンドのセクションは何番と何番があるのかというのは
man -f <コマンド>
で確認することができます。たとえば
$ man -f passwd passwd (1) - update user's authentication tokens passwd (5) - password file
というふうに表示されます。
そして
$ cd man5 $ ls | grep passwd passwd.5.gz
やはりmanの5番目のディレクトリにpasswd関係のファイルがありました。
ですが、gzip形式で圧縮されているようです。
これを展開して中身を見たい気持ちはありますが、今日はここまで。
PS. manの6番目のセクションはゲーム
らしいのですが、man6
に格納されている.gzファイル名でmanを実行するとゲームの説明がみれることに気づきました。
ここも深くみていきたいものです。
Linuxのバッククォート(10日坊主)
- この記事はsolo_advent_calender 2016年12月10日のものです。
こんにちは ショート advent calender10日目です。
本来は土曜日にあげるはずだったやつです。
これの続きで、 シングルクォート、ダブルクォートときたらバッククォートですよね
コマンドをバッククォート``
で囲むとコマンドの実行結果が展開される。コマンドの標準出力を変数に代入したりできます
$ today=`date` $ echo date #バッククォートで囲まないとただの文字列だと認識する date $ echo $today 2016年 12月 10日 土曜日 23:42:15 JST $ hoge=neko $ echo '$hoge' is "$hoge" $hoge is neko $ pure=`echo '$hoge' is "$hoge"` # 変数pureに` $hoge is neko` を代入 $ $pure -bash: $hoge: コマンドが見つかりません #$pureには`$hoge is neko` が入っているので$hogeがコマンドとして入力される $ echo $pure hoge is neko
$ $pure
の部分で$hogeコマンドを実行しようとして、失敗しているが、
$ $hoge
を実行すると
-bash: neko: コマンドが見つかりません
となります。普通に$hogeを呼び出すと変数hogeに入っているnekoが実行されるのに、なぜ$hoge
コマンドを実行しようとしたのか。
echo でシングルクォートで囲って出力したものは、見かけ上では分からないが文字列ということになってそう
$ '$hoge' -bash: $hoge: コマンドが見つかりません
という結果になる。変数の$hoge
は知っているが、文字列の$hoge
は知らないという感じですね。
実際にデータがどのように認識されているのかを調べる方法を調べよう
Linuxのシングルクォートとダブルクォート(?日坊主)
- この記事はsolo_advent_calender 2016年12月9日のものです。
こんにちは ショート advent calender9日目です。
金曜日に書き忘れ、土曜日にまとめて書こうと思っていると、土曜日も気づいたら終わっている。そんなことありますよね。
はい。
シングルクォート''
の場合は単純に文字列として出力する。
ダブルクォートは""
の場合は変数展開してくれる。です
$ hoge=neko # 変数hogeに文字列nekoを入れる $ echo hoge hoge $ echo $hoge # 変数を表示するには先頭に$をつける neko $ echo '$hoge' # $hogeを文字列として表示 $hoge $ echo "$hoge" #変数を展開して表示 neko $ echo "I love $hoge" # 文字列に変数を埋め込む I love neko $ echo '$hoge' is "$hoge" # $hoge is neko
色んなshell(8日坊主)
- この記事はsolo_advent_calender 2016年12月8日のものです。
こんにちは ショート advent calender8日目です。
shellには様々な種類があるそうです。
僕は普段bashを使っています。bashは多くのlinuxディストリビューションで標準のshellとなっているようです。
普段bashを使っていますといいましたが、bashをbashとして意識したことがありませんでした。ITに触れ出した時からbashでした。エンジニアとして生まれた時からbashだったんです。
東京で生まれた赤子が東京で過ごしていて、東京で過ごしている認識がないようなものです。ちょっと前に神奈川や千葉を知ったのです。そして今神奈川と千葉の事を調べようとしているのです。
大阪で生まれた赤子が大・・・
ということで、色々なshellについてしらべました。
まず列挙すると
色々なshell
*shell名 | *コマンド |
---|---|
Bourneシェル | sh |
Bourne Again shell | bash |
Cシェル | csh |
tcsh | tcsh |
Kornシェル | ksh |
Zシェル | zsh |
それぞれの特徴(ソフトタッチ)
- sh
初代シェルはBourneシェル
ことsh
。UNIXの標準的なシェルです。
shの改良版。Linuxディストリビューションの標準的なシェル
cshの改良版。特にユーザーインターフェイスの部分を中心に拡張されたシェル
コマンド行をWYSIWYG風の方法で編集することができる。などshの完全上位互換
と簡単にまとめるとこんな感じ(Wiki Pediaより抜粋)
見る感じkshにbashやtcshの機能を取りれたzshってのが一番すごそう!
bashからzshに移行する日は来るのだろうか。メリットを理解して良さそうならzshを普段使いしていこうとおもいます!
遊べる、飲める、買い物できるで
zshが梅田みたいな感じっぽいですね。路線図的にもJRでもいける、御堂筋線でもいける。
僕はこれから梅田に活動拠点を変えようとしている若者の気持ちです。
ansibleで多重ループ subelements編 (7日坊主)
- この記事はsolo_advent_calender 2016年12月7日のものです。
こんにちは ショート advent calender7日目です。
今回は6日目で軽くふれていたansibleのloop構文with_subelements
を使っていきます。
公式サイト Loops — Ansible Documentation
まずはvarsファイルを用意します。
# group_vars/all yum_list - state: present package: - vim - unzip - state: latest package: - nginx - bind-utils
以前の記事とは違い一つのディクショナリを用意するだけで大丈夫そうです。 JSONだと
{ yum_list: [ { state: present, package: [ vim, unzip ] }, { state: latest, package: [ nginx, bind-utils ] } }
こういう感じです。
yumモジュールで vim
と unzip
はstateをpresentで実行しnginx
とbind-utils
はstateをlatestで実行するようになる予定です。
それに対応したtaskがこちら
# tasks/main.yml --- - name: install by yum yum: name={{ item.1 }} state={{ item.0.state }} with_subelements: - "{{ yum_list }}" - package
with_subelements
は与えられたリストを順に展開し,ネストされたリストのキーを判定しその値を使います。
展開して取り出した値を扱いたい場合は {{ item.0 }}
{{ item.1 }}
のように与えた順に指定します。
流れを書くと
まず
- state: present package: - vim - unzip
で一回目のloopでこの値を渡します。
次に、 {{ item.1 }}でpackageの中身であるvim
とunzip
を順に取り出します。
{{ item.0.state }} でstateのpresentが取り出されれます。
上記のpackageのループが終わると
- state: latest package: - nginx - bind-utils
の値を渡します。
実行結果は以下のようになりました
TASK [loop_test : install by yum] ********************************************** ok: [vagrant] => (item=({u'state': u'present'}, u'vim')) ok: [vagrant] => (item=({u'state': u'present'}, u'unzip')) ok: [vagrant] => (item=({u'state': u'latest'}, u'nginx')) ok: [vagrant] => (item=({u'state': u'latest'}, u'bind-utils'))
ネストされているものでループしたいときはこのようにwith_subelements
を使うのが良いでしょう
以上