cron の構文をちょいちょい忘れるので基本的なとこだけメモしておく。
cron の構文をちょいちょい忘れるので基本的なとこだけメモしておく。
cron の構文
一番基本的なやつ
一番基本的なやつ。
- 5つのフィールドをスペースで区切って指定する
- フィールドは左から分・時・日・月・曜日を指定する
指定できる範囲はこんな感じ。フィールドによって 0 始まりだったり 1 始まりするので気にしておく。
フィールド | 範囲 |
---|---|
分 | 0-59 |
時 | 0-23 |
日 | 1-31 |
月 | 1-12 または JAN-DEC |
曜日 | 0-6 または SUN-SAT |
演算子
フィールドは時刻を表す数値だけじゃなくていくつかの演算子が使える。
演算子 | 説明 | 例 |
---|---|---|
* | 任意の値 | * * * * * 毎日、毎分実行する |
, | 値リストの区切り文字 | 2,10 4 * * * 毎日、午前4時2分と午前4時10分に実行する |
- | 値の範囲 | 0 4-6 * * * 毎日、午前4時0分、午前5時0分と午前6時0分に実行する |
/ | ステップ値 | 20/15 * * * * 毎日、20分から59分までの間で15分おきに実行する (20分、35分、50分) |
実行する時間の書き方の例
実行する日時 | フィールドの記載 | 説明 |
---|---|---|
毎分 | * * * * * |
毎分実行する |
2分ごと | */2 * * * * |
2分ごとに実行する |
1時間ごと | 0 * * * * |
1時間ごとに0分に実行する |
2時間ごと | 0 */2 * * * |
2時間ごとに0分に実行する |
10時から17時までの範囲で1時間ごと | 0 10-17 * * * |
10時から17時の間は1時間ごとに0分に実行する |
毎日 | 0 0 * * * |
毎日0時0分に実行する |
2日ごと | 0 0 */2 * * |
2日ごとに0時0分に実行する |
日曜日 | 0 0 * * SUN |
日曜日の0時0分に実行する |
平日 | 0 0 * * MON-FRI |
月曜日から金曜日の間は0時0分に実行する |
毎月 | 0 0 1 * * |
毎月1日の0時0分に実行する |
2ヶ月ごと | 0 0 1 */2 * |
2ヶ月ごとに1日の0時0分に実行する |
参考サイト
AWS CLI の S3 のファイルの --exclude と --include の使い方のメモ。
AWS CLI の aws s3 sync
とか aws s3 cp
コマンドとかの --exclude
オプションと --include
オプションの使い方のメモ。
aws コマンドのバージョン。
$ aws --version aws-cli/2.1.21 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off
--exclude
オプションと --include
オプションの使い方
AWS CLI の aws s3 sync
とか aws s3 cp
コマンドはパスを指定する引数は UNIX スタイルのワイルドカードは使えないけど --exclude
オプションと --include
オプションを使うと UNIX のワイルドカードとだいたい同じことができる。
--exclude
オプションと --include
オプションは雰囲気で使ってるけど少しひっかかりがあったので軽く調べてみたのをメモしておく。
このあとのコマンドの実行でのローカルのディレクトリとファイル構成はこんな感じでやっていく。
ファイル名が a
, ab
, b
と c
のやつがそれぞれ .csv
, .txt
の拡張子と組み合わせたファイルを配置している。
$ tree ./data ./data ├── a.csv ├── a.txt ├── ab.csv ├── ab.txt ├── b.csv ├── b.txt ├── c.csv └── c.txt
パターン記号
--exclude
オプションと --include
オプションは UNIX のワイルドカードみたいなパターン記号が使える。
--exclude
オプションと --include
オプションが使えるパターン記号と意味はこんな感じ。
パターン記号 | 意味 |
---|---|
* | 任意の文字列にマッチする |
? | 任意の1文字にマッチする |
[sequence] | sequence の任意の1文字にマッチする |
[!sequence] | sequence にない任意の1文字にマッチする |
パターン記号をいくつか試してみる。
--exclude '*'
を指定してすべてのファイルを除外する。
$ aws s3 sync --dryrun --exclude '*' ./data s3://alice-s3-bucket/data
--exclude '*.csv'
を指定して拡張子が .csv
のファイルを除外する。
$ aws s3 sync --dryrun --exclude '*.csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt
--exclude '?.csv'
を指定して拡張子が .csv
でベースが任意の1文字のファイルを除外する。
$ aws s3 sync --dryrun --exclude '?.csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt
--exclude '[ab].csv'
を指定して拡張子が .csv
でベースが a
か b
のファイルを除外する。
$ aws s3 sync --dryrun --exclude '[ab].csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.csv to s3://alice-s3-bucket/c.csv (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt
--exclude '[!ab].csv'
を指定して拡張子が .csv
でベースが a
でも b
でもないファイルつまり c.csv
を除外する。
$ aws s3 sync --dryrun --exclude '[!ab].csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.csv to s3://alice-s3-bucket/a.csv (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.csv to s3://alice-s3-bucket/b.csv (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt
--exclude
オプションと --include
オプションの適用ルール
--exclude
オプションと --include
オプションの指定はいくつかルールがある。それぞれのルールの説明をメモしておく。
--exclude
オプションと--include
オプションはそれぞれ0回または1回以上指定できる--exclude
オプションと--include
オプションは後に指定するほうが優先する--exclude
オプションと--include
オプションはソースディレクトリに対して評価する--include
オプションは--exclude
オプションと組み合わせて使う
それぞれ0回または1回以上指定できる
--exclude
オプションと --include
オプションはそれぞれ0回または1回以上指定できる。
--exclude '?.csv'
を指定すると拡張子が .csv
でベースが任意の1文字のファイルを除外するけど --exclude '?.csv' --exclude '?.txt'
みたいに指定すると拡張子が .txt
でベースが任意の1文字のファイルも除外する。
$ aws s3 sync --dryrun --exclude '?.csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt $ aws s3 sync --dryrun --exclude '?.csv' --exclude '?.txt' ./data s3://alice-s3-bucket (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt
後に指定するほうが優先する
--exclude
オプションと --include
オプションは後に指定するほうが優先する後勝ちルール。
後勝ちルールは名前のとおりで --exclude
オプションの指定と --include
オプションの指定の両方にマッチするファイルがあるときは後に指定するほうのルールが優先するルール。
たとえば --exclude '*' --include 'a.txt'
みたいに指定すると、評価の順番は --exclude '*'
にマッチするファイルつまりすべてのファイルを除外する => --include 'a.txt'
にマッチする a.txt
は除外せずに含めるという順番に評価するので、 a.txt
だけが aws s3 sync
コマンドの処理対象になる。
$ aws s3 sync --dryrun --exclude '*' --include 'a.txt' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt
--exclude
と --include
を指定する順番を入れ替えて --include 'a.txt' --exclude '*'
みたいに指定すると、評価の順番は --include 'a.txt'
にマッチする a.txt
は除外せずに含める => --exclude '*'
にマッチするファイルつまりすべてのファイルを除外する順番に評価するので、aws s3 sync
コマンドの処理対象のファイルはない。
$ aws s3 sync --dryrun --include 'a.txt' --exclude '*' ./data s3://alice-s3-bucket
後勝ちルールは --exclude
と --include
を組み合わせるときに意味が出てくるルールで --exclude
だけあるいは --include
だけを組み合わせるときは別に気にしなくていい。
ソースディレクトリに対して評価する
--exclude
オプションと --include
オプションはソースディレクトリに対して評価する。
理解しやすくするのにローカルのディレクトリとファイル構成はこんな感じにしてみる。
$ tree ./data ./data ├── a.txt ├── b.txt ├── c.txt └── child ├── a.txt ├── b.txt └── c.txt
--exclude '[ab].txt'
を指定するとソースディレクトリ直下の a.txt
と b.txt
は除外するけど child
サブディレクトリ配下の a.txt
と b.txt
は除外しない。
$ aws s3 sync --dryrun --exclude '[ab].txt' ./data s3://alice-s3-bucket (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt (dryrun) upload: data/child/a.txt to s3://alice-s3-bucket/child/a.txt (dryrun) upload: data/child/b.txt to s3://alice-s3-bucket/child/b.txt (dryrun) upload: data/child/c.txt to s3://alice-s3-bucket/child/c.txt
--exclude '[ab].txt' --exclude '*/[ab].txt'
を指定するとソースディレクトリ直下の a.txt
と b.txt
だけじゃなくて child
サブディレクトリ配下の a.txt
と b.txt
も除外する。
$ aws s3 sync --dryrun --exclude '[ab].txt' --exclude '*/[ab].txt' ./data s3://alice-s3-bucket (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt (dryrun) upload: data/child/c.txt to s3://alice-s3-bucket/child/c.txt
--include
オプションは --exclude
オプションと組み合わせて使う
AWS CLI の aws s3 sync
とか aws s3 cp
コマンドはデフォルトですべてのファイルが処理対象なので --include
オプションだけを指定するとすべてのファイルが処理対象になる。
たとえば以下はすべて同じ結果になる。
$ aws s3 sync --dryrun ./data s3://alice-s3-bucket $ aws s3 sync --dryrun --include '*' ./data s3://alice-s3-bucket $ aws s3 sync --dryrun --include '*.csv' ./data s3://alice-s3-bucket
--include
オプションだけを指定しても意味がなくて --include
オプションは --exclude
オプションと組み合わせて使うことによって効果が発揮する。
よく使うやつ
自分がよく使う --exclude
オプションと --include
オプションの使い方を書いていく。
特定のファイル以外を処理するときは --exclude
オプションで特定のファイルを除外する。たとえば拡張子が .csv
以外のファイルを処理するときは --exclude '*.csv'
を指定して拡張子が .csv
のファイルを除外する。
$ aws s3 sync --dryrun --exclude '*.csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.txt to s3://alice-s3-bucket/a.txt (dryrun) upload: data/ab.txt to s3://alice-s3-bucket/ab.txt (dryrun) upload: data/b.txt to s3://alice-s3-bucket/b.txt (dryrun) upload: data/c.txt to s3://alice-s3-bucket/c.txt
特定のファイルだけ処理するときは --exclude '*'
ですべてのファイルを除外してから --include
オプションで特定のファイルを含める。たとえば拡張子が .csv
のファイルだけを処理するときは --exclude '*' --include '*.csv'
を指定してすべてのファイルを除外してから拡張子が .csv
のファイルだけを含める。
$ aws s3 sync --dryrun --exclude '*' --include '*.csv' ./data s3://alice-s3-bucket (dryrun) upload: data/a.csv to s3://alice-s3-bucket/a.csv (dryrun) upload: data/ab.csv to s3://alice-s3-bucket/ab.csv (dryrun) upload: data/b.csv to s3://alice-s3-bucket/b.csv (dryrun) upload: data/c.csv to s3://alice-s3-bucket/c.csv
参考サイト
Route 53 で取得してるドメインの連絡先情報を変更したメモ。
Route 53 で取得してるドメインの連絡先情報を変更したメモ。
Route 53 のドメインの連絡先情報を変更した
AWS からドメインの連絡先情報を確認してくれメールが来た
少し前のことだけど AWS から [Action required] Confirm that contact information for <登録してるドメイン> is correct
の件名のメールが来た。
自分は Route 53 で .net ドメインを取得しててそのドメインの連絡先情報を確認してくれというメールのようでメールの本文はこんな感じ。
Dear AWS customer, This message is a reminder to help you keep the contact information for your domain registration up to date. Our records include the following information: Domains: <登録してるドメイン> <登録してる連絡先の情報> If any of the contact information is inaccurate, open the Amazon Route 53 console and make corrections: https://console.aws.amazon.com/route53/home#DomainDetail:<登録してるドメイン> If your information is accurate, you do not need to take any action. Important Under the terms of your registration agreement, providing false WHOIS information can be grounds for the cancellation of your domain name registration. Regards, Amazon Route 53
ざっくりの意味は「ドメイン登録の連絡先の情報が最新の状態か確認してね。連絡先情報が正しくなかったら修正してね」と「虚偽の連絡先情報を登録するとドメイン名の登録を取り消すことがあるよ」みたいな感じ。
自分が Route 53 でドメインを取得したのはちょうど1年と少し前だったけど連絡先情報が最新かどうかのリマインダーメールを受け取るのは今回が初めてだった。 実は少し思い当たることがあって、自分は少し前に引っ越しをしていて各種サービスに登録している住所たとえば AWS の請求先住所とかは変更していたけど Route 53 に登録している住所は変更していなかったけど、なんとなく Route 53 は1年ごととか定期的にリマインダーメールを送ってるだけのような気がする。
あとで会社の人に聞いたのだけど某レジストラは毎日のように「連絡先の情報が正しいか確認してね」メールを送ってくるらしい。おそろしい……
やったこと
Route 53 に登録しているドメインの連絡先の情報を現住所に変更した。
やったのは Route 53 の管理コンソールで取得してるドメインを表示と連絡先の情報を変更して 保存
ボタンを押すだけ。
保存
ボタンを押すとスクショを取り忘れたけど「連絡先の変更はレジストラが変更内容を確認するまで反映しないから少し待ってね。レジストラが変更内容を確認したらメールするよ」みたいなメッセージが表示する。
実際にちょっと前に変更した連絡先の情報を表示してみたけど変更前の情報が表示しているのが確認できた。
10分くらいすると AWS から Updating domain details for <登録してるドメイン> succeeded
の件名のメールが来た。
Dear AWS customer, We recently received an online request from your AWS account to make the following change: <変更した連絡先> If you requested this change, you don't need to take any further action. If you did not request this change, please contact Amazon Web Services Customer Support immediately. Regards, Amazon Route 53
ざっくりの意味は「ドメイン登録に関して変更のリクエストを受け付けたよ。もしアナタが変更をリクエストしたなら特にやってもらうことはないよ」と「もしアナタが変更をリクエストしてないならすぐにカスタマーサポートに連絡してね」という感じ。 今回は自分が変更をリクエストしているので特にすることはなくてドメインの連絡先情報の変更はこれで完了したっぽい。
S3 バケットとローカルのディレクトリを同期する AWS CLI の aws s3 sync コマンドの初歩的な使い方のメモ。
S3 バケットとローカルのディレクトリを同期する aws s3 sync
コマンドの初歩的な使い方のメモ。
aws コマンドのバージョン。
$ aws --version aws-cli/2.1.21 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off
aws s3 sync コマンドの初歩的な使い方
aws s3 sync
コマンドは S3 バケットとローカルのディレクトリを同期する便利なコマンド。
S3 バケットとローカルのディレクトリの同期だけじゃなくて任意の S3 バケットのプリフィックス間でオブジェクトを同期したり S3 バケット間のオブジェクトを同期することもできる。
初歩的な使い方だけどたまに「あれ、どうやるんだっけ」みたいなのをメモしておく。
このあとのコマンドの実行でのローカルのディレクトリとファイル構成はこんな感じでやっていく。
$ tree ./data ./data ├── a.txt └── hoge ├── a.txt └── fuga ├── a.txt └── b.txt 2 directories, 4 files
基本的な使い方
aws s3 sync <同期元> <同期先>
みたいに使う。
同期元と同期先はそれぞれローカルならローカルのディレクトリのパスを指定するし S3 バケットなら S3バケットとプリフィックスを指定する。
たとえば同期元がローカルの /home/alice/data
で同期先が S3 の alice-s3-bucket
バケットの data
プリフィックスだったらこんな感じにやる。
$ aws s3 sync /home/alice/data s3://alice-s3-bucket/data
同期元が S3 の alice-s3-bucket
バケットの data
プリフィックスで同期先がローカルの /home/alice/data
だったらこんな感じにやる。
$ aws s3 sync s3://alice-s3-bucket/data /home/alice/data
同期元が S3 の alice-s3-bucket
バケットの data
プリフィックスで同期先が S3 の alice-s3-bucket
バケットの data2
プリフィックス だったらこんな感じにやる。
$ aws s3 sync s3://alice-s3-bucket/data s3://alice-s3-bucket/data2
--dryrun オプション: dry run する
--dryrun
オプションを指定すると dry run する。
実際にはファイルやオブジェクトは同期せずに「こんな感じにファイルをアップロードしたりコピーしたり削除するよ」を表示する。
$ aws s3 sync --dryrun ./data s3://alice-s3-bucket/data (dryrun) upload: data/a.txt to s3://alice-s3-bucket/data/a.txt (dryrun) upload: data/hoge/a.txt to s3://alice-s3-bucket/data/hoge/a.txt (dryrun) upload: data/hoge/fuga/a.txt to s3://alice-s3-bucket/data/hoge/fuga/a.txt (dryrun) upload: data/hoge/fuga/b.txt to s3://alice-s3-bucket/data/hoge/fuga/b.txt
--delete オプション: 削除を同期する
aws s3 sync
コマンドは同期元にないファイルが同期先にあるときは同期先のファイルはそのままで削除はしない。
--delete
オプションを指定すると同期元にないファイルが同期先にあるときは同期先のファイルを削除する。
$ rm data/a.txt $ aws s3 sync --dryrun ./data s3://alice-s3-bucket/data $ aws s3 sync --dryrun --delete ./data s3://alice-s3-bucket/data (dryrun) delete: s3://alice-s3-bucket/data/a.txt
--quiet オプション: 出力を抑制する
aws s3 sync
コマンドはファイルやオブジェクトに対する操作を表示するけど --quiet
オプションを指定するとファイルやオブジェクトに対する操作は表示しない。
$ aws s3 sync --dryrun ./data s3://alice-s3-bucket/data (dryrun) upload: data/a.txt to s3://alice-s3-bucket/data/a.txt (dryrun) upload: data/hoge/a.txt to s3://alice-s3-bucket/data/hoge/a.txt (dryrun) upload: data/hoge/fuga/a.txt to s3://alice-s3-bucket/data/hoge/fuga/a.txt (dryrun) upload: data/hoge/fuga/b.txt to s3://alice-s3-bucket/data/hoge/fuga/b.txt $ aws s3 sync --dryrun --quiet ./data s3://alice-s3-bucket/data
--exclude: ファイルやオブジェクトを同期から除外する
--exclude
オプションを指定するとファイルやオブジェクトを同期から除外する。
--exclude
オプションを指定しないときは a.txt
は3ファイルが同期する。
$ aws s3 sync --dryrun ./data s3://alice-s3-bucket/data | grep a.txt (dryrun) upload: data/a.txt to s3://alice-s3-bucket/data/a.txt (dryrun) upload: data/hoge/a.txt to s3://alice-s3-bucket/data/hoge/a.txt (dryrun) upload: data/hoge/fuga/a.txt to s3://alice-s3-bucket/data/hoge/fuga/a.txt
--exclude
オプションで a.txt
を指定すると ./data/a.txt
が同期から除外する。
$ aws s3 sync --dryrun --exclude a.txt ./data s3://alice-s3-bucket/data | grep a.txt (dryrun) upload: data/hoge/a.txt to s3://alice-s3-bucket/data/hoge/a.txt (dryrun) upload: data/hoge/fuga/a.txt to s3://alice-s3-bucket/data/hoge/fuga/a.txt
--exclude a.txt
みたいにすると ./data
直下の a.txt
だけが同期から除外するけど --exclude '*a.txt'
みたいにするとすべての a.txt
を同期から除外する。
$ aws s3 sync --dryrun --exclude '*a.txt' ./data s3://alice-s3-bucket/data | grep a.txt
--include: ファイルやオブジェクトを同期から除外しない
--include
オプションを指定するとファイルやオブジェクトを同期から除外しない。
--include
オプションは --exclude
オプションと組み合わせて使う。たとえば --exclude '*a.txt'
するとすべての a.txt
は同期から除外するけど --exclude '*a.txt' --include hoge/a.txt
すると ./data/hoge/a.txt
は同期から除外せずにちゃんと同期する。
$ aws s3 sync --dryrun --exclude '*a.txt' ./data s3://alice-s3-bucket/data | grep a.txt $ aws s3 sync --dryrun --exclude '*a.txt' --include hoge/a.txt ./data s3://alice-s3-bucket/data | grep a.txt (dryrun) upload: data/hoge/a.txt to s3://alice-s3-bucket/data/hoge/a.txt
ヘルプを見る
aws s3 sync help
を実行するとヘルプが表示する。
自分は AWS CLI のヘルプはブラウザーで マニュアル を読んじゃうので aws s3 sync help
はブラウザーが使えないときくらいしか使わない気がする。
$ aws s3 sync help SYNC() SYNC() NAME sync - DESCRIPTION Syncs directories and S3 prefixes. Recursively copies new and updated files from the source directory to the destination. Only creates fold- ers in the destination if they contain one or more files. See 'aws help' for descriptions of global parameters. # (省略)
参考サイト
iTerm2 のコピーモードのキーボード操作のチートシート。
iTerm2 のコピーモードはキーボードで範囲を指定してコピーできるのが便利なのでメモ。
このメモは Build 3.4.2 で動作を確認している。
チートシートは最後に記載しているのでチートシートだけ見たいときはそちらを見てほしい。
iTerm2 のコピーモード
iTerm2 は コピーモード があって iTerm2 をコピーモードにするとキーボードで範囲を指定してコピーできるのがかなり便利なのでメモしておく。
iTerm2 のコピーモードはキーボードでカーソルを移動することができる。 vim ライクなキー操作でもカーソルを移動することができるので vim を使ったことがある人はすぐにコピーモードを使いこなせそう。個人的にはコピーモードを使う前はマウスで範囲を選択とコピーしててそんなに不自由はないように感じていたけど、コピーモードを使ってみたらカーソルの移動はコピーモード + キーボードでやるほうがかなり楽なように感じる。
コピーモードの開始と終了
メニューから Edit > Copy Mode
か Command - Shift - c
.
一応、マウスで範囲選択した状態で Shift - 矢印キー
でコピーモードを開始することもできる。
コピーモード中は Esc
か q
でコピーモードを終了する。
あるいは Ctrl - c
, Ctrl - g
でもコピーモードを終了する。
基本的なカーソル移動
コピーモード中は矢印キーでカーソルを移動する。
あと vim ライクに h, j, k, l
でカーソル移動することができる。
キー | アクション |
---|---|
←, h | 左に移動 |
↓, j | 下に移動 |
↑, k | 上に移動 |
右, l | 右に移動 |
コピー範囲の選択とコピーの実行
Ctrl - v
で矩形選択を開始。矩形選択中にカーソルを動かすとカーソルを動かした分が選択する。
矩形選択中に Ctrl - v
で矩形選択を終了。
Space
か v
で文字選択を開始。文字選択中にカーソルを動かすとカーソルを動かした分が選択する。文字選択中に Space
か v
で文字選択を終了。
V
で行選択を開始。行選択中にカーソルを動かすとカーソルを動かした分が選択する。行選択中に V
を押すと行選択を解除。
文字、矩形か行を選択しているときに Ctrl - k
か y
を押すと選択しているものをコピーする。
あと Ctrl - Space
を押すと選択を終了する。
単語の移動
カーソルは Option - ←
か Shift - Tab
か b
を押すと1つ前の単語に移動して Option - →
か Tab
か w
を押すと1つ先の単語に移動する。
これらのキーはどれも記号は単語の区切りとして扱う。
たとえばカーソルが and
の nd
上にあるときに b
を押すとカーソルは and
の a
に移動して、カーソルが orange
の o
の上にあるときに b
を押すとカーソルは apple,
の ,
に移動する。
apple, orange and banana
あとカーソルは B
を押すと1つ前の単語に移動して W
を押すと1つ先の単語に移動する。
これらのキーはどれも記号は単語の一部分として扱う。
たとえばカーソルが and
の nd
上にあるときに B
を押すとカーソルは and
の a
に移動して、カーソルが orange
の o
の上にあるときに B
を押すとカーソルは apple,
の a
に移動する。
apple, orange and banana
行の移動
カーソルは 0
を押すと行頭に移動して $
を押すと行末に移動する。あとカーソルは ^
か Option - m
を押すと行頭かインデントの開始位置に移動して Enter
(Return
) を押すとカーソルが次の行の行頭に移動する。
0
と ^
は行頭が印刷できない文字で始まっているときの動きが違う。
たとえばカーソルが バージョンを表示します
上にあるときに 0
を押すとカーソルは行頭つまり1つ上の行の OPTION
の O
の下の位置に移動するけど、 ^
を押すとカーソルは --version
の -
に移動する。
OPTIONS: --version, -v バージョンを表示します
その他のカーソル移動
g
を押すとカーソルがバッファの先頭に移動して G
を押すとカーソルがバッファの最後に移動する。
Ctrl - b
か Page Up
を押すとカーソルが1画面分上に移動して Ctrl - f
か Page Down
を押すとカーソルが1画面分下に移動する。
あと H
, M
, L
を押すとそれぞれカーソルが可視領域の一番上か真ん中か一番下に移動する。
チートシート
コピーモードの開始、終了、コピー範囲の選択とコピーの実行。
キー | アクション |
---|---|
Ctrl - Space | 選択を終了する |
Ecs, q, Ctrl - c, Ctrl - g | コピーモードを終了する |
Ctrl - v | 矩形選択を開始する。矩形選択中は矩形選択を終了する |
Space, v | 文字選択を開始する。文字選択中は文字選択を終了する |
V | 行選択を開始する。行選択中は行選択を終了する |
基本のカーソル移動。
キー | アクション |
---|---|
←, h | 左に移動 |
↓, j | 下に移動 |
↑, k | 上に移動 |
右, l | 右に移動 |
コンテンツベースのカーソル移動。
キー | アクション |
---|---|
Option - ←, Shift - Tab, b | 記号は単語の区切りとして扱って1つ前の単語に移動する |
Option - →, Tab, w | 記号は単語の区切りとして扱って1つ前の単語に移動する |
B | 記号は単語の一部分として扱って1つ前の単語に移動する |
W | 記号は単語の一部分として扱って1つ前の単語に移動する |
[ | 1つ前のマークに移動する |
] | 1つ後のマークに移動する |
行の移動。
キー | アクション |
---|---|
^, Option-m | 行頭かインデントの開始位置に移動する |
0 | 行頭に移動する |
$ | 行末に移動する |
Enter, Return | 次の行の先頭に移動する |
その他のカーソル移動。
キー | アクション |
---|---|
g | バッファの先頭に移動する |
G | バッファの最後に移動する |
Ctrl - b, Page Up | 1画面分上に移動する |
Ctrl - f, Page Down | 1画面分下に移動する |
H | 可視領域の一番上に移動する |
M | 可視領域の真ん中に移動する |
L | 可視領域の一番下に移動する |
その他のコマンド。
キー | アクション |
---|---|
o | 選択範囲の反対側に移動する |
Ctrl - k, y | 選択しているものをコピーする |
参考サイト
ユーザー ID とグループ ID を表示する id コマンドのメモ。
ユーザー ID とグループ ID を表示する id コマンドの使い方のメモ。
このメモは ubuntu 20.10 の Docker コンテナ上の id コマンドを使っている。
$ docker container run --rm -it ubuntu:20.10 /bin/bash
id コマンドのバージョン。
$ id --version id (GNU coreutils) 8.32 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Arnold Robbins and David MacKenzie.
id コマンドの使い方
id コマンドはユーザー ID とグループ ID を表示するコマンド。
自分は普段そんなに使わなくて使うときになって使い方を調べたりすることがたまにあるので使い方をメモしておく。
--help オプション: ヘルプ
--help
オプションを指定すると id コマンドの使い方を表示する……んだけど man id
が使えないときにしか使わない
$ id --help Usage: id [OPTION]... [USER]... Print user and group information for each specified USER, or (when USER omitted) for the current user. -a ignore, for compatibility with other versions -Z, --context print only the security context of the process -g, --group print only the effective group ID -G, --groups print all group IDs -n, --name print a name instead of a number, for -ugG -r, --real print the real ID instead of the effective ID, with -ugG -u, --user print only the effective user ID -z, --zero delimit entries with NUL characters, not whitespace; not permitted in default format --help display this help and exit --version output version information and exit Without any OPTION, print some useful set of identified information. GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> Full documentation <https://www.gnu.org/software/coreutils/id> or available locally via: info '(coreutils) id invocation'
オプションなし
id コマンドはオプションなしで実行すると id コマンドを実行したユーザーのユーザー ID、ユーザーの名前、ユーザーが所属するすべてのグループ ID とグループの名前を表示する。
$ id uid=1000(alice) gid=1001(alice) groups=1001(alice),1000(employees) $ whoami alice $ groups alice employees
ちなみに SUID 属性とか SGID 属性が id コマンドに付与しているとこんな感じで実ユーザー ID、実グループ ID と実効ユーザー ID と実効グループ ID をすべて表示する。
# /home/alice/id uid=0(root) gid=0(root) euid=1000(alice) egid=1001(alice) groups=1001(alice)
-u, --user オプション: 実効ユーザー ID を表示する
-u
オプションか --user
オプションを指定すると実効ユーザー ID (effective ID) を表示する。
$ id --user 1000
-u
オプションか --user
オプションと一緒に -n
オプションか --name
オプションを指定するとユーザーの ID の代わりにユーザーの名前を表示する。
このときの表示は whoami コマンドを実行するときの表示と同じ。
$ id --user --name alice $ whoami alice
-g, --group オプション: 実効グループ ID を表示する
-g
オプションか --group
オプションを指定すると実効グループ ID を表示する。
$ id --group 1001
-g
オプションか --group
オプションと一緒に -n
オプションか --name
オプションを指定するとグループの ID の代わりにグループの名前を表示する。
$ id --group --name alice
-G, --groups オプション: ユーザーが所属するすべてのグループ ID を表示する
-G
オプションか --groups
オプションを指定するとユーザーが所属するすべてのグループ ID を表示する。
$ id --groups 1001 1000
-G
オプションか --groups
オプションと一緒に -n
オプションか --name
オプションを指定するとグループの ID の代わりにグループの名前を表示する。
このときの表示は groups コマンドを実行するときの表示と同じ。
$ id --groups --name alice employees $ groups alice employees
-n, --name オプション: ID の代わりに名前を表示する
-n
オプションか --name
オプションを指定すると ID の代わりに名前を表示する。
-n
オプションと --name
オプションは単独で指定することはできなくて以下のオプションと一緒に使っていく。
-u
オプションか--user
オプション-g
オプションか--group
オプション-G
オプションか--groups
オプション
-r, --real オプション: 実効ユーザー ID の代わりに実ユーザー ID を表示する
id コマンドはデフォルトは 実効ユーザー ID と実効グループ ID を表示するけど -r
オプションか --real
オプションを指定すると実効ユーザー ID と実効グループ ID の代わりに実ユーザー ID と実効グループ ID を表示する。
ちょっと分かりにくい気がするので id コマンドをコピーして SUID 属性と SGID 属性をコピーした id コマンドに付与してから実行してみる。
まずユーザー alice が id コマンドをコピーして SUID 属性と SGID 属性をコピーした id コマンドに付与していく。
chmod ug+s
で SUID 属性と SGID 属性を id コマンドに付与してから ls コマンドを実行すると id コマンドのパーミッションが rwxr-xr-x
=> rwsr-sr-x
に変わっているのが確認できる。
$ whoami alice $ pwd /home/alice $ cp /usr/bin/id . $ ls -l ./id -rwxr-xr-x 1 alice alice 47632 Dec 30 06:04 ./id $ chmod ug+s ./id $ ls -l ./id -rwsr-sr-x 1 alice alice 47632 Dec 30 06:04 ./id
su -
で root になってから /home/alice/id
コマンドを実行するとユーザー ID とグループ ID はそれぞれ実効ユーザー ID の alice
と実効グループ ID の alice
が表示するけど、 --real
オプションを指定して /home/alice/id
コマンドを実行するとユーザー ID とグループ ID はそれぞれ実ユーザー ID の root
と実グループ ID の root
が表示する。
$ su - # whoami root # /home/alice/id --user --name alice # /home/alice/id --group --name alice # /home/alice/id --user --name --real root # /home/alice/id --group --name --real root
あと id コマンドをオプションなしで実行すると実ユーザー ID、実グループ ID と実効ユーザー ID と実効グループ ID をすべて表示する。
# /home/alice/id uid=0(root) gid=0(root) euid=1000(alice) egid=1001(alice) groups=1001(alice)
-z, --zero オプション
id コマンドはデフォルトでは区切り文字は空白だけど -z
オプションか --zero
オプションを指定すると NULL 文字を区切り文字にする。
あと実行例の最終行が aliceemployees$
みたいになってて id --groups --name --zero
の表示のあとに改行がなくてすぐプロンプトが表示している。
$ id --groups --name alice employees $ id --groups --name --zero aliceemployees$
-z
オプションと --zero
オプションはデフォルトの表示フォーマットでは指定できないので --user
オプションとか --group
オプションとかと組み合わせて指定していく。
$ id --zero id: option --zero not permitted in default format
-Z, --context オプション
-Z
オプションか --context
オプションを指定するとセキュリティコンテキストを表示する。
SELinux が無効な環境で実行するとこんな感じに表示するよう。
$ id --context sysadm_u:sysadm_r:sysadm_t:s0
SELinux が無効な環境で実行するとこんな感じに表示する。
$ docker container run --rm -it ubuntu:20.10 /bin/bash $ id --context id: --context (-Z) works only on an SELinux-enabled kernel
-a オプション: 他のバージョンとの互換性のためにあるオプション
-a
オプションは他のバージョンとの互換性のためだけにあるオプションで指定しても id コマンドの動作は一切変わらない。
$ id uid=1000(alice) gid=1001(alice) groups=1001(alice),1000(employees) $ id -a uid=1000(alice) gid=1001(alice) groups=1001(alice),1000(employees) $ id --user --name alice $ id --user --name -a alice
参考サイト
ユーザーが所属するグループを表示する groups コマンドのメモ。
ユーザーが所属するグループを表示する groups コマンドの使い方のメモ。
このメモは ubuntu 20.10 の Docker コンテナ上の groups コマンドを使っている。
$ docker container run --rm -it ubuntu:20.10 /bin/bash
groups コマンドのバージョン。
# groups --version groups (GNU coreutils) 8.32 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David MacKenzie and James Youngman.
groups コマンドの使い方
groups コマンドはユーザーが所属するグループを表示するコマンド。
groups コマンドは使い方に関しては特に書くことがないくらいシンプルなコマンドだけど自分はたまに「あれ、どうやって使うんだっけ」みたいになるので使い方をメモしておく。
基本的な使い方
groups コマンドは groups <ユーザー>
みたいにユーザーを指定して実行すると指定したユーザーが所属するすべてのグループの名前を表示する。
# whoami root # groupadd employees # useradd alice --create-home --groups employees # groups alice alice : alice employees
groups コマンドは groups
みたいにユーザーを指定しないで実行すると groups コマンドを実行したユーザーが所属するすべてのグループの名前を表示する。
# su - alice $ whoami alice $ groups alice employees
--help オプション: ヘルプ
--help
オプションを指定すると groups コマンドの使い方を表示する……んだけど man groups
が使えないときにしか使わない。
# groups --help Usage: groups [OPTION]... [USERNAME]... Print group memberships for each USERNAME or, if no USERNAME is specified, for the current process (which may differ if the groups database has changed). --help display this help and exit --version output version information and exit GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> Full documentation <https://www.gnu.org/software/coreutils/groups> or available locally via: info '(coreutils) groups invocation'