More from: linux

ferenOSになった

自宅の古いノートPCにLinuxをインストールした。
ディストリビューションは迷った結果「ferenOS」になった。
今はそのノートからこのブログに書き込んでいる。
ブラウザと日本語入力に慣れていないのでちょっと勝手が違うが、これもカスタマイズと慣れでなんとかなるかな?

←クリックしてくれると嬉しいです。

Linuxでも入れてみようかな?

自宅には古くなって使わなくなったノートPCが転がっている。
古いと言ってもWindows7時代のPCもあるので捨てるのは勿体ない。
かといってスペック的にWindows10にするのもなんだかなぁ?という感じ。
そこでデスクトップ用(ここで言うデスクトップ用とはサーバー向けでは無くクライアントPC向けという意味)Linuxでも入れて使ってみようかと思い始めた。
Linuxだと”Ubuntu”が思い浮かぶが、探してみると他にも”ChaletOS”やら”Zorin OS”なんてものあるようだ(もちろんRED HATやCentOS等々もあるけど、遊びなのでそこまでのを入れるつもりは無い)。
2-3年前に古いEPSONのノートPC(シングルコアCPUでメモリ1GB程度)にubuntu(18.04辺り)を入れたら結構重くてブラウザ(FireFox)だけでも使い難かったが、今回考えているのはデュアルコア1.6GHzでメモリ2GBとかなりスペックアップしているPCなので大丈夫かと。
そこで迷うのはインストールするディストリビューションで、先に書いた3種の内のどれかにすることになりそうだなぁ。
あと、Linux Mint辺りも候補に入るかな。

←クリックしてくれると嬉しいです。

sambaサーバーへのファイルコピーが失敗する

Windows10PCからlinux(Red Hat系)で動作しているsambaサーバーへのファイル(フォルダ)のコピーが途中でエラーになってしまう。
大量にコピーしていたので個数の問題だと思い調べてみるとext3ファイルシステムで扱える1ディレクトリ当たりのファイルの個数はデフォルトで32,000らしい。
件のサーバーのシステムヘッダファイル”/usr/include/linux/ext3_fs.h”を見ると
—————————————–
/*
* Maximal count of links to a file
*/
#define EXT3_LINK_MAX 32000
—————————————–
と定義されていたのでやはり32,000(実際にはディレクトリそのもの”.”と上位ディレクトリ”..”を含むので31,998)個になっていた。
うーん、しかたないから分割して処理するかぁ、、、

←クリックしてくれると嬉しいです。

”ファイルを消しちゃった”って泣き付かれた・・・

ユーザーから”共有フォルダ(サーバー)内のファイルを間違って消してしまったけどどうにかならないか?”とSOSが来た。
いやね、そんな時のためにとsambaにゴミ箱機能を持たせてはあるんだけど、この人は以前にもサーバー内のフォルダを消してくれた”前科”があり、その時は私が保存していたファイルも数十個まとめて消してくれたんだよなぁ。
しかもその時はサルベージ出来ずファイルは永久に復活できなかったという嫌な記憶が甦って来た。
今回は消してしまったファイルは1個だけで、幸いにもゴミ箱内から復旧させることが出来たけど、”2度あることは3度ある”んだろうなぁ、、、

←クリックしてくれると嬉しいです。

改行コードを揃えて解決

昨日、「”grep”で行の完全一致を見つける」という記事を書いた。
その後少々検討した結果、改行コードをWindows(CR+LF)に揃えることで解決した。
実際に改行コードが異なるファイルで検証してみると”-x”オプションを付けると不一致とみなされたが、揃えると(当然だが)一致とみなされたのでWindows上での扱いを考えてCR+LFに統一した。
そもそも改行を何故LFのみにしていたのか思い出せ無いが、とりあえず上手くいったので良しとしよう(汗)。

←クリックしてくれると嬉しいです。

”grep”で行の完全一致を見つける

Linux上でファイル操作をしていて、あるファイルの中から別のファイルにある行と一致する行を取り除きたい。
単純に考えると
#grep -v -f hoge.txt gesho.txt
で出来るんだけど、この場合はhoge.txtのとある行を”含む”行が全て取り除かれてしまう。
例えばgesho.txtの中身が
“This is a pen”
“This is a pencil”
の2行だったとして、hoge.txtに
“This is a pen”
があると2行とも取り除かれてしまう。
そこで、行の完全一致のオプション”-x”を付けて
#grep -v -x -f hoge.txt gesho.txt
とすれば解決・・・の筈だったんだけど、実際には一致する行が無いと判断されてしまった。
理由はhoge.txtとgesho.txtで改行コードが異なっていた為orz。
Windows上で扱う関係でgesho.txtはCR+LFでないと困るが、反対にhoge.txtはLFである必要があって統一できない。
さて、どうするかなぁ?(汗)

grepに渡す時だけ”dos2unix”で改行コードを変換して、終わったら元に戻すのが簡単かな?

←クリックしてくれると嬉しいです。

”Output file suffixes exhausted”が出た。

linux上でファイルを分割するのに”split”コマンドを使っていて、”Output file suffixes exhausted”というエラーが出た。
読んでの通りで出力ファイルの接尾語が使い尽くされたということで、デフォルトの接尾語(aa-zzの676種)では足りなくなった。
これを回避するには”-a”オプションで接尾語の文字数を指定すれば良いということ。
今回の場合はスクリプト内に”-a 3”を追記したので、これまで2文字だった接尾語が”aaa-zzz”の3文字(‭17,576‬種)になり、事実上接尾語が足りなくなることは無くなった。

←クリックしてくれると嬉しいです。

Linuxでファイル分割

Linux上でテキストファイルを行単位で分割して加工するスクリプトを作っている。
テキストファイルの分割は”split”コマンドを使えば簡単なんだけど、その際に分割されたファイル名が”指定したベース+aa~zz”とアルファベットが追加された名前になってしまう。
分割されたファイル単位で処理をするので、ここは数字の方が扱いやすい。
どうにかならないかと思って調べてみたら、”-d”オプションで数字(デフォルトでは二桁)になるらしい。
早速試したところ”そんなオプションは無ぇ!”と怒られてしまったorz。
確かにヘルプを見てもそのオプションは無いので、どうもsplitが古いバージョンのもののようだ(汗)。
新しくするのも面倒だったのでスクリプトのループを変えて対処してしまった。

←クリックしてくれると嬉しいです。

ファイル名の途中に16進数を入れる方法(sh)

Linuxのshスクリプトでファイル名の途中に16進数を連番で入れる方法を探っていてようやく出来たのでメモ。
また、ファイルが存在する間だけ処理をするのでループ化している。

#!/bin/sh

no=0 #通し番号初期化
end=1 #ループ終了条件初期化

while test $end -eq 1
do
ファイル名=(必要なら)ディレクトリ名/固定文字列`printf %X$no`固定文字列
if [ -e $fname ];then
処理
no=$((no+1)) #通し番号インクリメント
else
end=0
fi
done

printf書式内のXはA-Fで表記するため、小文字の場合は%xにする。
さらに桁数固定なら%4Xのように桁数を指定する。

←クリックしてくれると嬉しいです。

巨大なテキストファイル・・・

メールの受信が出来なくなったとの連絡があって調べてみたら、サーバー上のスプールファイルが2GBに達していた。
これではpop3でのログインだけでも時間がかかってしまうので、悩んだ挙句分割することにした。
サーバー上でバックアップをとってからそのバックアップファイルをviで開こうとしたが、しばらく経っても開き切らない(汗)。
そこでPC上で分割してからエディターで開いて加工をしてスプールに戻したが、この作業に数時間を費やしてしまったorz。
問題のアカウントに来るメールを一部別アカウントに振り向けたのでしばらくはこんなことは無いと思う。

←クリックしてくれると嬉しいです。