【SQL Server】よく使う構文

SQL ServerSQL構文です。
使わないとすっかり忘れてしまうので、備忘録的に基本的な構文から掲載します。

バージョンとエディションの確認
SELECT @@VERSION;


登録
INSERT INTO テーブル名 (カラム名をカンマ区切りで列挙) VALUES (挿入する値をカンマ区切りで列挙);


更新
UPDATE テーブル名 SET カラム名1 = 更新値, カラム名2 = 更新値 WHERE 条件式


削除

3パターンあり。

▼DELETE

DELETE FROM テーブル名 WHERE 条件式;
  • テーブル内のデータを削除。条件指定すれば任意のデータのみ削除可能。
  • コミットしなければロールバック可能。

▼TRUNCATE

TRUNCATE TABLE テーブル名;
  • テーブル内の全データを削除。条件指定は不可。
  • 内部処理で「テーブルごと削除してから再作成」となる為、DELETEより高速。
  • ロールバック不可。

DROP

DROP TABLE テーブル名;
テーブルをデータごとコピー
SELECT * INTO コピー先のテーブル名 FROM コピー元のテーブル名 WITH(NOLOCK)


テーブル間の特定カラムをコピー
UPDATE コピー先のテーブル名
SET コピー先のテーブル名.対象カラム = コピー元のテーブル名.対象カラム
FROM コピー元のテーブル名
WHERE コピー先のテーブル名.キーカラム = コピー元のテーブル名.キーカラム


カラム追加
$ ALTER TABLE テーブル名 ADD カラム名 型


カラム定義変更
$ ALTER TABLE テーブル名 ALTER COLUMN カラム名 型


カラム名変更(SQL Server 2005 以降)

(例)ABC テーブルにある NAME 列を、USER_NAME に変更。

$ EXEC sp_rename 'ABC.NAME', 'USER_NAME', 'COLUMN';


カラム削除
$ ALTER TABLE テーブル名 DROP COLUMN カラム名


制約付カラム削除
$ ALTER TABLE テーブル名 DROP CONSTRAINT 制約名, COLUMN カラム名

iptablesの使い方

iptablesはIP パケットフィルタルールのテーブルを 設定・管理に使用するコマンドです。

ルール確認

$ iptables -L

ルール追加

$ iptables -A 追加したいルール

(例1)1分間に同じIPaddressから5回以上、TCPコネクションを繋げこようとしたパケットはそれ以降捨てる。

$ iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m limit --limit 5/min -j ACCEPT
$ iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j DROP

(例2)任意のチェインの任意の順番にルールを追加する。

$ iptables -I チェイン名 順番 -p tcp --dport http -j ACCEPT
$ iptables -I INPUT 5 -p tcp --dport http -j ACCEPT

ルール削除

$ iptables -D 削除したいルール

(例)ACCEPT tcp -- anywhere anywhere tcp dpt:http のルールがINPUTチェインにある場合。

$ iptables -D INPUT -p tcp --dport http -j ACCEPT

設定内容の保存

$ service iptables save

再起動

$ service iptables restart

telnetでメール送信

telnetコマンドで、SMTPサーバーの25番ポートへ接続し、メールを送信する手順です。

1. telnet起動

$ telnet サーバー名 又は IPアドレス 25


2. 接続元サーバー名を指定し通信開始

$ HELO 接続元サーバー名


3. メールの送信元を指定

$ MAIL FROM:送信元アドレス


4. メールの送信先を指定

$ RCPT TO:送信先アドレス


5. 本文の入力

$ DATA
$ From: Fromアドレス
$ Subject: タイトル


6. 通信終了

$ QUIT

Windows + VirtualBox (+ vagrant) で仮想マシンが起動できない

以前、某技術情報共有サービスに投稿した記事です。
そちらのアカウントを削除するにあたり、同じ内容をこちらに転記しました。
一部、加筆修正を行っておりますが、投稿当時(2014年)の情報をベースとしている点にご注意ください。

現象・問題点

Windows 7 + VirtualBox 4.3.14 (+ vagrant 1.3.5) の組み合わせにおいて以下のような現象が発生する場合がある。

仮想マシン"XXXXX(仮想マシン名)"のセッションを開けませんでした。

The virtual machine 'XXXXX(仮想マシン名)' has terminated unexpectedly during startup with exit code 1.

終了コード : E_FAIL (0x80004005)
コンポーネント: Machine
インターフェース: IMachine {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

仮想マシンvagrantからUbuntu(64bit)を構築した状況。

解決方法

VirtualBox 4.3.12 を使用する。

VirtualBox 4.3.14(2014年7月22日現在のWindows版最新ver)ではバグがあり動かないとの情報あり。 (情報元が公式ではないため真偽は不明だが、本件のように実際に発生例あり。) その為、ひとつ前のverを使用する事で一時的に解決。

VirtualBox 4.3.12 をダウンロード

(追記)
VirtualBoxのver別に本現象の解消と発生がまばらである模様。以下に報告をまとめ。
ver 4.3.15:解消
ver 4.3.18:本現象発生
ver 4.3.20:本現象発生
ver 4.3.30:解消

参考

本現象が発生時に vagrant up を実行すると以下のようなメッセージが表示される。

C:\Users\abc>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'precis64' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading or copying the box...
Extracting box...ate: 922k/s, Estimated time remaining: --:--:--)
Successfully added box 'precis64' with provider 'virtualbox'!
[default] Importing base box 'precis64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run \`vagrant up\` while the
VirtualBox GUI is open.

vagrantから見た)プロバイダ(本件の場合はVirtualBox)にGUIがある場合、そちらで確認した方がより有益な情報を確認できますよ。
といった内容のメッセージが表示される。

【Linuxコマンド】よく使うコマンド(3)

Linux環境で使用するコマンドの一覧です。
主にユーザ・アカウントに対する操作をまとめています。

rootに切り替え
$ su -


特定のユーザに切り替え
$ su - ユーザ名

「-」 (ハイフン) を付与しない場合、ユーザーの操作環境(※)を引き継ぐ。
(※)シェルの種類や環境変数、ホームディレクトリ等

root権限で実行
$ sudo -s

sudoの設定ファイルは絶対に直接編集しない事。必ず visudo コマンドで編集する。

sudo設定ファイル編集
$ visudo

下記のように修正

root ALL=(ALL) ALL
↓
root ALL=(ALL) ALL
%任意のユーザ名 ALL=(ALL) ALL

「%任意のユーザ名」の行を追加する事で、任意のユーザにsudoコマンドの実行を許可できる。

ユーザ確認
$ cat /etc/passwd

<例>
user:x:10000:10001:comment:/home/user/:/bin/bash
 user:ユーザ名
 x:「x」 という文字か、暗号化されたパスワード。「x」 はシャドウパスワード。
 10000:ユーザID
 10001:グループID
 comment: コメント (未入力の場合は何も表示されない)
 /home/user:ホームディレクト
 /bin/bash:ログインシェル名する

グループ確認
$ cat /etc/group

<例>
user:x:10000:user1
 user:グループ名
 x:「x」 という文字か、暗号化されたパスワード。「x」 はシャドウパスワード。
 10000:グループID (GID)
 user1:サブグループとして所属しているユーザーアカウントのリスト。複数の場合はカンマ区切り。

ユーザ作成
$ useradd -d /home/ユーザ名 -m ユーザ名

※ユーザ作成時にグループを設定する場合は、事前にグループを作成しておくこと。

ユーザ追加
$ useradd -u 550 -g グループ名 -d /home/ユーザ名 ユーザ名

 -d:ホームディレクトリを /home/ユーザ名 に設定
 -m:アカウントのホームディレクトリを同時に作成する
 -u:550 ユーザIDを550番で設定
 -g:グループ名 グループ名またはグループIDを設定
 -d:/home/newuser ホームディレクトリを/home/newuserに設定
 -m:アカウントのホームディレクトリを同時に作成する

ログインを許可しないユーザの追加
$ useradd -s /sbin/nologin ユーザ名


削除
$ userdel -r ユーザ名

 -r ユーザのホームディレクトリ内のファイルをホームディレクトリごと削除。
 ユーザのメールスプールも消去される。

パスワード変更
$ passwd ユーザ名


プライマリグループの設定
$ usermod -g グループ名 ユーザ名


サブグループの設定
$ usermod -G グループ名 ユーザ名
  • 既にサブグループに所属している場合、それらのグループ名を記述せずに上記のコマンドを実行すると、所属していたグループからは外されてしまう点に注意。
  • 複数指定の場合は 「,」 で区切る。

サブグループから外す
$ usermod -G '' ユーザ名


ユーザのホームディレクトリを変更
$ usermod -d /home ユーザ名


ユーザの名称を変更
$ usermod -l 新ユーザ名 現ユーザ名


ユーザのログイン履歴を表示
$ last

 -i:リモートホストからの接続情報を表示する場合、IPアドレスで表示。

ユーザ毎に最後にログインした日時を表示
$ lastlog


不正なログイン(失敗したログイン)を表示
$ lastb

 -i:リモートホストからの接続情報を表示する場合、IPアドレスで表示。

現在ログインしているユーザを表示
$ who

【Linuxコマンド】よく使うコマンド(2)

Linux環境で使用するコマンドの一覧です。
主にファイル・ディレクトリに対する操作をまとめています。

詳細情報表示
$ ls -altr

日付順にソートし詳細を表示する。表示項目は以下の通り。
パーミッション,ファイル数,オーナー,グループ,サイズ,タイムスタンプ,ファイル名

空のファイルを作成
$ touch ファイル名


アクセス権を指定してフォルダを作成
$ mkdir -m 707 sample


ファイルを削除
$ rm file_name


ディレクトリを削除
$ rm -r dir_name


ファイル名変更
$ mv 元ファイル名 新ファイル名


ディレクトリ内のjpgファイルを一括変換
$ rename "変換前文字列" "変換後文字列" 対象ファイル
$ rename "ikou_389x500 (" "ikou_389x500(" *.jpg


コピー
$ cp -p コピー元 コピー先

-p:オーナー,グループ,パーミッション,タイムスタンプを保持
-r:ディレクトリコピー

一括コピー
$ cp /home/test/* /tmp/

「/home/test/」配下のファイルを全て「/tmp/」配下にコピーする。

ファイル移動
$ mv -f 移動ファイル1 移動ファイル2 移動先ディレクトリ

確認なしで上書きされる点に注意

所有者を変更
$ chown ユーザ名 ファイル(orディレクトリ名)


所有グループを変更
$ chgrp グループ名 ファイル(orディレクトリ名)


所有者、所有グループを変更
$ chown ユーザ名:グループ名 ファイル名(orディレクトリ名)


ディレクトリ配下のユーザ、グループを一括変更
$ chown -R ユーザ名:グループ名 対象ディレクトリ


ファイル編集
$ vi ファイル名

※ファイルが存在しない場合は新規作成になる。
 :q! 保存せずに終了
 :wq 保存して終了
 :set nu 行番号表示
 :set nocompatible
 vi互換モード
 i 編集モードへ移行
 Shift + d カーソルから行末までを削除
 /文字列 ファイル内検索(n:順方向 N:逆方向 へ検索)
 0 行頭へ移動
 $ 行末へ移動

パーミッション変更
$ chmod 権限 ファイル・ディレクトリ名


対象ディレクトリ配下すべてのパーミッションを一括変更
$ chmod -R ugo+rwx /対象ディレクトリ

 -R:すべて (下の階層) を変更する場合つける。
 u:User (ユーザー)
 g:Group (グループ)
 o:Other (その他)
 +:(権限を) 追加する。
 -:(権限を) 取り除く。
 r:読み込み
 w:書き込み
 x:変更

サイズ確認
$ du -sh ディレクトリ名

ディレクトリの合計サイズ (-s) を分かりやすい表記 (-h) で表示。

ファイル検索
$ find 検索開始ディレクトリ -name 検索するファイル名


ファイル検索+ファイル内検索
$ find 検索開始ディレクトリ -type f -print | xargs grep 検索する文字列

指定ディレクトリ配下からファイル名を表示しつつ、指定文字列を検索。

特定ディレクトリの一覧取得
$ find /home/test -type d -maxdepth 1 -print > list.txt

-maxdepth n 検索対象をn階層に制限する。

別サーバの場合はsshなどでログインして行う。
例1:sshで[IPアドレス]にアクセスし、/data/aaa 配下のファイル一覧をソートしてテキストに出力。

$ ssh [PASS]@[IPアドレス] find /data/aaa -type f -print | sort > list_aaa.txt

例2:sshで[IPアドレス]にアクセスし、/data/bbb 配下のフォルダを一階層まで潜り、その一覧をソートしてテキストに出力。

ssh [PASS]@[IPアドレス] find /data/bbb -type d -maxdepth 1 -print | sort > list_bbb.txt


カレントディレクトリのファイル数をカウント(フォルダはカウントされない)
$ ls | wc -w
$ find ./ -type f|wc -l


シンボリックリンクの作成
$ ln -s リンクを作りたいディレクトリ リンクの作成先ディレクトリ

リンクの張り替えは以下の通り。

$ ln -snf 既存のリンク 新リンク


【Linuxコマンド】よく使うコマンド(1)

Linux環境で使用するコマンドの一覧です。
主にCentOS環境で使用してきたものを備忘録的にまとめています。

再起動
$ shutdown -r now


画面クリア
$ cls


コマンドの実行履歴
$ history


コマンドの実行履歴から再実行
$ !履歴番号


時刻合わせ
$ ntpdate ntp.nict.jp

上記の場合、独立行政法人情報通信研究機構NICT)に合わせる。

カレントディレクトリの確認
$ pwd


バックグラウンド実行
$ コマンド &

実行コマンドの末尾に & を付与。

$ nohup コマンド &

参考:ログアウトしてもバックグラウンド ジョブを継続する方法

標準出力をファイルに書き出し
$ date > test.txt

上記の場合、 「date」 の実行結果は、ディスプレイに出力される代わりに「test.txt」 ファイルに出力される。これは、 「>」 記号の使用によって標準出力が 「test.txt」 ファイルに切り替えられたため。

ファイルダウンロード
$ wget ファイルのURL


ファイルの先頭部分を表示する
$ head ファイル名
$ head -n 100 ファイル名

上記の場合、先頭から100行を表示する。

dateコマンドで未来日、過去日を取得
  • 3日後の日付
$ date --date '3 days' +'%y-%m-%d'
  • 3日前の日付
$ date --date '3 days ago' +'%y-%m-%d'


unzipコマンド
  • インストール
$ sudo apt-get install unzip
  • 展開先指定
$ unzip zipファイルの場所 -d 展開先


CenntOSのver確認
$ cat /etc/redhat-release


カーネル
$ cat /proc/version


CPU
$ cat /proc/cpuinfo


メモリ
$ cat /proc/meminfo


HDD容量
$ fdisk -l
$ df -h


ディレクトリ容量
$ du -sh ディレクトリ名

s:合計容量
h:適当な単位で表示

LinuxOSのbit数
$ arch

出力結果がにより32bit or 64bitを判別する。
32bit:i386、i486、i586i686、i786
64bit:amd64x86_64

ネットワーク
$ netstat

-r:ルーティング・テーブルに関する情報
-i:LANインタフェースに関する情報
-s:ネットワークの統計情報
-t:TCPに関する情報
-u:UDPに関する情報
-l:使用中 (LISTEN状態) の接続のみを表示
-antu:ポート確認

指定ポートを利用しているプロセスの確認
$ lsof -i:ポート番号


指定ポートでtcp接続可能か確認
$ telnet IPアドレス ポート番号


プロセスの状況
$ top


全てのプロセスを表示
$ ps aux


OSのプロセス同時処理数
$ ulimit -a

※ 「max user processes」 の値

プロセスの強制終了
$ kill -9 プロセス番号

※プロセス番号はpsコマンドで確認可

全サービス表示
$ service --status-all


起動中のサービスを表示
$ chkconfig --list


任意のサービス(httpdなど)のみ表示
$ chkconfig --list サービス名


任意のサービス(httpdなど)を登録
$ chkconfig --add サービス名

これを行なわないと、--listなどを実行しても以下のエラーが発生する。

サービス XXXX は chkconfig をサポートしますが実行レベルで
参照されていません (run 'chkconfig --add tomcat')


筐体電源ONでサービス自動起動設定
$ chkconfig vsftpd on // vsftpd が自動起動する。
$ chkconfig --list vsftpd // vsftpd が自動起動になったか確認
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off // 3, 5がonになっていればOK
$ chkconfig httpd on // Apache(httpd)の自動起動on
$ chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off // 3, 5がonになっていればOK


ファイルシステムの確認
$ cat /etc/fstab


マウント状態確認
$ df