jq コマンドで jsonl の要素を追加・追加する方法のメモ。
json データ
$ cat test1.jsonl {"abc": "abc", "def": "def", "ghi": "ghi"}
要素の追加
以下で "jkl" に "abc" の値を追加します。
$ cat test1.jsonl | jq -c '. + {"jkl": .abc}' {"abc":"abc","def":"def","ghi":"ghi","jkl":"abc"}
要素の削除
以下で "ghi" の要素を削除します。
$ cat test1.jsonl | jq -c 'del(.ghi)' {"abc":"abc","def":"def"}
要素の追加・削除
| で連結することで追加、削除を1コマンドで実行します。
$ cat test1.jsonl | jq -c '. + {"jkl": .abc} | del(.ghi)' {"abc":"abc","def":"def","jkl":"abc"}
テキストファイルの N行目以降を出力する方法のメモ。
tail コマンド
tail -n +N で N行目以降を出力することができます。
$ cat test.txt 1 2 3 4 5 6 7 8 9 10
$ cat test.txt | tail -n +3 3 4 5 6 7 8 9 10
sed コマンド
sed '1,Nd' で先頭の N行スキップします。
$ cat test.txt | sed '1,2d' 3 4 5 6 7 8 9 10
awk コマンド
awk 'NR > N' で先頭N行をスキップします。
$ cat test.txt | awk 'NR > 2' 3 4 5 6 7 8 9 10
jq による JSONL データからのデータ抽出の例
$ cat test.jsonl {"abc": "abc", "def": "def"} {"abc": "ghi", "def", "jkl"}
指定項目を出力
$ cat test.jsonl | jq -c '{abc: .abc}' {"abc":"abc"} {"abc":"ghi"}
-c を指定しない場合は以下のような出力となります。
{ "abc": "abc" } { "abc": "ghi" }
実行中のプロセスをバックグラウンドで実行する方法のメモ。
いま以下を実行している状態です。
$ cat test.txt | python test.py > result.txt
このまま端末を終了すると、プロセスも終了してしまいます。
そのため、以下でバックグラウンドで実行します。
コマンドを一時停止
ctrl + z でプロセスを一時停止します。
バックグラウンドで再開
$ bg
プロセスをシェルセッションから切り離す
$ disown -h %1
これで端末を終了しても、バックグラウンドでプロセスが実行され続けます。
flask 等で作成したアプリケーションを apache の proxy の設定で 80 番ポートで公開する方法のメモ。
ここでは、5001 番ポートで /app/test/ ディレクトリでアプリケーションを作成したものとします。
/etc/httpd/conf/httpd.conf に設定を追加
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyPass /app/test/ http://127.0.0.1:5001/app/test/ ProxyPassReverse /app/test/ http://127.0.0.1:5001/app/test
apache を再起動
$ sudo apachectl restart
http 通信の許可
/var/log/httpd/error_log に以下のログが出力されている場合には、setsebool コマンドで http 通信を許可します。
(13)Permission denied: AH00957: http: attempt to connect to ...
$ sudo setsebool -P httpd_can_network_connect 1
firewall-cmd による他ホストからの http アクセス許可方法のメモ。
Windows 上に VirtualBox でインストールした Linux の web サーバに、Windows からアクセスができなかったため、firewall-cmd でアクセス許可の設定を行いました。
公開サービスの確認
以下で services に http が出力されていないため、http が公開されていません。
$ sudo firewall-cmd --info-zone public public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
http サービスの確認
$ sudo firewall-cmd --info-service http http ports: 80/tcp protocols: source-ports: modules: destination: includes: helpers:
http を公開設定
$ sudo firewall-cmd --permanent --zone public --add-service http success
設定を反映
$ sudo firewall-cmd --reload success
公開サービスの確認
以下で services に http が出力されていることが確認できます。
$ sudo firewall-cmd --info-zone public public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: cockpit dhcpv6-client http ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Rocky Linux に gcloud CLI をインストールする方法のメモ。
以下を参考にインストールします。
https://cloud.google.com/sdk/docs/install-sdk?hl=ja#rpm
$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM [google-cloud-cli] name=Google Cloud CLI baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el9-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
$ sudo yum install google-cloud-cli
インストール後に gcloud init を実行します。
$ gcloud init
コマンドラインで GCP の機能を利用するには以下を実行します。
less コマンドでタブの幅を変更する方法のメモ。
以下のファイルをタブの幅を変更して表示します。
1234567890123456789 abc {TAB}def {TAB}{TAB}ghi
less -x{num} でタブを num 個分の空白文字に変更できます。
$ less -x8 test.txt 1234567890123456789 abc def ghi $ less -x4 test.txt 1234567890123456789 abc def ghi $ less -x2 test.txt 1234567890123456789 abc def ghi
Windows に Virtual Box をインストールして Rocky Linux を動かしてみました。
python
VirtualBox のインストールに必要な python をインストール
- python.org で windows 版 python をダウンロード。
https://www.python.org/downloads/windows/ - インストーラを実行してインストール。
初期画面で path の追加にチェックしておく - コマンドプロンプトを起動し、以下で win32api をインストール。
pip install pywin32
OS イメージ
- 以下で Rocky Linux をダウンロード。
https://rockylinux.org/ja/download
Virtual Box
- 以下で Virtual Box の Windows インストーラをダウンロード。
https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html - インストーラを実行して Virtual Box をインストール。
- Virtual Box を起動し、Rocky Linux の iso イメージファイルから Rocky Linux をインストール。
- インストール中に root のパスワード設定と、ユーザ作成時に管理者設定を行う。
- Virtual Box の 設定 > ネットワーク > 割り当て で「ブリッジアダプター」を指定。
- IP アドレスの確認のため、Rocky Linux のコンソールで ifconfig をインストール
sudo yum install net-tools
$ od -tx1z mod_global_header_goo_logo.webp | head 0000000 eb 63 90 90 90 90 90 90 90 90 90 90 90 90 90 90 >.c..............< 0000020 90 90 90 90 90 90 90 90 90 90 eb 49 24 12 0f 09 >...........I$...< 0000040 00 52 be 1b 7c 31 c0 cd 13 46 8a 0c 84 c9 75 10 >.R..|1...F....u.< 0000060 be 39 7c e8 74 01 e9 3d 01 46 6c 6f 70 70 79 00 >.9|.t..=.Floppy.< 0000100 bb 00 70 8e c3 31 db b8 01 02 b5 00 b6 00 cd 13 >..p..1..........< 0000120 72 d3 b6 01 b5 4f e9 98 00 00 00 80 00 00 00 00 >r....O..........< 0000140 00 00 00 00 ff fa eb 05 f6 c2 80 74 05 f6 c2 70 >...........t...p< 0000160 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc >t....y|..1......< 0000200 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 80 7d >. ..d|<.t...R..}< 0000220 e8 17 01 be bf 7d b4 41 bb aa 55 cd 13 5a 52 72 >.....}.A..U..ZRr<
以下のように jq コマンドで文字列を URL エンコードすることができます。
$ ENC=`echo -n 'abc あいう def' | jq -Rr @uri` $ echo ${ENC} abc%20%E3%81%82%E3%81%84%E3%81%86%20def
echo の -n は文字列を改行しないで出力。
jq の -R は raw-input、-r は raw-output。
半角スペースは %20 にエンコードされています。
■データファイル
1 2 3 4 5 a1 b2 c3 d4 e5 A1 B2 C3 D4 E5
■awk スクリプト
awk 'match($3, /^[a-z]([0-9]+)$/, m) {FS="\t"; OFS="\t"; print $1, $2, m[1], $4;}'
■実行結果
a1 b2 3 d4
■インストール
json-server は npm でインストールします。
npm install -g json-server
■データファイル
db.json ファイルに返却データを作成します。
{ "path1": [ {"id": "1_1", "key": "key1_1", "value": "value1_1"}, {"key": "key1_2", "value": "value1_2"} ], "path2": {"key": "key2_1", "value": "value2_1"} }
■json-server の実行
上記の db.json を指定して json-server を実行します。
json-server db.json
■確認1
path1 を指定すると path1 に指定したデータが返却されます。
$ curl http://localhost:3000/path1 [ { "id": "1_1", "key": "key1_1", "value": "value1_1" }, { "key": "key1_2", "value": "value1_2" } ]
json-server には以下のようにログが出力されます。
GET /path1 200 37.859 ms - 127
■確認2
path1 のデータの id の値の 1_1 を指定すると、id に対応するデータが返却されます。
$ curl http://localhost:3000/path1/1_1 { "id": "1_1", "key": "key1_1", "value": "value1_1" }
json-server には以下のようにログが出力されます。
GET /path1/1_1 200 8.266 ms - 59
■確認
$ update-alternatives --list libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so python auto /usr/libexec/no-python ... java_sdk_1.8.0_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64 google-chrome auto /usr/bin/google-chrome-stable
■デフォルトブラウザを /usr/bin/google-chrome に設定
$ sudo update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/google-chrome 1
末尾の 1 は優先度です
■確認
$ update-alternatives --list libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so python auto /usr/libexec/no-python ... java_sdk_1.8.0_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64 google-chrome auto /usr/bin/google-chrome-stable x-www-browser auto /usr/bin/google-chrome