dak ブログ

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

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


split コマンドでのファイル分割

2022-03-01 23:39:45 | linux
split コマンドの実行方法のメモ。

テキストファイルを1000行ごとに分割し、通し番号のサフィックスにファイルを分割するには、
-l で行数を指定し、-d で通し番号での分割を指定します。
split -l 1000 -d text.txt text.txt.

■実行結果
text.txt.00
text.txt.01
text.txt.02
text.txt.03


CentOS8 のデスクトップを Xfce に変更

2022-02-26 19:33:44 | linux
CentOS8 のデスクトップに GNOME を利用していましたが、
メモリ使用量が多かったため、軽量と言われている Xfce に変更してみました。
sudo yum install -y epel-release
sudo yum groupinstall -y Xfce

再起動後に「サインイン」の横の歯車から「Xfce セッション」を選択してログインすると
Xfce でログインできます。
GNOME 利用時よりも空きメモリの量が増えていました。

CentOS8 で yum install でのエラー対処

2022-02-20 15:45:59 | linux
CentOS8 で yum install がエラーになり、
mirrorlist の URL を mirrorlist.centos.org から vault.centos.org に
変更すればよいという情報もありましたが、エラーが解消されないため、
以下の設定を行いました。

■/etc/yum.repos.d/CentOS-Linux-AppStream.repo
[appstream]
name=CentOS Linux $releasever - AppStream
baseurl=http://linuxsoft.cern.ch/centos-vault/8.4.2105/AppStream/$basearch/os/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

baseurl 内のバージョン番号部分に $reeasever を記述すると、バージョンが 8 になってしまい、
エラーが続いたため、/etc/redhat-release に記述されているバージョン番号を指定しました。

/etc/yum.repos.d/ 内の他のファイルについても同様に URL を変更することで、
エラーが解消されました。

wget でのタイムアウト指定

2022-01-04 20:37:25 | linux
wget でタイムアウトを指定する方法のメモ。

wget でタイムアウトさせるには、--timeout {秒数} オプションを指定します。
デフォルトでは、タイムアウトするとリトライするため、リトライさせないようにするには、
初回アクセスを含む最大試行回数を -t オプションで指定します。
wget --timeout 3 -t 1 https://www.goo.ne.jp/

上記のコマンドの例では、3秒でタイムアウトするとリトライせずに終了します。

sort コマンドでの複数キーによるソート

2021-12-08 20:49:47 | linux
sort コマンドで複数のキーによるソート方法のメモ。

sort コマンドでは、カラム毎に文字列/数値、昇順/降順を組み合わせてソートすることができます。
以下は sort -k 2n -k 3nr -k 1 の実行例ですが、次の条件でソートしています。
 -k 2n: 第2カラムを数値の昇順
 -k 3nr: 第3カラムを数値の降順
 -k 1: 第1カラムを文字列の昇順
$ cat test.txt
abc1	1	100
abc2	1	50
abc3	1	100
abc4	1	50
def1	2	50
def2	2	25
def3	2	50
def4	2	25
ghi1	5	20
ghi2	5	10
ghi3	5	20
ghi4	5	10
jkl1	10	10
jkl2	10	5
jkl3	10	10
jkl4	10	5

$ cat test2.txt | sort -k 2n -k 3nr -k 1
abc1	1	100
abc3	1	100
abc2	1	50
abc4	1	50
def1	2	50
def3	2	50
def2	2	25
def4	2	25
ghi1	5	20
ghi3	5	20
ghi2	5	10
ghi4	5	10
jkl1	10	10
jkl3	10	10
jkl2	10	5
jkl4	10	5


awk での cut

2021-12-07 23:49:17 | linux
cut コマンドで tsv ファイルの指定カラムの値のみを抽出することができます。
$ cat test1.txt
col11	col12	col13	col14
col21	col22	col23	col24
$ cat test1.txt | cut -f 1,2
col11	col12
col21	col22

cut コマンドで、カラムの順番を変更して 1カラム目、3カラム目、2カラム目 の順で項目を指定しても、
指定した順の結果は得られません。
$ cat test1.txt | cut -f 1,3,2
col11	col12	col13
col21	col22	col23

awk ならカラムの順番を任意の順で出力することができます。
$ cat test1.txt | awk -F "\t" '{OFS="\t"; print $1, $3, $3, $2}'
col11	col13	col13	col12
col21	col23	col23	col22



curl でクエリ文字列を URL エンコードして HTTP リクエストを送信

2021-10-20 21:40:59 | linux
curl でクエリ文字列を URL エンコードして HTTP リクエストを送信する方法のメモ。

curl でクエリ文字列を URL エンコードするには以下のように --data-urlencode {パラメータ}={値} の形式でパラメータを指定します。
curl 'http://search.goo.ne.jp/web.jsp' \
  -v \
  --get \
  --url-urlencode 'IE=UTF-8' \
  --url-urlencode 'OE=UTF-8' \
  --url-urlencode 'MT=検索'

上記を実行すると -v オプションを指定しているため、リクエストヘッダが表示されますが、
URL は以下のように URL エンコードされています。
GET /web.jsp?IE=UTF-8&OE=UTF-8&MT=%E6%A4%9C%E7%B4%A2 HTTP/2


次に、単純に URL に MT=検索 を指定して HTTP リクエストを送信してみます。
curl -v 'http://search.goo.ne.jp/web.jsp?IE=UTF-8&OE=UTF-8&MT=検索

リクエストされた URL には「検索」がそのまま含まれていることがわかります。
GET /web.jsp?IE=UTF-8&OE=UTF-8&MT=検索 HTTP/2


apache 2.4系でのアクセス制限

2021-09-30 20:11:11 | linux
apache 2.4系でのアクセス制限の設定方法のメモ。

以下のようにして、特定の複数のIPからのみアクセスを許可する設定をしてみました。
<RequireAll>
  Require all granted
  <RequireAny>
    Require ip xx.xx.xx.xx
    Require ip yy.yy.yy.yy
    Require ip zz.zz.zz.zz
  </RequireAny>
<RequireAll>