投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2019年2月19日火曜日

【Linux CentOS 7】ディレクトリの内容を全てzipファイルに圧縮する方法


指定したディレクトリの内容を再帰的に取り出して、全てzipファイルに圧縮する。

# zip -r output.zip directoryname


<参考>
・ZIP command in Linux with examples
< https://www.geeksforgeeks.org/zip-command-in-linux-with-examples/ > 2019年2月19日

2019年2月18日月曜日

【Linux CentOS 7】mount.cifsコマンドでNASにマウントしたときの試行錯誤メモ【cifs-utils 6.2】

更新 2023年3月4日

メーカー製のネットワーク接続型のHDD(いわゆるNAS)を、
Linux CentOS 7の mount.cifs コマンドでマウントしようとするがなかなかうまくいかなかったのでメモしておく。


○GUIで失敗

最初、デスクトップ環境MATEに標準のGUIから「Windows共有」を選んで接続しようとしたが、
ユーザーとパスワードを聞かれてうまくいかなかった。
NASには認証設定がされていないのでそれらを入力する必要はないと考えた。


○mount.cifsの試行錯誤

そこで、mount.cifsコマンドを用いるが、こちらもなかなかうまくできなかった。
ネットを調べてみると、vers、sec、username、password オプションを指定すれば良いのではないかと思い当たったが、
その通りにやってみてもうまくいかない。

結局、一番最後に記しているオプションの組み合わせでうまくマウントできた
うまくマウントできたNASは、IIS7が搭載されているらしいことがわかった。
たしか、ファイルサーバーに特化したWindows Serverが載っていたように思う。
遠隔地にあるものなので型番もわからない。

多分、接続先のNASの種類によって設定の組み合わせが違うのではないかと思う。


使用しているパッケージなどのバージョンは次の通りである。

cifs-utils バージョン 6.2
カーネル バージョン 3.10.0-693.17.1.el7.x86_64




<失敗例>

×
# mount.cifs -o vers=1.0,sec=ntlmssp,username=guest,password="" "//192.168.1.5/public" /mnt/nas
mount error(5): Input/output error
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
×
# mount.cifs -o vers=3.0,sec=ntlmssp,username=guest,password="" "//192.168.1.5/public" /mnt/nas
mount error(95): Operation not supported
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
×
# mount.cifs -o vers=4.0,sec=ntlmssp,username=guest,password="" "//192.168.1.5/public" /mnt/nas
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)


◎次のコマンドでうまくマウントすることができた。

# mount.cifs -o vers=2.0,sec=ntlmssp,username=guest,password="" "//192.168.1.5/public" /mnt/nas

ポイントは、以下のオプションである。
vers=2.0,sec=ntlmssp,username=guest,password="" 
もしこれでうまくいかない場合、
versで指定される番号を、上記の失敗例のように色々替えてみると良いかもしれない。
ネットの情報には、vers=3.0や、ver=1.0 という設定をしているものもあった。
また、sec=ntlm という指定もあった。



<さらに別のNAS>

一方で、別のNASでは、以上の成功例のオプションでは、つぎのようなエラーが発生した。

mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

その場合、ver=2.0のところを、ver=1.0に変えるとうまく接続することができた。



以上


<参考>
・CIFS mount in FSTAB does not work after update
< https://askubuntu.com/questions/994872/cifs-mount-in-fstab-does-not-work-after-update > 2019年2月18日

2019年2月6日水曜日

【Linux CentOS 7】bashの配列操作について

bashの配列操作

○配列に要素を加える方法

$ K=("vvv" "123" "456") ; K+=("abc") ; K+=("abc") ; echo ${K[@]}
vvv 123 456 abc abc
上記では、最初に配列Kを用意して、要素を三つ("vvv" "123" "456") 作成している。
この配列Kに要素("abc") を順に2回加えて、
最後に配列の要素を表示するという処理を行っている。

注意点は、配列というものは、""で括った要素をさらに小括弧()で括ったものだということである。

さもなければ、次のように配列の要素ではなくなってしまう。

$ K=("vvv" "123" "456") ; K+="abc" ; K+="abc" ; echo ${K[@]}
vvvabcabc 123 456


○配列の配列としての取り扱い方

せっかくの配列Kなのに、${K}として扱うと文字列になってしまった。

$ K=("vvv" "123" "456") ; K+="abc" ; K+="abc" ; echo ${K}
vvvabcabc

そして要素数は文字数になってしまった。

$ K=("vvv" "123" "456") ; K+="abc" ; K+="abc" ; echo ${#K}
9

次のように、[@]を変数名に付加すると配列として扱われる。

$ K=("vvv" "123" "456") ; K+="abc" ; K+="abc" ; echo ${#K[@]}
3


■ファイルに保存された要素を配列に格納して表示する手順

次のようなファイルがあるとする。

# cat test.txt
abc@abc
def@def
ghi@ghi

次の手順で、上記ファイルに保存された要素を配列に順に格納して、
最後に配列の内容を一覧表示させる。

# ArryADDR=() ; for ADDR in `cat test.txt` ; do ArryADDR+=("$ADDR") ; done ; echo ${ArryADDR[@]}
abc@abc def@def ghi@ghi



<参考>

・配列を使用する
< https://shellscript.sunone.me/array.html > 2019年2月6日

2019年2月4日月曜日

【Linux CentOS 6】ファイルの操作イベント取得を行うinotifywaitの動作テスト【inotify-tools 3.14】

inotifywaitの動作テスト

下記コマンドでは、inotifywaitコマンドに複数の引数を与えて、
監視の仕方、結果出力の仕方、監視対象を指定している。


<使用したオプションの説明>

-e 監視するイベントの種類を指定する。(CREATE でファイル作成をキャッチ)
-m 監視中に該当するイベントが発生し処理が終わってもさらに続けて監視し続ける。
-r ディレクトリが作成されると再帰的にファイルを探索する。
--format イベントがあったことを通知する際の出力フォーマットの指定
最後に、監視対象のパスを指定



○ターゲットディレクトリを監視状態にした。

# /usr/bin/inotifywait -m -r -e CREATE --format "%w%f" /root/test
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.


○動作テストを行った。

上記画面は、待機中となるため、別のコンソールからテストする。

テスト用ディレクトリに移動した。
# cd /root/test

テスト用ファイルは、一つ階層上の/rootにbディレクトリにまとめて用意した
# ls ../b
abc.txt  abcd.txt  abcde.txt  abcdef.txt
テスト用ファイルの入ったbディレクトリを、カレントディレクトリに再帰コピーした。
# cp ../b . -R


○結果

すると、上記の待機中画面に次のように、CREATEイベントの詳細が表示された。
/root/test/b
/root/test/b/abc.txt
/root/test/b/abcd.txt
/root/test/b/abcde.txt
/root/test/b/abcdef.txt


○イベントの発生結果一覧をwhileで処理

# /usr/bin/inotifywait -m -e CREATE --format "%w%f" -r /root/test | while read NEWFILE || [ -n $NEWFILE ] ; do echo $NEWFILE ; done
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/root/test/b
/root/test/b/abcd.txt
/root/test/b/abc.txt
/root/test/b/abcde.txt

前例と同じbディレクトリをコピーしてみた
しかし、上記のように、4つあるファイルのうち3つのCREATEイベントしかキャッチできなかったようである。

また、サブディレクトリをワンライナーなどのコマンドで一気に作成しても、
最初のサブディレクトリの新規作成イベントしか取得できなかった。

これはinotify の処理の限界なのだろう。
サブディレクトリがツリーに作成されたときに、
watchもまたこのサブディレクトリに作成され再帰監視処理に備えられようとするものの、
この準備が完了するまでにファイルや別のサブディレクトリが作成されてしまう可能性がある。
すると、サブディレクトリに作成されたファイルやディレクトリの作成イベントを取りこぼしてしまう現象が発生するという理由らしい。(†1)

こういう性質を知ってうまく使えばいいと思う。
ディレクトリにファイルを追加していく際のイベント取得は問題ないのだろう。
サブディレクトリの作成時には上記のことを念頭に置いておけばいい。


<参考>
1、inotify missing events
< https://stackoverflow.com/questions/15806488/inotify-missing-events > 2019年2月4日

2、inotify-toolsでファイルやディレクトリを監視する
< https://qiita.com/stc1988/items/464410382f8425681c20 >2019年2月4日

3、inotifywaitコマンドの使い方
< https://qiita.com/hana_shin/items/9e03ad7a40b4fd7afb67 >2019年2月4日

4、[Linux] inotifywaitを使ってファイル更新時に任意のコマンドを実行する
< https://qiita.com/sonodar/items/ddeeb98525ef4c03d48e >2019年2月4日

5、BASHのwhile readで最終行が処理されない問題の解決方法
< https://qiita.com/Ets/items/a7fa24b138b8ee883dac > 2019年2月4日

6、if 文と test コマンド
< https://shellscript.sunone.me/if_and_test.html > 2019年2月4日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad