柿食えば 屁をしても一人

電気系の学生のブログ。何を書くかも決めていない

他のサーバのユーザの情報を別のサーバに移植する

複数のサーバを運用していて、追加したり、OS更新したりして、ユーザの再登録が必要になった時に、全自動とは言えないけど、半自動で行う(行った)方法。
PWが初期化されるのはしょうがないものとする。

コピー元のサーバalpha、コピー先のサーバbravoとしてやる。

ユーザー一覧の取得
cat /etc/passwd

ユーザとuidとgidの一覧が出てくる。

cat /etc/passwd | grep "gid"

gidで選べば、ほしいユーザの一覧がもらえる。(grepはor,andできるのでなんとかしよう)
それを、txtファイルに流し込む。

cat /etc/passwd | grep "gid" >list.csv
データの加工

任意のエディタで":"を","に変換する。(":"を","に変換するのをパイプラインでやったほうがいい)。
excelで開いて、ユーザ名とuid,gidだけを残し、1列目からそれぞれ、ユーザ名、uid, gidで保存。何も書かなくて良いけど4列以上書く(理由は後述)

スクリプトの作成
#!/bin/bash
csvfile=hoge.csv
for line in `cat ${csvfile} | grep -v ^#`
do
    user=`echo ${line} | cut -d ',' -f 1`
    pass=`echo ${line} | cut -d ',' -f 1`
    uid=`echo ${line} | cut -d ',' -f 2`
    gid=`echo ${line} | cut -d ',' -f 3`
    eval useradd ${user} -g ${gid} -u ${uid}
    expect -c "
    spawn passwd ${user}
    expect \"New password:\"
    send -- \"${pass}\n\"
    expect \"Retype new password:\"
    send -- \"${pass}\n\"
    expect \"passwd: all authentication tokens updated successfully.\"
    send -- \"exit\n\"
    "
done

参考というかコピペ
対話式のコマンドをスクリプト化する方法 - Qiita

このスクリプトをrootで実行すればすべてのユーザを移動できる。

Tips
  • echoでspritしているときにgidに数字+改行コードが混ざってしまい落ちる(n敗)。それを簡単に防ぐには1つダミーの列を追加するのが良い。
  • LDAPとかRadiusとかの認証サーバの必要性を強く感じた。

カメラ用の三脚を買いました。【Mactrem 大型アルミ三脚CT62 ORENGE】

あけまして、おめでとうございます。今年もよろしくお願いします。
自分へのお年玉ということで、一眼レフ用の三脚を買いました。
結構リスキーな買い物をした、と思ったのでレビューを書きます。

続きを読む

C# でpair をdouble で整列【備忘録】

自作クラスPairをdoubleでソートしたいと思っていたが、
doubleの比較のやり方がわからないので引き算してバブルで書いていた。

扱う件数が300ぐらいになってしまい、バブルがボトルになってしまって辛かったがやり方が見つかった。良かった。
CompareToの使い方を知らなかっただけ、といえばそれまで。


ideoneっていつまで消えないのかしら…

using System;
using System.Collections.Generic;
public class Test
{
	public static void Main()
	{
		var list= new List<Pair<int,double>>();
		var random = new Random();
		for(int i=0;i<20;i++){
			list.Add( new Pair<int,double>(i+1,random.NextDouble()));
		}
		foreach(var item in list){
			Console.WriteLine("{0}:{1}",item.First,item.Second);
		}
		list.Sort((a,b) => a.Second.CompareTo(b.Second));
				foreach(var item in list){
			Console.WriteLine("{0}:{1}",item.First,item.Second);
		}
	}
}

public class Pair<T, U>
    {
        public T First;
        public U Second;
        public Pair()
        {

        }
        public Pair(T first, U second)
        {
            this.First = first;
            this.Second = second;
        }

        internal object Clone()
        {
            return MemberwiseClone();
        }
    }

GAで巡回セールスマン(TSP)を解く【神饌コード】

こんにちは

ToMです。昨日は寒く、今日はなかなかに暑いという体調を崩しがちな天気ですが皆さんいかがお過ごしでしょうか。 僕はLab.に出勤して趣味コーディング中です。

TSP using GAについて

初音ミク2017誕生祭神饌コード企画で書いていた、GAでTSPを解くプログラムが形になりました。

続きを読む

GA(遺伝的アルゴリズム)でTSP(セールスマン巡回問題)を解く【神饌】

背景

今日、08/31/2017は初音ミクの誕生日です。 初音ミク誕生祭2017に参加したいが、絵もかけないし、曲も作れない! 困った私は、プログラムを書いてそれをもってミクさんに感謝を捧げることにしました。

ミクさん、お誕生日おめでとう!この10年の歩みは、ミクさんと一緒でした。 次の10年もまた、ミクさんと歩んで行きたいです。

動くにはうごくが、計算リソースが足りなくて有意なコードかどうかを判定できないので、解説は後日。 (大学のサーバーがうまく動かない…)

github.com

Windows, Linuxのどちらでも動きますが、dotnetのインストールが必要です。

WindowsでC/C++を書こう(Bash on Ubuntu & Code)

Windowsユーザの皆さん。こんばんは。
WindowsC/C++ (以下Cとする)を書いている皆さんに、環境どうしているか聞いたところ、2人がlinuxをブートしてると答え、1人がVisualStudioでコンパイルしてると答え、残りの一人が、ideoneでやってると答えておりました。
かくいう私も最近まで、ideoneで書いておりましたが。

WindowsでCをコンパイルしようとするとMINGWがありますが、控えめに言って導入がめんどくさいです。Macなんて端末でちょいちょいやればすぐ通りますWindowsでも同じぐらい簡単に導入できないか、考えた結果、それなりに簡単に導入できたのでご報告致します。

続きを読む

ゲール-シャプレイ (Gale-Shapley) アルゴリズム

詳しいことは言えないのですが、Gale-Shapleyアルゴリズムを使う日が来てしまったらしいので、それについて簡単に解説。

Gale-Shapleyアルゴリズム(以下、G-Sアルゴリズム)は、安定マッチングとして有名らしい。僕ははじめて知りました。

ペアを安定してマッチングさせるアルゴリズムで、男女のペアを例にして説明されているみたい。


  • 男性優位のマッチングと女性優位のマッチングがある。(今回は男性優位)
  • 参加者全員が、選好順序のリストを用意する必要がある。

手順はこう。

  1. 男性は、最も好きな女性に求婚する。
  2. 女性が独身なら、ペアが成立する。
  3. 女性が既婚の場合、今の相手(男性’)の方が準位が高い場合、その男性を振る。
  4. 女性が既婚の場合、男性の方が男性'より順位が高い場合、男性'を振り、男性と結婚する。
  5. これをすべての男性が既婚になるまで、繰り返す。

非常に発振しそうなアルゴリズムなんだけどO(n^2)で実行可能というからすごい。

作ってみた。正直くっそがばがばであるが、安定にマッチングできているので良いとする。
どう見ても計算量はO(n^2)である。
github.com

確かに安定にマッチしていると思う。
Windowsユーザーしか試せないので、スクショを何枚か貼っておく。
f:id:snowytom:20170212182759p:plain

f:id:snowytom:20170212182924p:plain

ちかれた。クズ記事でブログ更新AC