goo blog サービス終了のお知らせ 

dak ブログ

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

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>


apache のリバースプロキシの設定

2021-09-30 19:55:46 | linux
apache 2.4系のリバースプロキシの設定のメモ。

/foo/ へのリクエストを同一サーバの 9000 番ポートの /bar/ にアクセスするように以下の設定を行いました。
ProxyPass /foo/ http://localhost:9000/bar/
ProxyPassReverse /foo/ http://localhost:9000/bar/

しかし、apache の設定だけでは、http://localhost:9000/bar/ にはリクエストが送信されず、
エラーログに client denied by server configuration が出力されます。
httpd.conf での設定以外に apache の他サーバへの接続許可の設定を行う必要があります。
sudo setsebool -P httpd_can_network_connect on

設定を確認するには getsebool を使います。
sudo getsebool httpd_can_network_connect


linux の chrome で html を pdf に変換する方法のメモ

2021-09-21 21:14:17 | linux
linux の chrome で html を pdf に変換する方法のメモ

■chrome のインストール
/etc/yum.repos.d/google.chrome.repo を作成します。
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

安定版をインストールします。
sudo yum install google-chrome-stable

■chrome で html を pdf に変換
--print-to-pdf オプションを指定すると、html を pdf に変換することができます。
google-chrome \
    --disable-gpu \
    --headless \
    --print-to-pdf={pdf_file} \
    {url}

以下は、https://www.goo.ne.jp/ を pdf にする例です。
google-chrome \
    --disable-gpu \
    --headless \
    --print-to-pdf=www_goo_ne_jp.pdf \
    'https://www.goo.ne.jp'


画像形式の判定方法

2021-02-06 13:15:10 | linux
画像形式をデータから判定する方法のメモ。

画像ファイルの形式は、画像データの先頭のバイト列のマジックナンバーをチェックすることで判定することができます。
画像 URL の拡張子と画像データの形式が一致しない場合でも、画像データの先頭をチェックすることで、画像形式の判定を行うことができます。

jpg: 先頭が 0xff 0xd8
png: 先頭が 0x89 0x50(P) 0x43(N) 0x47(G)
gif: 先頭が 0x47(G) 0x49(I) 0x46(F)

ちなみに、gzip の場合は先頭が 0x1f 0x8b となります。

例えば、perl の場合には以下のようにして判定を行うことができます。
   if ($obj =~ /^\xff\xd8/) {
        print("jpg\n");
    }
    elsif ($obj =~ /^\x89\x50\x43\x47/) {
        print("png\n");
    }
    elsif ($obj =~ /^\x47\x49\x46/) {
        print("gif\n");
    }
    elsif ($obj =~ /^\x1f\x8b/) {
        print("gzip\n");
    }
    else {
        print("other\n");
    }