Linux備忘録8:コピー系コマンド雑多(scp、rsync、dd)
【ssh通信を使用してファイルコピー】
<scp> : root以外の{ユーザー名}を使用してローカル/tmp/file1をリモート/tmpへコピー
scp <コピー元> <コピー先>
# scp /tmp/file1 {ユーザー名}@{コピー先サーバー}:/tmp
※フィンガープリント登録とパスワード入力求められる
【scpコマンドオプション色々】
秘密鍵ファイルを指定
# scp -i {秘密鍵パス}
フィンガープリント登録を無視する
# scp -o StrictHostKeyChecking=no
ポート番号を指定します。
# scp -P {ポート番号}
コピー元の更新時間とモードを維持します。
# scp -p
# scp -r
【rsyncコマンドを使用してファイル同期させる】
<rsync>:同期先ディレクトリーのファイルを追加、更新
※宛先ディレクトリに新しいファイルが存在する場合はコピー元ディレクトリのファイルが更新される
# rsync --recursive --times --update {コピー元パス} {コピー先パス}
※「rsync -r -t -u」または「rsync -rtu」でも可
-uオプションを使用するのはアップデートのみを許可する場合
# rsync -u
【rsyncディレクトリ指定時の注意点】
同期元のディレクトリ末尾の「/」を省略した場合は、
同期先のディレクトリの“中”に同期元と同じ名前のディレクトリが作成されます。
例えば、「rsync -av mydata/ backup-mydata/」とした場合は、「mydata」の中にあるファイルやディレクトリが「backup-mydata」ディレクトリの中にコピーされます。
これに対し、「rsync -av mydata backup-mydata/」とした場合は、「backup-mydata」の中に「mydata」ディレクトリが作成されることになります。
なお、同期先の末尾の「/」の有無は影響しません。
【同期元にファイルが無い場合、同期先ディレクトリのファイルを削除】
※取扱注意 ⇒ 同期元に存在しない新しいファイルが作られている場合、削除されてしまう!!!
# rsync -rtu --delete {コピー元パス} {コピー先パス}
rsyncコマンドを実行せずに実行結果を表示する
# rsync -rtu --delete --dry-run {コピー元パス} {コピー先パス}
※削除対象のファイルには画面出力に「deleting」と表示
同期先のリモート側で管理者権限でrsyncを実行する
# rsync -rtu --rsync-path='sudo rync' {同期元} {リモート先ユーザー名@リモートサーバ:同期先パス}
※当初は{-a}オプションを付与してやっていたけど、{-a}オプションはファイルの削除はしないけど、同名ファイルが存在する場合、コピー元の情報で上書きしてしまうことがわかったため、-rtuオプションが無難。
→コピー元の古いファイルの内容で過去のものに上書きされてしまう。
【デバイス単位でコピーを行う】
<dd>コピー元、コピー先でデバイスを指定し、ブロック単位でのコピーが可能。 また指定容量でのファイル作成や内容変換、ファイル中身の途中からのコピーが
可能。
ディスクからディスクへデータをコピー
ファイルの小文字英字を大文字に変換
# dd if=/dev/コピー元ファイル of=/dev/コピー先ファイル conv=ucase
任意のファイルサイズのファイル作成
→このコマンドでイメージファイルを作成して、ファイルシステムでフォーマットして
マウントすることで一時的に別の領域(ルート構造?)を作成出来る。
# dd if=/dev/zero of=10mb bs=1 count=1 seek=20M
参考例:
# dd if=/dev/zero of=/tmp/sysinfo.img bs=1 count=1 seek=20M
# mkfs.xfs /tmp/sysinfo.img# mount /tmp/sysinfo.img /mnt/sysinfo
ActiveDirectory備忘録3:移行する際のメタデータ削除手順
下記、2つの手順が必要。詳細内容は各項目にて記載
※実行環境はWindows Server 2016。
①NTDSオブジェクトの削除
②Active Directoryサイトとサービススナップインを使用してNTDSオブジェクトの確認と残メタデータを削除する
※全作業を、正常に稼働中の任意の1台DC上から実施する
また全てのDC上で以下のコマンドを実行することにより、複製が正常に行われているかを確認可能。同期状態を確認
>repadmin /showrepl
【①NTDSオブジェクトの削除 ※ntdsutliコマンドを使用】
>ntdsutil
ntdsutil:metadata cleanupmetadata cleanup:connections ← 接続モードに移行
server connections:connect to server localhost ← 接続先でlocalhostを選択
※「~localhostに接続しました」というメッセージが表示されたらOK
server connections:quit ← モードを抜ける
metadata cleanup:select operation target ← オペレーション対象選択モードに移行
select operation target:list domains ← 対象のドメインナンバーリストを確認するため
select operation target:select domain {対象ドメインナンバー} ← ドメインを選択
select operation target:list sites ← 対象のサイトナンバーリストを確認するため
select operation target:select site {対象サイトナンバー} ← サイトを選択
select operation target:list servers in site ← 対象のDCサーバリストを確認するため
※サイト内、対象DCのリストが表示されるのでメタデータ削除対象サーバのメンバーナンバーを確認する。
select operation target:select server {対象サーバナンバー}
※ドメイン、サイト、サーバの選択後、以下のような指定情報が表示される
ーーーーーーーーーーーーーーーーーーーーーーーーー
サイト - CN=<サイト名>
ドメイン - <ドメイン名>
サーバー - <CN=削除対象,...>
DSAオブジェクト - CN=NTDS Settings,...
DNSホスト名 - xxx.xxx.xxx.<ドメイン名>
コンピュータオブジェクト - <CN=削除対象,DC=...>
現在の名前付けコンテキストがありません
ーーーーーーーーーーーーーーーーーーーーーーーーー
select operation target:quit ← モードから抜ける
metadata cleanup:remove selected server ← 削除実行
※[サーバーの構成の削除] ダイアログで、情報と警告を確認し、[はい] をクリックしてサーバーオブジェクトとメタデータを削除。※以下のような警告が表示される
(警告:問題のサーバは既に完全にオフラインになっている必要があり、サービスを再開することはできません。このサーバがオンライン状態に戻った場合、サーバオブジェクトは復元されます。)
※「要素がみつまりません」などのメッセージについてはOK。最後に次のメッセージが表示されれば完了⇒「"削除対象のDC名"をサーバ"localhost"から削除しました」
metadata cleanup:quit ← モードを抜ける
ntdsutil:quit ← モードを抜ける
①手順終わり
【②Active Directoryサイトとサービススナップインを使用してNTDSオブジェクトの削除確認と残メタデータを削除する】
②複製に使用する接続オブジェクトの削除
Ⅰ:「Active Directoryサイトとサービス」スナップインを起動
Ⅱ:左側表示されているペインより「Sites」⇒「<サイト名>」⇒「Servers」⇒「<DC名(前役割所有者以外のサーバ)>」⇒「NTDS Settings」を選択
※右ペインの「レプリケート元サーバー」が、削除対象のDC名となっているオブジェクトであることを確認
Ⅲ:左ペインの「NTDS Settings」を右クリック⇒「すべてのタスク」⇒「レプリケーショントポロジの確認」をクリック
Ⅳ:右ペインにて「最新の情報にて更新」し、削除対象DCとのオブジェクトが削除されていることを確認する
Ⅰ~Ⅳまでの手順を削除対象の前役割所有者DCを除く全てのDCについて実行する
Ⅴ:左ペインにて「Sites」⇒「<サイト名>」⇒「Servers」⇒「<削除対象DC名(前役割所有者)>」を選択した状態にて右クリック⇒「削除」をクリック。削除して完了
②手順終わり
あとは【削除対象のDNSレコードについても削除】した方がよいといったような話を聞いたが、記事文章が長くなるのと、手順があやふやなため割愛させていただきます。
ActiveDirectory備忘録2:AD関連コマンドメモ
【ADサーバ、DC情報を参照する】
<ADサーバ情報参照>
※PowerShell
>Get-ADDomainController
<fsmo情報参照>
>netdom query fsmo
【fsmoを別DCに※強制移行する】
※強制移行する場合と通常移行する場合がある
※移行元サーバがオンライン状態かつ通常移行する場合は「Seize<role>」では無く、移行先サーバでlocalhostに接続し「transfer <role>」を使用する
ntdsutil:roles ← 「roles」Enterでfsmo maitenanceモードに移行
fsmo maintenance:connections ← 「connections」Enterで接続モードに移行
server connections:connect to server { localhost名 }
server connections:quit ← 接続モードから抜ける
fsmo maintenance:Seize naming master ← 「Seize<role>」で5つのfsmo役割を接続サーバに強制移行
fsmo maintenance:Seize PDC
fsmo maintenance:Seize RID master
fsmo maintenance:Seize schema master
fsmo maintenance:Seize infrastructure masterfsmo maintenance:quit ← モードを抜ける
ntdsutil:quit ← ユーティリティを抜ける
※MicroSoftの公式ナレッジ
前の役割所有者(fsmo)を修復または削除する際の考慮事項
可能な場合、および役割を強制移行する代わりに役割を移行できた場合は、前の役割所有者を修正します。 前の役割所有者を修正できない場合、または役割を強制移行した場合は、ドメインから前の役割所有者を削除します。
※重要⇒修復したコンピューターを DC として使用する場合は、バックアップから DC を復元するのではなく、コンピューターを最初から DC に再構築することをお勧めします。 復元プロセスは、DC を役割所有者として再び再構築します。
修復したコンピューターを DC としてフォレストに戻すには
①以下のいずれかの手順を実行します。
Ⅰ:前の役割所有者のハード ディスクをフォーマットし、コンピューターに Windows を再インストールします。
Ⅱ:前の役割所有者をメンバー サーバーに強制的に降格させます。
②フォレスト内の別の DC で、Ntdsutil を使用して、前の役割所有者のメタデータを削除します。
③メタデータをクリーンアップした後、コンピューターを DC に再び昇格させ、ロールを DC に転送します。
ActiveDirectory備忘録1:ActiveDirectoryドメインサービスでFSMO(役割所有者) の役割を移行または強制移行する場合について
備忘録としてのメモ
※MicroSoftナレッジページより引用
参照元:https://support.microsoft.com/ja-jp/help/255504/using-ntdsutil-exe-to-transfer-or-seize-fsmo-roles-to-a-domain-control
【DC は、次の方法のいずれかによって再割り当てされるまで、FSMO の役割を所有し続けます。】
①管理者が GUI 管理ツールを使用して役割を再割り当てした場合。
②管理者が ntdsutil /roles コマンドを使用して役割を再割り当てした場合。
③管理者が Active Directory インストール ウィザードを使用して、役割を保持している DC を正常に降格させます。 このウィザードにより、ローカルで保持されている役割がすべて、フォレスト内の既存の DC に再割り当てされます。
④管理者が dcpromo /forceremoval コマンドを使用して、役割を保持している DC を降格させます。
⑤DC がシャットダウンして再起動します。 DC が再起動すると、別の DC が役割所有者であることを示す受信レプリケーション情報を受信します。 この場合、新しく開始された DC は役割を放棄します (前述のとおり)。
【FSMO の役割所有者に障害が発生した場合、またはその役割が移行される前にサービスが停止した場合は、すべての役割を適切かつ正常な DC に強制移行して移行する必要があります。】
①次の場合は FSMO の役割を移行することをお勧めします。
Ⅰ:現在の役割の所有者が操作可能な状態であり、ネットワーク上で新しい FSMO の所有者からアクセスできる場合。
Ⅱ:FSMO の役割を現在所有している DC を正常に降格し、Active Directory フォレスト内の特定の DC にその役割を割り当てます。
Ⅲ:現在 FSMO の役割を所有している DC がメンテナンスのためにオフライン状態になる予定であり、特定の FSMO の役割を「現 在実行されている」DC に割り当てる必要があります。 FSMO 所有者に影響する操作を実行するには、役割を移行する必要がある 場合があります。 これは、特に PDC エミュレータの役割に当てはまります。 これは、RID マスタの役割、ドメイン名前付けマ スタの役割、およびスキーマ マスタの役割にとって重要ではない問題です
②次の場合は FSMO の役割を強制移行することをお勧めします。
Ⅰ:現在の役割の所有者で FSMO に依存した操作の正常な完了を妨げる操作エラーが発生し、その役割を移行できない場合。
Ⅱ:dcpromo /forceremoval コマンドを使用して、FSMO の役割を所有する DC を強制的に降格させます。※重要 ⇒dcpromo /forceremoval コマンドでは、FSMO の役割は、管理者によって再割り当てされるまで無効な状態のままになります。
Ⅲ:もともと特定の役割を所有していたコンピュータのオペレーティング システムが存在しないか、再インストールされた場合。
<注意事項>
前の役割所有者がドメインに戻らない場合にのみ、すべての役割の強制移行を行うことをお勧めします。
フォレストの回復シナリオで FSMO の役割を強制移行する必要がある場合は、「各ドメインの最初の書き込み可能なドメイン コントローラーを復元する」セクションの「最初の回復の実行」の手順 5 を参照してください。
役割の移行または強制移行の後、新しい役割所有者はすぐに操作しません。 代わりに、新しい役割所有者は再開された役割所有者のように動作し、役割 (ドメイン パーティションなど) の名前付けコンテキストのコピーを待機して、受信レプリケーション サイクルを正常に完了します。 このレプリケーション要件は、新しい役割所有者がアクションを実行する前に、可能な限り最新であることを確認するのに役立ちます。 また、エラーの機会のウィンドウを制限します。 このウィンドウには、前の役割所有者がオフラインになる前に他の DC へのレプリケーションを完了しなかった変更のみが含まれます。 各 FSMO 役割の名前付けコンテキストの一覧については、このセクションの冒頭の表を参照してください。
【前の役割所有者を修復または削除する際の考慮事項】
可能な場合、および役割を強制移行する代わりに役割を移行できた場合は前の役割所有者を修正します。 前の役割所有者を修正できない場合、または役割を強制移行した場合は、ドメインから前の役割所有者を削除します。
※重要
⇒修復したコンピューターを DC として使用する場合は、バックアップから DC を復元するのではなく、コンピューターを最初から DC に再構築することをお勧めします。 復元プロセスは、DC を役割所有者として再び再構築します。
【修復したコンピューターを DC としてフォレストに戻すには】
①以下のいずれかの手順を実行します。
Ⅰ:前の役割所有者のハード ディスクをフォーマットし、コンピューターに Windows を再インストールします。
Ⅱ:前の役割所有者をメンバー サーバーに強制的に降格させます。
②フォレスト内の別の DC で、Ntdsutil を使用して、前の役割所有者のメタデータを削除します。
③メタデータをクリーンアップした後、コンピューターを DC に再び昇格させ、ロールを DC に転送します。
Linux備忘録(番外1):キックスタート、シェル
備忘録、単純な作業ミス、誤認識もあるかもしれません。取り扱いご注意ください。
実行環境:RedHat V.7.6
1【キックスタートインストール】
UEFIインストール時、POST後、grubのメニューが表示されず、特定ksファイルでインストールが進んでしまう。
⇒grub.cfgのタイムアウトパラメータ[set timeout=]を0に設定していたのが原因。タイムアウト時間を3000(5時間)に変更して、メニューが表示
2【シェル上のsedで置き換えが実施されない】
下記のようにスクリプト式の検索文字列をクォートで囲んでいたのが原因
⇒以下、間違っていた例
sed -e 's/”{文字列1}”/”{文字列2}"/' [ファイル名]
3【変数に格納したコマンドが実行されない】
以下のようなテキストをreadコマンドで読み込んで、連続でコマンド実行する。
ls -l
echo "#### OK ####"
echo "#### NG ####"
サンプルシェルは以下
#!/bin/bash
cmd_action(){ ←#コマンドを実行する関数
${C_LIST}
}cat [上記テキストファイル] | while read C_LIST
do
cmd_action
done
⇒この時、関数内の変数${C_LIST}を””(クォート)で囲んだところ、『ls -l: コマンドが見つかりません』でエラーとなった。
4【リストでコマンド実行した時にパイプが機能しない】
上記のような方法で以下の”|”を使用してのパスワード設定コマンドがうまくいかない。
# echo [パスワード] | passwd --stdin [ユーザ名]
⇒echo 以降がすべてただの文字列として実行されていたのが原因。実行ステータスも『0』となっていた。
#こんな感じの内容が標準出力されただけのため、パスワードが設定されていなかった。
[パスワード] | passwd --stdin [ユーザ名]
VBA備忘録 4:ファイルパスワードを空にする、日付取得、関数、メソッド、雑記
【ブックのパスワードプロパティを”空”にしてファイル保存】
Dim ${変数} As Workbook
Set ${変数} = Application.Workbooks([ブックパス:ブック名])
’互換性チェックのメッセージを表示しない
wb.CheckCompatibility = False
wb.Password = "" ’パスワードプロパティに空文字挿入
wb.Save ’bookを保存
Application.DisplayAlerts = True ’保存時の確認メッセージに対し、True(yes)を入力
wb.Close ’bookを閉じる
⇒ファイル、上書きするから注意必要※あんまりしない方がいいかも
【セル情報を配列格納して、ループで処理】
Dim ${変数} As Range
Dim ${変数2} As Variant
Dim I As Integer
${変数2} = Array("C9", "C15", "D19", "D16", "D18", "C23", "C27")
For I = 0 to 6
Set ${変数} = Range(${変数2}(I))
cel.SelectNext I
⇒これ結構便利
【文字列を日付側のオブジェクトに変更】
Dim ${変数} As Date
${変数} = CDate(${変数1})
⇒ ${変数1}を${変数}に日付型のデータとして、変換する
【日付データを特定フォーマットで文字列に格納】
Dim ${変数} As String
Dim {日付} As Data
${変数} = Left(Format({日付} "yyyymmdd"), 6)
⇒日付を形式(yyyy㎜dd)で表示して左から6文字分、抽出
【日付型の文字列が入るまで入力を求める】
Do
${変数}= InputBox("対象の日付を入力してください" & vbLf & "yyyy/mm")
Loop Until IsDate(${変数}) ⇒ 条件式
【カレントディレクトリ移動】
ChDir [ファイルパス]
⇒これやると、ワークブックの文字列ファイルパス指定が楽?
PowerShell備忘録1:コマンドレット、メソッド、条件分岐、雑記
備忘録のため、例文と要点まとめ。
【特定フォルダー、以下のエクセルファイル一覧の名前を変数(リスト)取得する】
${変数} = Get-ChildItem [フォルダーパス] | Where-Object {$_.name -like "*xls*"} | Select-Object -ExpandProperty Name
【日付(1ヶ月前,yyyyMM)の形式で取得】
(Get-Date).addmonths(-1).tostring("yyyyMM")
⇒<.addmonths>:<メソッド>指定した数値分、月の増減を実施する。
⇒<.addyears>:<メソッド>年数を操作する場合、左記のメソッド
【リスト情報を取得して、ループで処理を実行する】
⇒1行に記述しても問題無し(例:foreach($test in $testlist){ echo $test }
foreach(${格納変数} in {リスト内容})
{
[ループ実行したい処理]
}
【ifで条件分岐】
if( [ 条件式 ] )
{
[条件:trueの場合の処理]
} else if( [ 条件式 2 ] ){
[条件2:trueの場合の処理]
}else{
[条件:Falseの場合の処理]
}
【指定文字列が含まれている場合、一致したインデックスを戻り値を返す。】
${変数}.IndexOf({”文字列"もしくは${変数})
⇒<.IndexOf>:<メソッド>指定文字列、該当しない場合 戻り値は[-1].
⇒例:$a("abcdef").IndexOf("de") ⇒ 4
【文字列を指定区切り文字で区切って、配列格納する】
{”文字列”もしくは${変数}}={”文字列"}.split({"指定区切り文字"})
⇒<.split>:<メソッド>
⇒例:$a=”hogehoge.xls".split(".")
$a[0] ⇒ hogehoge
$a[1]⇒ xls
【文字列、変数を交えて形成】
${変数} = "abcde”+${変数1}+”123”
⇒ echo ${変数}
⇒"abcde${変数1}123”