雑草SEの備忘録

東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

Linuxのユーザーまわりの備忘録

Linuxのユーザー一覧を見る

less /etc/passwd

特定のユーザーの権限だけを見たい場合

$ getent passwd webapp
webapp:x:496:494::/home/webapp:/sbin/nologin

$ getent passwd ec2-user
ec2-user:x:501:501:EC2 Default User:/home/ec2-user:/bin/bash

ログインシェルに/sbin/nologinと指定してある場合、ログインすることができない。ログインしようとすると、This account is currently not availableが表示される。

$ sudo su - webapp
最終ログイン: 2019/05/07 (火) 07:20:07 JST日時 pts/0
su: warning: cannot change directory to /home/webapp: そのようなファイルやディレクトリはありません
This account is currently not available

ログインできないユーザーでコマンドを実行したいとき

sudo -uを使う。

$ sudo -u webapp whoami
webapp

PumaのThread数を確認する

pumaのプロセスIDを確認する

$ ps aux | grep puma
healthd   2215  0.0  1.9 814768 39676 ?        Ssl  Feb26   2:41 puma 2.11.1 (tcp://127.0.0.1:22221) [healthd]
root      4816  0.0  0.1  58788  2744 ?        Ss   20:13   0:00 su -s /bin/bash -c bundle exec puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
webapp    4857  1.8  1.2 108468 25296 ?        Ssl  20:13   0:00 puma 3.12.0 (unix:///var/run/puma/my_app.sock) [current]
webapp    4860 17.6  5.9 1347812 119492 ?      Sl   20:13   0:03 puma: cluster worker 0: 4857 [current]
webapp    4864 17.3  5.7 1345368 114504 ?      Sl   20:13   0:03 puma: cluster worker 1: 4857 [current]
ec2-user  4918  0.0  0.1 110536  2204 pts/0    S+   20:13   0:00 grep --color=auto puma

/proc/プロセスID/statusを見る

$ grep Threads /proc/4860/status
Threads:    17

CapybaraでのJavaScriptのconsole.logを見る方法

確認したい箇所で、puts page.driver.browser.manage.logs.get(:browser) を記述。

fill_in 'order[family_name]', with: '佐藤'

puts page.driver.browser.manage.logs.get(:browser)

expect(page).to have_field('order[email]')

ただし、JavaScript側でconsole.logだと表示されない。この場合、console.warnconsole.errorを用いる。

const successFn = (r) => {
  console.warn("sample text")
}
//=> WARNING 2018-11-17 18:32:32 +0900: http://127.0.0.1:54321/assets/packed/sample_json-a01eb4d84f09eb434050cd758dafbf3bf1451fe65aaea47dc1bf95754c1b6dc2.js 38037:14 "sample text"

未経験者がネットワークスペシャリスト試験に合格するまでの道のり

12月21日は平成30年度のネットワークスペシャリスト試験の合格発表の日でした。
高度試験は、概ね合格発表の週の火曜日に解答例が発表され、私はすでに自己採点をしていました。
成績は、以下でした。

f:id:smartenergy:20181230181322p:plain
ネットワークスペシャリスト試験の成績

午後Ⅱが60点で本当にギリギリの点数での合格でした。1点で合否が分かれるので資格試験とは怖いものです。
個人的には午後IIの方が午後Iよりできた気がしました。午後Iが受かっていれば合格できているだろうと。しかし、結果を見ると午後IIの方が悪かった。もしかしたら、午後IIは途中退室したのがよくなかったかもしれません。途中退室するしないで採点が別れるとは考えにくいですが、できれば途中退室せずに最後まであがくことをお勧めします。


実は、この試験、今年で3回目の挑戦でした。2014年の秋に基本情報、2015年の春にデータベーススペシャリストを1回の受験で合格したのち、2016年、2017年とネットワークスペシャリスト試験を受けてきましたが、受かることができていなかったので、今年こそは何としても合格したいと思っていました。
私はエンジニアとして働いていますが、もともとは情報系ではないので情報系の素養はゼロ。その中でこの業界で働いていくためには、こうした資格を取得することで外部に対して自分の基礎スキルをアピールしていかなければなりません。データベーススペシャリストとネットワークスペシャリストを取ったことで、IT技術者として最低限のレベルにはあるということを示せたのではないかと思っています。

ネットワークスペシャリストの勉強にあたってはだいぶ遠回りをしてしまいました。
データベーススペシャリスト試験では、ICTワークショップシリーズの参考書で勉強したので、2年前は同じようにこちらの本を購入しました。

情報処理教科書 ネットワークスペシャリスト 2018年版

しかし、この本は、基礎編と応用編に分かれており、基礎編はWebのPDFでの提供。紙媒体で読むことを好む私にはまったく合いませんでした。特に、ネットワーク未経験者ですので、基礎からきっちりと学びたいので紙媒体での提供は必須です。(書き込みなどをするため)

1年目はこの本と過去問だけで挑み、撃沈しました。
2年目で手にしたのが、ネスペの基礎力という本です。

この本は、題名の通り基礎から解説してあります。また、2年目の私は少しは知識はついていたので、この本により、断片的な知識をより体系的に学ぶことができました。ネスペの基礎力は、本文中に適度に問や過去問もあり、考えながら理解できるようにしてあるところも良いところです。
基本情報処理に合格する程度のネットワークの知識がある人は、最初はこの本から入っても良いでしょう。
ただし、とはいうものの、ネットワークの知識自体を体系的に記述するのが難しいということもあり、この本を読んでも理解が十分にできない箇所もあります。このあたりについては、私自身、Qiitaの記事などで今後公開していければいいなと思っています。

調べてみると、ネスペの基礎力の著者である、左門至峰さんは、ネスペ、セキュスペ界隈では有名な人でブログや多くの書籍などでネスペ、セキュスペの勉強法について解説しています。

本屋で立ち読みした中でも、過去問の解説が一番しっくりきたので、左門至峰さんの過去問の解説本を買い、過去問についてはこちらで勉強しました。

ネスペ 29 魂 -ネットワークスペシャリストの最も詳しい過去問解説

(平成28年度に関しては、前述のネスペの基礎力にて解説)
ネスペ 27 礎 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

ネスペ 26 道 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

過去問を解いた量は、基本的に毎年、5年分を1周ずつ解きました。すなわち、3年間では5年分を3周したことになります。左門さんの書籍の中にも過去4年分を3回解くといったことことが書かれているので、最初の年から5年分を3回解くことができればもっと早く合格できたかもしれません。
とはいえ、データベーススペシャリストを取得した時はSIerに所属しており、比較的時間に余裕があり業務時間中も勉強をしていたりしたのに比べ、ベンチャーへ転職してからは常に人手不足で勉強する時間が土日(土日も休日出勤などで片方が潰れる)しかとれないという状況ではなかなか集中的に勉強する時間はとれませんでした。
優秀な人であれば効率よく勉強できたりするのかもしれませんが、要領の悪い私にはこの勉強量では厳しかったのだと思います。

ネットワークスペシャリストを受ける前までは、「マスタリングTCP/IPを一通り読むだけで合格できる」などといった人もいましたが、よくよく考えれば彼は情報系の学部出身で、素養があったのだと思います。情報系の知識未経験者が社会人になってから勉強するには、ネットワークはなかなか難しいです。
データベーススペシャリストとの決定的な違いは、ネットワークスペシャリストの方が覚える量が圧倒的に多いということです。多くのアルファベットの略語が出てきます。似たような概念の言葉が出てきて、それぞれ微妙にカバー範囲が違ったりします。そうした内容を一つ一つ理解していくにはそれなりに経験や時間がいるのだということだと思います。

私がデータベーススペシャリストやネットワークスペシャリストの資格を取る大きな理由は、未経験の分野でも過去問を解くことで疑似体験できるということです。データベーススペシャリストをとったときは、データベース設計なんて業務でしたことがありませんでした。しかし、過去問でこういう業務の時にこういうデータベース設計をするということを学びました。
ネットワークスペシャリストも同じです。ネットワーク設計なんて今までしたことがありませんが、過去問で例をたくさんみることで、ネットワーク設計の感覚をつかむことができます。もちろん、試験に出てくるような設計は滅多にしないという意見もあるかもしれません。現場ではネットワークスペシャリストを持っていない人の方が多いのだから、シンプルに設計すべきということもありえます。
しかし、現場でもっといい設計を思いつきやすくなったり、リードしていけるのは資格を持っていない人より持っている人です。持っていることに損はありません。

また、今後エンジニアとしてシニア層になっていって優秀な若手が台頭してきてそうした資格を持っていたらどうでしょう。現場での経験は豊富だといっても、資格を持っていなければその経験が本当に理論に裏打ちされたものなのか、オレオレ理論で設計してきたのかはわかりません。資格よりも実務の方が大事だという人に言いたいのは、もしその経験が本物であれば、勉強することなく資格試験に受かるはずだということです。中途半端な知識で物事を語っているのであれば、資格試験に合格することはできません。自分の言葉の説得力を高めるために資格の力を借りることは良いことだと思います。

以上、未経験者がネットワークスペシャリスト試験に合格するまでの道のりでした。

Goならわかるシステムプログラミング 14.2.9のReactiveXでpackageのインストールし忘れがち問題

前々回の記事に引き続き、Goならわかるシステムプログラミングの写経を行なっています。



Goならわかるシステムプログラミング

  • 作者: 渋川よしき
  • 出版社/メーカー: Lambda Note
  • 発売日:2017/10/19

何も考えず実行すると、こんな形でエラーが出てきます。

main.go:9:2: cannot find package "github.com/reactivex/rxgo/observable" in any of:
	/usr/local/Cellar/go/1.10.3/libexec/src/github.com/reactivex/rxgo/observable (from $GOROOT)
	/Users/username/go/src/github.com/reactivex/rxgo/observable (from $GOPATH)
main.go:8:2: cannot find package "github.com/reactivex/rxgo/observer" in any of:
	/usr/local/Cellar/go/1.10.3/libexec/src/github.com/reactivex/rxgo/observer (from $GOROOT)
	/Users/username/go/src/github.com/reactivex/rxgo/observer (from $GOPATH)

これは単純にpackageがインストールされていないだけで、

go get -u github.com/reactivex/rxgo

を実行すればエラーが解消されるはずです。

RactiveXのREADEMEに書いてある通りですね。

github.com

vimの置換(%s)で全角数字を半角数字に変換する方法

例えば、とある電気料金の基本料金が次の様になっていて、全角では使いにくいので半角に変換したい。

291円60銭
437円40銭
583円20銭
874円80銭
1,166円40銭
1,458円00銭
1,749円60銭

まず、円や銭やカンマを置換する。パイプ(|)で繋げられる。このとき、`g`の次に`e`とするとエラーを抑制できる。

:%s/円/./ge | %s/銭//ge | %s/,//ge

同様に考えて、一気にパイプでつなげていく。

:%s/0/0/ge | %s/1/1/ge | %s/2/2/ge | %s/3/3/ge | %s/4/4/ge | %s/5/5/ge | %s/6/6/ge | %s/7/7/ge | %s/8/8/ge | %s/9/9/ge

正規表現等を使い、もう少しスマートなやり方がありそうなものだが。