dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

テキストファイルの N行目以降を出力

2024-09-24 23:18:30 | linux

テキストファイルの 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 データからのデータ抽出

2024-09-23 23:27:35 | linux

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"
}

実行中のプロセスをバックグラウンドに移行

2024-09-23 22:19:06 | linux

実行中のプロセスをバックグラウンドで実行する方法のメモ。

いま以下を実行している状態です。

$ cat test.txt | python test.py > result.txt

このまま端末を終了すると、プロセスも終了してしまいます。

そのため、以下でバックグラウンドで実行します。

コマンドを一時停止

ctrl + z でプロセスを一時停止します。

バックグラウンドで再開

$ bg

プロセスをシェルセッションから切り離す

$ disown -h %1

これで端末を終了しても、バックグラウンドでプロセスが実行され続けます。


apache の proxy によるアプリケーションの公開

2024-09-22 18:04:53 | linux

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 アクセス許可

2024-09-22 14:04:43 | linux

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 をインストール

2024-07-28 00:25:50 | linux

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 の機能を利用するには以下を実行します。

$ gcloud config set project {project_id}

less でタブの幅を変更

2024-07-17 23:09:35 | linux

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

Virtual Box を使って Windows で Rocky Linux を起動

2024-07-15 15:25:31 | linux

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 コマンドでバイナリファイルのデータを表示

2024-06-26 00:21:37 | linux
od コマンドでバイナリファイルのデータを表示する方法のメモ。 goo ブログの「goo」の画像ファイルのデータの中身を表示します。
$ 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 エンコード

2024-01-28 20:33:42 | linux
jq コマンドで文字列を URL エンコードする方法のメモ。

以下のように 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 にエンコードされています。

awk での match() による文字列置換

2023-03-25 12:55:35 | linux
awk の match() による文字列置換のメモ。
■データファイル
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 によるモックサーバ

2023-03-18 12:53:32 | linux
json-server で API のテスト用のモックサーバを動かすことができます。

■インストール
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


linux のデフォルトブラウザを google-chrome に設定

2022-09-17 11:34:50 | linux
linux のデフォルトブラウザを google-chrome に設定する方法のメモ。

■確認
$ 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


awk で指定値以上の値の行を抽出

2022-05-19 23:43:34 | linux
awk で指定値以上の値の行を抽出する方法のメモ。

■ファイル
abc     1
def     11
ghi     5


■コマンド
cat test1.txt \
| awk '$2 >= 10 {FS="\t"; OFS="\t"; print $1, $2}'


■実行結果
def     11


apache で 403 Forbidden になる場合の対処方法

2022-03-15 23:52:28 | linux
apache で公開したいファイルのパーミッションなどに問題はなく、
403 Forbidden になる場合に以下を実行することでエラーが解消しました。
■setenforce で permissive モードに変更
sudo setenforce 0

■setenforce は一次的な設定変更のため、/etc/selinux/config を変更
#SELINUX=enforcing
SELINUX=permissive