以下の内容はhttps://let.blog.jp/tag/Linuxより取得しました。


インストールしたいコマンドのパッケージ名がわからないとき
ps コマンドってデフォルトで入ってないこともあって 追加でインストールしたいことがあります
ps コマンドをインストールするのに必要なパッケージは RPM だと

procps-ng

です

多くのコマンドはコマンド名のままなのに特殊過ぎます
覚えられません

そういうときはインストールするコマンドのパスを指定すればいいです

dnf install /usr/bin/ps

これで procps-ng がインストールできます
大抵のコマンドは /usr/bin にインストールされるので困ったときはやってみるといいです
npm run で command というコマンドを実行できない
package.json に

{
....
"scripts": {
"c1": "command1"
},
....
}

と書けば 「npm run c1」 で command1 というコマンドを実行できます
この command1 に当たるコマンドは通常 npm などでインストールしたパッケージに含まれるコマンドです

推奨される方法ではないですが 直接 node_modules フォルダ内に .bin/command1 というファイルを配置すれば実行できます

#!/usr/bin/env node

console.log(123)

という中身にします

Windows の場合は command1.cmd のように cmd 拡張子をつけて 中身は cmd ファイル (bat ファイル) にします
.js ファイルを実行するなら node コマンドを呼び出します

Linux の場合はファイルの実行権限が必要なので chmod で追加します

これで 「npm run c1」 を実行すると

root@abc0c5fc3c92:/mnt/88# npm run c1

> 88@1.0.0 c1
> command1

123

のように実行されます

ここで command1 は存在してパスの通っているコマンドやシェルのビルトインと同名でも大丈夫です
例えば

{
....
"scripts": {
"c1": "ls"
},
....
}

として node_modules/.bin/ls にファイルをおけば この ls が実行されます
ファイルの一覧が表示されたりはしません
しかし command というコマンドにした場合 なぜかシェルビルトインが優先されるような動きで node_modules/.bin/command が使用されないです

root@abc0c5fc3c92:/mnt/88# npm run c1

> 88@1.0.0 c1
> ls

123

root@abc0c5fc3c92:/mnt/88# npm run c1

> 88@1.0.0 c1
> command

123 が表示されていません
npm でも yarn でも同じ結果です
Windows では command.cmd を実行するからか問題ないです
たぶん Linux 側の仕様によるものな気がしますが これにハマって時間をとられました
ファイルから重複行を除外する
foo
bar
foo
foo
bar
bar
foo

みたいな中身のファイルがあったときに重複する行を削除して

foo
bar

だけにしたいです

Linux なら uniq コマンドが使えます
ただし uniq コマンドが除外するのは連続する重複する行なので今回みたいなケースではソートも行う必要があります

sort file.txt | uniq

でもこれってソートが無駄に思います
重複行を除去するだけなら一旦並び替えなくても 1 行ずつ読み取っていくだけでもできるはずです
あと 並びが替わってしまうので本来の並び順でほしい場合には使えません

特にちょうど今 重複除去したいデータはファイルは大きめですがほとんどが重複で最終的には 100 行にも満たないものです
1 行ずつ見ていくプログラムを作ったほうが速く処理できたりしそうです

ということで

import sys

if len(sys.argv) < 2:
exit()

filename = sys.argv[1]

with open(filename) as file:
set = set()
while line := file.readline():
line = line.rstrip("\n")
if line not in set:
set.add(line)
print(line)

というコードを用意しました
全件のソートという重そうな処理をスキップするわけですし スクリプト言語の Python ですがこっちのほうが速いのではないでしょうか

試してみます

ほとんどの行が重複するデータを作ります

values = ["a", "b", "c"]
values_len = len(values)

for i in range(10 * 1000 * 1000):
value = values[i % values_len]
print(value)

1000 万行で a,b,c のいずれかが入ってます
各行に改行文字も入るのでファイルサイズは 20MB になりました

それぞれの処理速度を比べてみます

[root@552d14e2dbe8 i]# python3 gen.py > data.txt

[root@552d14e2dbe8 i]# time python3 uniq.py data.txt
a
b
c

real 0m2.161s
user 0m2.160s
sys 0m0.000s

[root@552d14e2dbe8 i]# time ( sort data.txt | uniq )
a
b
c

real 0m1.242s
user 0m5.444s
sys 0m0.533s

ソートしたほうが速くなってますね……
user が real を超えているのでソートはマルチスレッドで処理しているのでしょうけど それにしても速すぎません?
数回実行してもだいたい同じような速度でした

1 行ずつ読み取って set に入ってるかチェックするだけなので Python でも十分な速度だと思いましたが 結構遅いのでしょうか?
set のハッシュ値計算や末尾の改行を除去する部分が遅め?

データ量を変えてもう 1 パターン試してみます
20MB より小さくしても 十分高速で速度を気にする必要もなさそうなので もっとサイズを大きくします

values = ["aaa", "bbb", "ccc"]
values_len = len(values)

for i in range(50 * 1000 * 1000):
value = values[i % values_len]
print(value)

5000 万行で 各行の文字数も増やしました
ファイルサイズは 191MB です

[root@198ac3e26189 opt]# time python3 uniq.py out.txt
aaa
bbb
ccc

real 0m12.368s
user 0m12.249s
sys 0m0.110s

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m8.984s
user 0m31.583s
sys 0m3.061s

これでもソートするほうが速いですね

ところで最初は遅めで何度か実行すると速くなりました
ブラウザと違って内部で情報を保持しないので 2 回目以降で劇的に速度が変わることはなさそうに思うのですけど
OS 側のファイルキャッシュ都合とかでしょうか

間で特別なことはせず単純に連続して実行した結果です

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m30.542s
user 1m16.845s
sys 0m13.606s

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m21.338s
user 0m46.432s
sys 0m15.657s

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m12.536s
user 0m32.160s
sys 0m7.133s

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m9.317s
user 0m30.287s
sys 0m3.861s

[root@198ac3e26189 opt]# time ( sort out.txt | uniq )
aaa
bbb
ccc

real 0m8.795s
user 0m31.538s
sys 0m2.983s

とりあえず ソートしても十分に速いのであまり気にしなくて良さそうです
並列処理前提なのでコアが 1 つしかない VM 環境とかだと話は変わってきそうですけど

また sort -u にすればソート時に重複する行を排除してくれて結果が同じになります
こっちのほうが速いかなと思いましたが 特に変わらないようでした

残る問題は並びが変わってしまうことです
uniq で得られる各行を元ファイルから探索して行数をもとに並び替えというのは面倒そうです
それに重複率が低い場合はほとんどの行を探索することになってここで時間がかかりそうです
コマンドのオプションを見てもいい感じにできそうなものがなかったですが いい方法ないのでしょうか
sshd のデフォルトで root ログインできない
root でログインしようとしたら何度パスワード打っても失敗と言われる
別のと間違ってる?と思って一般ユーザでログインしてから su コマンドで root のパスワード打つと root でログインできてる

デフォルトで root 拒否されてたっけと思い調べてみたら

PermitRootLogin prohibit-password

がデフォルトみたい
https://man.openbsd.org/sshd_config#PermitRootLogin

これだとパスワードログインが無効化されて鍵ファイルを使った認証が必要
昔は普通に yes だった気がするから変わったのかな

root ユーザのみだと鍵ファイル配置か設定変えるまで 外部からログインできないの不便そう
AlmaLinux がリリースされた
AlmaLinux がリリースされたようです
先週か先々週くらいに見たときにはまだ rc がついてた気がするのですが さっき見に行ったら rc が外れていました
https://repo.almalinux.org/almalinux/8/isos/x86_64/

私の普段使いは Fedora と WSL の Ubuntu なのですが ところどころ CentOS を使ってました
基本放置で安定して動いていてくれればいいってところには向いてますからね
更新は最低限だけですし 自動更新を設定して放置で問題もないですし

そんな CentOS の最新版の 8 が急にサポート方針を変えて 8 は今年 2021 年末で終わるそうです
公式の代替の CentOS Stream はサポート期間が短くて一つ前の CentOS7 より短いです

CentOS7 ▶ 2024/06/30
CentOS8 Stream ▶ 2024/05/31

Alma Linux はもともとの CentOS8 と同じらしく 2029 年までとかなり長いです

同じく CentOS の代替として始まったプロジェクトの RockyLinux の方は 2021 Q2 にリリース予定なので 4 ~ 6 月みたいです
もう少し先のようですね
systemctl 使わず Apache を操作する
動かしたい PHP のページがあるけど ちょうど使える環境がない
Docker に CentOS のイメージ入ってたしこれでいいか

みたいな感じで試してみたら systemctl が動かない!


Docker だと PID 1 が systemd じゃなくて systemd が起動していません
そのせいで systemctl コマンドは使えません

Apache の場合 httpd コマンドを実行するだけでバックグラウンドで動作します
再起動や停止するには httpd -k に stop などのコマンドを指定します

httpd -k stop
httpd -k restart

また systemd が使えないと apachectl も同様に使えません

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
***ctl コマンド
systemctl や timedatectl や hostnamectl みたいなの

他になにあるんだろうと bin と sbin フォルダで検索してみた結果

環境は fedora 31 で 追加で入れたパッケージに入ってたものもあるし (pg_ctl など) 入れてないパッケージのものは含まれてないから網羅できてるわけでもない

~> ls /usr/bin | grep ctl
bluetoothctl
bootctl
busctl
coredumpctl
evmctl
hostnamectl
journalctl
kdumpctl
keyctl
localectl
loginctl
networkctl
pg_ctl
portablectl
resolvectl
systemctl
teamdctl
timedatectl
udisksctl
wdctl
~> ls /usr/sbin | grep ctl
apachectl
auditctl
brctl
cupsctl
remotectl
smartctl
sysctl
usernetctl
zramctl
less は gzip ファイルも見れた
めったに見ないけど消すわけにもいかないテキストファイルがそこそこなファイルサイズをとってたので gzip しとこうかなーと考えてました
ただ圧縮するとみるとき不便なのが困るところです

gzip を less で見るならまず展開必要なのでこういうの?

zcat file.gz | less

zless とかないのかなって調べてみると普通にありました

さっそく試してみようと zless を使ったはずが……癖で z なしの less コマンドで開いてしまいました
なのに見えてます!
間違って普通のテキストファイル開いたのかなって確認しましたが gzip のファイルでした
less は gzip されていても自動で展開してくれるみたいですね

なら cat は? と思って試したら cat は gzip だとバイナリが表示されました
zcat が必要みたいです

less はユーザが見るために限られるのでバイナリ開くメリットないですが cat は結合や別のコマンドの標準出力に送るために使うから勝手に展開はしないんだと思います
Liri OS
なんとなく fedora の派生ディストリを眺めたら Hawaii OS というのを発見
なんでハワイ?
ハワイっぽいデザインなのかなと見てみたら

Hawaii is now Liri OS
Hawaii merged with Papyros and is now Liri OS.

http://hawaiios.org/

Liri OS にマージされたみたい
これもはじめて聞いたけど UI のデザインがよさそう
スクリーンショット一覧を見てみてもモダンな感じ
ロゴは折り紙でや名前もわりと好きでちょっと興味あり

Hawaii OS が fedora 派生だったんだからこれも fedora 派生?と思ったのに調べてみると Arch ベースらしい
fedora 以上に新しいのをすぐに取り込む分問題も多いらしいし迷うところ

UI を揃えるために独自にいろいろなソフトウェアも用意してるみたいでリポジトリがいっぱい
https://github.com/lirios
liri ブラウザなんてのもある
elm repl でエラーが出るとき
> elm repl
/home/user/n/lib/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-repl: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

ってエラーが出るとき

ncurses-compat-libs をインストールすれば使えるようになる (最近の fedora の場合)

sudo dnf install ncurses-compat-libs
VM の HDD サイズを拡張する
環境ごとの方法で VM の仮想 HDD サイズを適当に広げる

parted で LVM パーテーションを広げる
parted

parted の中で
resizepart 2 100%
「2」 のところは parted 中に 「p」 で表示されるパーテーション ID

pvresize で Physical volume を広げる
pvresize /dev/sda2

lvresize で Logical volume を広げる
lvresize -l +100%FREE /dev/fedora/root

xfs_growfs でファイルシステムを広げる
xfs_growfs /
/dev/mapper/fedora-root や /dev/fedora/root だと 「is not a mounted XFS filesystem」 と言われるのでマウントしてる場所を指定
綺麗な GUI Linux
最近 GUI で Linux 使ってないなー
もう2018 年だし 綺麗な GUI 環境もどんどん増えてたりするのかな
と思って軽く調べてみた

https://fossbytes.com/most-beautiful-linux-distros/

ElementaryOS 以外特に聞き覚えがないけど 見た目はいい感じのがいろいろ
ただ こういうのってスクショでみて綺麗でも使ってみると XP の頃の Windows よりイマイチ ってこともあるしとりあえず実際に使ってみたほうがよさそう
暇な時になにか入れてみようかな
/run がいっぱいだった
vm の web ページにアクセスするとつながらない
ping は通る
ssh もつながる

systemd で httpd の restart すると失敗

放置してる vm のサービスおかしくなるのは メモリ不足かストレージ不足のどっちかが多いのでログを見ても oom とかそういうのはなさそう
df 見ると /run が 100%

ここってこんなものだったかなぁ……?

使用率は

/run/systemd/sessions

だけで 9 割近く

連番で最後は 99999 だったので 10 万ファイル??

tmpfs で再起動したら消えるやつだし と

cd /run/systemd/sessions
ls * | xargs rm

してスッキリさせたら restart できた

どうしてこんなにいっぱいになってたんだろう?



以上の内容はhttps://let.blog.jp/tag/Linuxより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14