Top / Linux / 人に聞けないTIPS

所定のファイルだけmv

Macでの実績だけど。。たとえば "xxxx 2.JPG"ってファイルだけをhogeディレクトリの下に移動する、とかの場合。

# find . -name  '* 2.JPG' -print0 |xargs -0 -I% mv % ./hoge/%

Windowsファイル共有にアクセスする。

たとえばWindowsのファイル共有(Samba)上のあるディスクにhoge.txtをコピーしてみます。

smbclient //192.168.0.1/shareDisk/  -N  -c "put hoge.txt" 2>&1 | tee -a log.txt

こんな感じ。 -c はその後の処理を実行。-Nはパスナシですね。

2009/02/16追記:

mount -t smbfs //192.168.0.1/shareDisk/ /mnt/shareDisk

これでそもそもマウントできちゃいますね。smbfsが動かない環境では

mount -t cifs  //192.168.0.1/shareDisk/ /mnt/shareDisk

でいけちゃうと思います。

対話型のコマンドを自動化する。

改行コードをLFに変換

trコマンドに-dオプションを付けると削除になります。よってLFに変換するにはCR(\r)を削除すればよいので

tr -d '\r' < old.txt  > new.txt

ってやればOKです。trコマンドは標準入力を受け取り標準出力に出力するので、リダイレクトを用いています。

コマンドやシェルが返すリターンコードが格納される変数

bashでは、コマンドやシェルが返すリターンコードは「$?」という変数でアクセスできます。

[hogehoge@www test]$ ls -lrt
合計 52
-rwxr--r-- 1 hogehoge hogehoge  263 2008-05-18 10:10 build_jar.xml
drwxr-xr-x 2 hogehoge hogehoge 4096 2008-05-21 01:27 lib
drwxr-xr-x 4 hogehoge hogehoge 4096 2008-05-21 01:37 source
drwxr-xr-x 3 hogehoge hogehoge 4096 2008-05-21 16:18 classes
[hogehoge@www test]$ ls -lrt | grep build_jar.xml   <-存在するファイル
-rwxr--r-- 1 hogehoge hogehoge  263 2008-05-18 10:10 build_jar.xml
[hogehoge@www test]$ echo $?
0  <-正常終了
[hogehoge@www test]$ ls -lrt | grep build_jar.xmll  <-存在しないファイル
[hogehoge@www test]$ echo $?
1  <-異常終了
[hogehoge@www test]$

cshなどでは、$status だそうです

標準エラーも、標準出力にだす

標準エラーも、標準出力に送るには

2>&1

と指定します。

こんな感じ

標準エラーも、標準出力も、hogehoge.txtへ、しかも追記。
[root@www]# ls -lrt fuga 1>>hogehoge.txt 2>&1
[root@www]# cat hogehoge.txt 
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# 

先のteeを使ってこんな感じも行けますね

[root@www]# ls -lrt fuga 2>&1 |tee -a hogehoge.txt 
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# cat hogehoge.txt 
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# ls -lrt fuga 2>&1 |tee -a hogehoge.txt 
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# cat hogehoge.txt 
ls: cannot access fuga: そのようなファイルやディレクトリはありません
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# 

標準出力、標準エラーの出力先を切り替える

ls > hoge.txt

これはいいですね。標準エラーの切り替えは

ls 2> hoge.err <-標準エラーの切り替え
ls 1> hoge.txt <-標準出力もちゃんと書くとこうらしい

ですね。

まとめるとこんな感じ

標準出力をhogehoge.txtへ、標準エラーをhogehoge.errへ、しかも追記
[root@www]# ls -lrt fuga 1>>hogehoge.txt 2>>hogehoge.err
[root@www]# cat hogehoge.txt
[root@www]# cat hogehoge.err      fugaはない場合
ls: cannot access fuga: そのようなファイルやディレクトリはありません
[root@www]# 

標準出力をパイプでつなぐときに、一緒にファイルにも出力する

デバッグするときとかに使えますね。たとえば

ls -lrt | wc -l

とかするとき、

ls | tee debug.log | wc -l

と間にteeを挟んでおくと標準出力をテキストに落とすことができます。ファイルに追記したい場合は、-aをつけます

ls | tee -a debug.log | wc -l

こんな感じ。

シェルスクリプトでn秒待たせる。

sleep n

shで、標準入力から値を受け取り、そのままエコーするサンプル

#!/bin/bash

tmp="";

while read line
do
 tmp="${tmp}${line}\n";
done

echo -en "$tmp";
-e \nを改行と見なすオプションのようです。
-n 行末の改行を行わない。

でもこれだと、行頭にタブやスペースを入れたときにlineの時点でトリムされてしまうみたい。

行頭のタブやスペースをトリムされないようにするには、環境変数を変更すればよいようです。

#!/bin/bash

(
tmp="";

# 区切り文字の変更
IFS=$'\n';
while read line
do
 tmp="${tmp}${line}\n";
done

echo -en "$tmp" ;
)

shであるディレクトリ内のjar全てをクラスパスに指定する

たとえば、/homoe/hoge/lib 内の全てのjarファイルにパスを通したいとします。

export LIBDIR=/homoe/hoge/lib
jarList=`ls ${LIBDIR} | grep .jar` #lsの結果を変数に格納
export CLASSPATH=${LIBDIR} #まずはlibだけ通す
for jarFile in ${jarList}  #for でぐるぐる
do
  export CLASSPATH=${CLASSPATH}:${LIBDIR}/${jarFile} #順にパスを通していく
done
export PATH=${JAVA_HOME}/bin:${PATH}

shでJavaを呼び出す時のクラスパスの指定

CLASSPATH変数を定義する方法。

  • 直接
    java -cp lib/sample.jar:lib/mail.jar:lib/activation.jar nu.mine.kino.sample.Main
  • CLASSPATH変数に定義する
    export CLASSPATH=lib/sample.jar:lib/mail.jar:lib/activation.jar
    java  nu.mine.kino.mail.utils.Main

Fedora 7

Fedora Core4の文字コードをEUCにする

/etc/sysconfig/i18n

でUTF-8 -> eucJPに変換すればOK!

Fedora Core4でtelnetがONにならない

何でかなぁ。とりあえず、

chkconfig --level 345 telnet on

でいいやっ

NFSのこと

マウント情報って、

/etc/vfstab

にある。

umount /home/hoge/

でNFSのマウントがはずせる。

再起動

#sync
#sync
#init 6

Solarisのバージョン

#uname -a

Network設定の変更

[root@www ~]# view /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
HWADDR=[MACアドレス]
ONBOOT=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.xxx.xxx
GATEWAY=192.168.xxx.xxx
USERCTL=no
IPV6INIT=no
PEERDNS=yes
/sbin/service network restart

この記事は

選択肢 投票
おもしろかった 4  
そうでもない 0  

Top / Linux / 人に聞けないTIPS

現在のアクセス:22337


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-24 (木) 11:28:33 (2427d)