Skip to main content

Posts for year 2017 (old posts, page 1)

sqlite

SQLiteはRDBMSのデータベースエンジン。サーバではなくライブラリで、とても小さく軽量。

ここでは コマンドラインインタフェース sqlite3 の利用について記載する。

データベースファイルを指定して起動

sqlite3 database.db
-column 左寄せのカラム形式で表示
-header 列の見出しを表示

コマンドラインでSQL実行

sqlite3 database.db 'SELECT count(*) FROM mytable;'

echo 'SELECT count(*) FROM mytable;' | sqlite3 database.db

cat << quit | sqlite3 database.db
SELECT count(*) FROM mytable;
quit

sqlite3 database.db < filename.sql

主なメタコマンド

データベースファイルの確認

.databases

存在する表の確認

.tables

表のDDLの確認

.schema

表のインデックス名の確認

.indices 表名

DDLとデータ内容をSQLでダンプ

.dump [表名]
表名を省略すると全てのテーブルが対象。

ファイルに記載されたSQLを実行

.read ファイル名

CSV形式で表示

.header on
.mode csv
.output ファイル名
SELECT * FROM ...;
.output stdout

CSVファイルの内容を表へインポート

.import database.csv mytable

データベース全体のダンプとリストア

sqlite3 database.db .dump | gzip -c > database.dump.gz
zcat database.dump.gz | sqlite3 database_test.db
(ダンプはSQLなので、sqlite以外の環境へもリストア可能)

バックアップとリストア

cat >> test1.sql << END
SELECT count(*) FROM test;
.backup tmp.backup
DROP TABLE test;
SELECT count(*) FROM test;
.restore tmp.backup
SELECT count(*) FROM test;
END

dump sqlite3 and import to postgresql

$ sqlite3 database_test.db << quit
> .output dump.sql
> .dump
> quit
$ sed -i.bak -e '/^PRAGMA/ s/^/-- /' dump.sql
$ sudo docker run --rm -e POSTGRES_PASSWORD=mypassword -p 5432:5432 -d postgres:alpine
    $ sudo docker exec -i xxxxx psql -U postgres << quit
> CREATE USER dbuser;
> CREATE DATABASE dbuser;
> ALTER ROLE dbuser WITH PASSWORD 'dbuserpassword';
> GRANT ALL PRIVILEGES ON DABABASE dbuser TO dbuser;
> ALTER DATABASE dbuser OWNER TO dbuser;
    > quit
$ cat dump.sql | sudo docker exec -i xxxx psql -U dbuser

PostgreSQL on CentOS7

install

yum install postgresql-server
systemctl list-unit-files  -t service
systemctl is-enabled postgresql.service

start daemon

systemctl status postgresql.service
postgresql-setup initdb
systemctl start postgresql.service
su - postgres
psql -l

sql command operation

psql << END
\du
\q
END
psql -c "select * from pg_user"

create and drop user

\du
SELECT * FROM pg_user;
createuser -P ossdb
dropuser -i ossdb
CREATE USER ossdb LOGIN PASSWORD 'password';
DROP USER IF EXISTS ossdb;

create and drop database

\l
SELECT * FROM pg_database;
createdb -O ossdb -W ossdb
dropdb -i ossdb
CREATE DATABASE ossdb OWNER ossdb;
DROP DATABASE IF EXISTS ossdb;

connect

cat << END >> /var/lib/pgsql/data/pg_hba.conf
host    ossdb           ossdb           127.0.0.1/32            md5
END
systemctl reload postgresql.service
psql -U ossdb -d ossdb -h 127.0.0.1

create and drop table

\dit
\d table_name
CREATE TABLE t1 (
c1 integer,
c2 date,
c3 time,
c4 character,
c5 character varying(16),
c6 real,
primary key (c1), 
unique (c2, c3)
);
DROP TABLE IF EXISTS  t1;

nfs

$ service nfs-kernel-server status
nfsd running

$ service rpcbind status
rpcbind start/running, process xxx

$ rpcinfo -p <hostname>

export infomation

$ showmount -e
Export list for xxxxxx:
/mnt  192.168.1.2

client information

$ showmount -a
All mount points on yyyyyy:
192.168.1.1:/mnt
192.168.1.2:/mnt

allow

$ vi /etc/hosts.allow
portmap : 192.168.1.0/255.255.255.0

kvm virtualization

qcow2 イメージ

作成。

qemu-img create -f qcow2 image.qcow2 xxG

シュリンク。仮想マシンを止めて実行する。

mv image.qcow2 image.qcow2.bak
qemu-img convert -O qcow2  image.qcow2.bak image.qcow2

qemu-kvm コマンドのよく使うオプション

cdイメージから起動

-cdrom image.iso -boot d

cpuとメモリの指定

-smp 2 -m 2048

kvmでwindows10を使用する時、私の環境(Core i5 650)だと下記のように指定することで、cpu負荷が落ち着いた。

-cpu core2duo,+lahf_lm

その後、試行錯誤し、現在は下記の通り指定している。

-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time

(仮想)ストレージの指定。準仮想化ドライバを利用すると、スループットが上がるらしい。 (Windows等で利用する場合は、仮想マシン上でドライバを入れる必要がある。)

-drive if=virtio,file=image.qcow2

ネットワークインターフェースの指定(従来方式)

-net nic,macaddr=xx:xx:xx:xx:xx:xx,model=virtio
-net tap,ifname=vnet0

vncコンソールとキーマップの指定。

-vnc 192.168.xx.xx:xx -k ja

コンソールのマウスカーソルの位置がずれるときは以下を指定 (WindowsではCPU負荷が高くなるらしい)

-usbdevice tablet

デーモンとして起動

-daemonize

物理デバイスのパススルー

example

boot ultra lite linux distribution microcore linux for network configure test

kvm -drive if=virtio,file=linux-microcore-6.4.img -netdev tap,id=tap0 -device e1000,netdev=tap0,mac=52:54:00:12:34:56

openssh

openssh関連ツールについて。

ssh 鍵ペアの作成

ED25519を使うには比較的新しい環境が必要となる(TeraTerm、PuTTyでは既に対応済み) 鍵作成時に鍵長は指定できない(256ビット)。 (ssl証明書ではまだed25519に対応してない模様。ECDSAを使わないならRSAを使わざるをえない。)

ssh-keygen -t ed25519
ssh-keygen -l -f ~/.ssh/id_ed25519

sshサーバへ、公開鍵を転送

cat ~/.ssh/<pubkey> | ssh user@host 'cat >> ~/.ssh/authorized_keys'

known_hostsに登録されているsshサーバ公開鍵の確認と削除

ssh-keygen -F distname
ssh-keygen -R distname

recreate public key from private key

Once create pem format public key from private key. Then import it and output as openssh format key.

$ ssh-keygen -e -f id_rsa.testkey > id_rsa.testkey.pub.pem
$ ssh-keygen -i -f id_rsa.testkey.pub.pem > id_rsa.testkey.pub

接続時のオプション

ssh host
-l user
-v vervose messages
-i private key
-p port
-X # allow x11 forwarding
-L localport:remotehost:remoteport # local port forwarding
-R localport:remotehost:remoteport # remote port forwarding

example of port forwarding

local port forwarding to access remote rdphost
$ ssh username@remotehost -L 13389:rdphost:3389
$ freerdp /v:127.0.0.1:13389

remote port forwarding to allow rdp access
<localhost >$ ssh username@remotehost -R 13389:rdphost:3389
<remotehost>$ freerdp /v:127.0.0.1:13389

ssh ca

create ca certificate

$ ssh-keygen -t ed25519 -f ca.key

make client certificate (sign client public key with ca key)

$ ssh-keygen -s ca.key -I certificate-test -n username id_rsa.pub
$ ssh-keygen -L -f id_rsa-cert.pub

send public ca key to ssh server

$ scp -p ca.key.pub username@remotehost:/home/username

$ sudo mv ca.key.pub /etc/ssh/ca.key.pub
$ sudo chown root:root /etc/ssh/ca.key.pub
$ echo "TrustedUserCAKeys /etc/ssh/ca.key.pub" | sudo tee -a /etc/ssh/sshd_config

make host certificate (sign host public key with ca key)

$ scp -p username@remotehost:/etc/ssh/ssh_host_ed25519_key.pub ssh_host_ed25519_key.pub

$ ssh-keygen -s ca.key -h -I certificate-test ssh_host_ed25519_key.pub
$ ssh-keygen -L -f ssh_host_ed25519_key-cert.pub

send host certificate back to ssh server

$ scp -p ssh_host_ed25519_key-cert.pub username@remotehost:/home/username/ssh_host_ed25519_key-cert.pub

$ sudo mv ssh_host_ed25519_key-cert.pub /etc/ssh/ssh_host_ed25519_key-cert.pub
$ sudo chown root:root /etc/ssh/ssh_host_ed25519_key-cert.pub
$ echo "HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub" | sudo tee -a /etc/ssh/sshd_config

$ service sshd restart

add public key to known host

$ cat << EOF >> ~/.ssh/known_hosts
> @cert-authority *.example.com ssh-ed25519 ...(content of ca.key.pub)...
> EOF

.ssh/config

.ssh/config ファイルにあらかじめ設定を書いておけば、接続のたびにコマンドでいろいろ引数指定しなくてすむ。

以下の例の場合、ssh myalias と実行すれば ssh -l username -p 2222 -i ~/.ssh/I'd_RSA.foo my.example.com で接続できる。

ワイルドカード指定もできる。 以下の例の場合、*.example.net へ ssh するとき、 秘密鍵として ~/.ssh/id_rsa.bar が使われる。

Host myalias
    HostName my.example.com
    User username
    Port 2222
    IdentityFile ~/.ssh/id_rsa.foo
Host *.example.net
    IdentityFile ~/.ssh/id_rsa.bar

ms windows commands

カレントディレクトリの*txtに対して処理を繰り返して実行する

for /r . %i in (*txt) do type "%i" | sort
    バッチの中では%%のようにする。
    doの中の%iは、半角スペースを含むファイル名に展開される場合、ダブルクォーテーションで挟む。
    doの中にパイプを含むことができる。

複数のファイルを、指定したディレクトリに問い合わせ無しでコピーする。

xcopy /y *.txt distdir

ファイルのハッシュ値表示

certutil -hashfile ファイル名 [MD5|SHA1|SHA256]

base64エンコード/デコード

certutil -encode infile file.b64
    エンコードすると、pem形式のファイル(ヘッダ・フッタあり)が得られる。
certutil -decode file.b64 outfile
    デコードするファイルは、pem形式ではないものでOK。

シンボリックリンクの作成

コマンドプロンプトを「管理者で実行」で開いて実行
ディレクトリのリンクの作成と削除
mklink /d <link> <original>
rmdir <link>

共有ドライブのマウント、アンマウント

net use y:
net use y: \\server\share
永続設定 
net use y: \\server\share\dir /persistent:yes
net use y: /delete

date変数の部分文字列を切り出す例

set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2%

その他稀にしか使わないけど便利なコマンド

画面解像度

desk.cpl

ネットワーク接続

ncpa.cpl

送るメニューを開く

start shell:sendto

スタートアップを開く

start shell:startup

IME2010ユーザ辞書ツール

C:\Program Files\Common Files\microsoft shared\IME14\IMEJP\IMJPDCT.EXE

時刻同期

w32tm /query /status /verbose

ディレクトリバックアップバッチ例

if exist z:\. net use z: /delete
if not exist z:\. net use z: \\backupserver\backupvol
set logfile=c:\log\copyall.log
xcopy \usr z:\usr\ /D /E /H /C /Y /R >> %logfile%

CentOS7 basic operation

パッケージ更新

uname -a
yum check-update
yum update

chronyの設定

yum list chrony
ls -l /etc/chrony.conf*
cp -pi /etc/chrony.conf /etc/chrony.conf.000
ls -l /etc/chrony.conf*
diff -u /etc/chrony.conf{,.000}

systemctl status chronyd.service
ps -ef | grep chronyd | grep -v grep
chronyc sources
chronyc tracking
chronyc sourcestats
chronyc -a makestep

systemctl restart chronyd.service

サービスの自動起動設定と解除

systemctl list-unit-files  -t service
systemctl is-enabled chronyd.service

systemctl disable chronyd.service
systemctl enable chronyd.service

パッケージ削除と確認

yum remove chrony
yum list chrony

パッケージ導入

yum install ntp
yum list ntp

サービス起動

systemctl status ntpd.service
systemctl start ntpd.service

x window system tools

xmodmap

Xでキーマップのカスタマイズをするコマンド

[shift]+[ins]でペースト操作をしたいのに、自宅で使っているキーボードでは、[ins]が[fn]と[del]の同時押しになっている。 そんな時に、xmodmapを活用すると便利。

設定をファイルに書き込んでおいて、下記のようにロードする。

xmodmap ~/.xmodmaprc

xrandr

Xでディスプレイの表示解像度を変更するコマンド 表示するディスプレイの切り替えもできる。

使用可能なモニターと設定の表示

xrandr

「HDMI」モニターを、「VGA」モニターの右側に表示する

xrandr --output HDMI --right-of VGA

「HDMI」モニターへの表示を停止する。

xrandr --output HDMI --off

解像度の変更

xrandr --output HDMI --mode 1366x768

デフォルトへ変更

xrandr --output HDMI --auto

cpu governor on raspbian

configure cpu governor

cpu情報の確認

cat /proc/cpuinfo

cpuクロック関連ツール導入

apt-get install cpufrequtils

現在のクロックやガバナの表示

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

状態確認

cpufreq-info
cpufreq-info -p

ガバナの変更

cpufreq-set -g ondemand

os起動時のガバナの指定

cp -pi /usr/share/doc/cpufrequtils/examples/cpufrequtils.sample /etc/default/cpufrequtils
vi /etc/default/cpufrequtils

service cpufrequtils restart

Disable swap on raspbian buster

systemctl status dphys-swapfile

systemctl stop dphys-swapfile
systemctl is-active dphys-swapfile

systemctl disable dphys-swapfile
systemctl is-enabled dphys-swapfile

rm /var/swap

Use tmpfs

mount -t tmpfs tmpfs <mount point>

or

cat << END >> /etc/fstab
tmpfs           /tmp            tmpfs   defaults,size=256m,noatime,mode=1777  0       0
END
mount /tmp