Edo::World::Blog

〜Linux/Solaris関連の作業メモ〜

[Ruby] 配列内の値の出現回数をカウント

重複の有無を確認

1ならば全て重複した値

arr.uniq.size

重複数をカウント

参照元:http://takuya-1st.hatenablog.jp/entry/20100103/1262486833

arr = [1,2,3]
arr.size - arr.uniq.size   # => 0  重複無しの場合は0を返す
arr = [1,2,3,1,2]
arr.size - arr.uniq.size   # => 2  2つの文字が重複した状態
arr = [1,2,3]
arr_2 = [1,2,3,1,2]
(arr - arr_2).empty?   #=> true

arr = [1,2,3,4]
(arr - arr_2).empty?   # => false
arr - arr_2          # => 4
(arr_2 - arr).empty?    #=> true


[より効率的な方法]

arr.uniq.select{|i| arr.index(i) != a.rindex(i)}

ハッシュにして返す

class Array
  def count
    k = Hash.new(0)
    self.each{|x| k[x] += 1 }
    return k
  end
end

arr = %w{ foo bar baz foo baz }
items = arr.count
puts items  #=> {"foo"=>2, "bar"=>1, "baz"=>2}

items.each do |k, v|
  puts "#{k} : #{v}"
end
# =>
# foo : 2
# bar : 1
# baz : 2

puts items.keys
# =>
# foo
# bar
# baz

[Vim] 検索時のハイライトを消す

:noh

[Python] pyenvインストール(外部ネットワーク無いローカル作業)

memo

続きを読む

[Linux] macアドレス変更(ワンライナー)

メモ

続きを読む

[Linux][Mac] ssh鍵作成(nopass)

パスワード無しで鍵認証させる

鍵の作成

$ ls -ld .ssh 2> /dev/null || mkdir -m 700 .ssh
$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_`whoami`_`uname -n` -N ''  -C "`whoami`@`uname -n`"
$ ls -l .ssh/
total 16
-rw-------  1 hoge staff  1675 Oct  6 10:24 id_rsa_hoge_air.local
-rw-r--r--  1 hoge staff   396 Oct  6 10:24 id_rsa_hoge_air.local.pub
$ mv  id_rsa_hoge_air.local identity

リモートホストに公開キーを登録

※リモートホストにssh接続できない場合はその他手段で

$ ssh <リモートホスト> ls -l ~/.ssh/authorized_keys 
$ cat ~/.ssh/id_rsa_`whoami`_`uname -n` -N ''  -C "`whoami`@`uname -n`.pub" | ssh < リモートホスト名> cat >> ~/.ssh/authorized_keys'

[Mercurial] gitとのコマンド差異

[Ruby] chef-solo その3(ohai)

続きを読む

[Ruby] chef-solo その2

続きを読む

[Ruby] chef-solo その1

chefの管理対象ホストでジョブを実行するところまで

続きを読む

[Ruby] chef-solo その4

ユーザ・グループ作成

ユーザに指定するパスワードはハッシュ化する必要あり

$ openssl passwd -1 'hogehoge'
$1$U5pWHk/D$fipXY8Dwj.BTuZZtn3pe//

レシピを追加

$ vi site-cookbooks/build/recipes/default.rb
# 以下の行を追加
group 'dev' do
  group_name 'dev'
  gid        1000
  action     [:create]
end

user 'ope' do
  uid        1000
  group      'dev'
  home       '/home/ope'
  shell      '/bin/bash'
  password   '$1$U5pWHk/D$fipXY8Dwj.BTuZZtn3pe//'
  supports :manage_home => true        ※ユーザ作成時にホームディレクトリを作成
  action     [:create]
end

[実行結果]

$ ssh foo "id ope"
uid=1000(ope) gid=1000(dev) 所属グループ=1000(dev)


既存groupにユーザを追加

group 'wheel' do
  action :modify
  members ['ope']
  append true
end


ディレクトリを作成

$ vi site-cookbooks/build/recipes/default.rb
# 以下の行を追加
directory '/var/myspool' do
  owner 'ope'
  group 'dev'
  mode  '0755'
  action :create    ※削除する場合は":delete"を指定
end

[実行結果]

$ ssh foo "ls -ld /var/myspool/"
drwxr-xr-x 2 ope dev 4096  9月 25 11:36 2013 /var/myspool/


変数で指定する場合

普通にrubyの文法が利用可能

dirname = 'testdir'

directory "/var/#{dirname}" do
  owner 'ope'
  group 'dev'
  mode  '0755'
  action :create
end


ファイルを配布

$ vi site-cookbooks/build/recipes/default.rb
# 以下の行を追加
cookbook_file "/var/myspool/testfile" do
  owner 'vagrant'        ※owner,group指定が無い場合はroot/rootの所有者となる。
  group 'vagrant'
  mode 00644
end
$ echo 'test' > site-cookbooks/build/files/default/testfile
$ knife solo cook foo

[実行結果]

$ ssh foo "ls -l /var/myspool/"
合計 4
-rw-r--r-- 1 ope dev 5  9月 25 11:36 2013 testfile
プロフィール

edworld

記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

livedoor 天気
  • ライブドアブログ