2018年06月09日

特定文字列が出現したらその後を表示

2018-05-01 hogehoge
2018-05-01 uniuni
ponpokopon
2018-05-02 aaaaaa
komekome
2018-05-02 norimaki

>sed -ne '/2018-05-02/,$p' /tmp/hoge

投稿者 muuming : 06:52

2017年12月16日

シェル文字コード変換

iconv -f Shift-JIS -t UTF8 sample > sample.utf8

投稿者 muuming : 09:51

2017年12月15日

awkでif使えるんだって

awk 'BEGIN{FS=","}{if(a[$1]==0){print $0};++a[$1]}'

カンマ区切りの一番最初の列が一回目に出現する場合に全体$0を表示

投稿者 muuming : 06:31

2014年01月27日

ドメインのリフレッシュタイムTTLを調べる

dig example.net SOA


これだーけ

投稿者 muuming : 16:07

2008年01月08日

実行優先度を指定し実行

nice にて実行優先度を指定してシェルを実行できる。

多分、子プロセスにも引き継がれる

nice -n 19 /usr/sbin/backup.sh

優先度の数値は -20 ~ 19
通常は0

-20 は優先度高
19は優先度低

一般ユーザーは マイナス値を指定できない
(優先度を下げれても上げれない)

投稿者 muuming : 09:43 | コメント (0)

2007年12月14日

ネット接続が切れてもコマンド実行

ネット接続が切れても、コマンド実行をしつづけるために。
  # nohup コマンド &

投稿者 muuming : 16:46 | コメント (0)

2007年07月31日

sed sed sed

 特定の文字列を抜き出す

 sedの置換では置換条件で「(...)」にくくった文字列を置き換え文字として利用できる。その際,始めに現われた(...)が「\1」,次に現われた(...)が「\2」に代入される。

 たとえば,拡張子部分(ドットより後の文字列)を抜き出したい場合は,

$ file_name="linux.txt"
$ echo $file_name | sed -e "s/.*\.\([^.]*\)\$/\1/g"
txt


とする。この場合はドットから末尾までの文字列でその中にドットが入っていない文字列を抜き出し,文字列全体と抜き出した文字列を置換している。

. 改行文字以外の任意の1文字
* 直前の1文字の0回以上の繰り返しに一致。直前の文字は正規表現でも構わない
^ 行の先頭
$ 行の末尾
[ ] かっこ内の任意の1文字に一致。ハイフン(-)で範囲指定もできる
[^ ] かっこ内の任意の1文字に不一致。ハイフン(-)で範囲指定もできる
\+ 直前の文字の1個以上の繰り返しに一致
\? 直前の文字の0または1文字に一致
\{n\} 直前の文字のn個の繰り返しに一致
\{n,\} 直前の文字のn個以上の繰り返しに一致
\{,m\} 直前の文字のm個以下の繰り返しに一致
\{n,m\} 直前の文字のn個以上,m個以下の繰り返しに一致
パターン1\|パターン2 パターン1またはパターン2のいずれかに一致
\(パターン\) パターンをグループ化する。マッチした内容は\1や\2として利用できる
\ 正規表現に使われる記号を普通の文字として扱う

投稿者 muuming : 09:39 | コメント (0)

2007年06月13日

bashでランダム 簡易版

$RANDOM と言う変数が用意されているらしい。

RANDOM このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。

と言うわけで、例えば 0~99のランダムな数字を得たいなら
HOGE=`expr $RANDOM % 100`

投稿者 muuming : 10:51 | コメント (0)

2007年06月11日

しぇる便利

[$$] スクリプトで作業用のファイルを作る場合,ファイル名の一部にこの $$ を含めよう.$$ はスクリプトを実行している sh のプロセス番号に置き換えられるので,スクリプトが同時に実行されても作業ファイルがぶつかることがない.たとえ自分だけのためのスクリプトでもプログラムから実行したり,メールの処理に使えば同時に走る可能性がある.

[クオート] スクリプトに現われる * や ? は対話的シェルと同様にそのパターンにマッチしたファイル名に展開される.cat $1 > /tmp/t.$$ とあって,第 1引数を表わす $1 が * に置き換えられたら,これがさらにファイル名に展開される.これを "$1" のようにダブルクオート "" で囲めば,ファイル名への展開はされない.また,set -f を実行しておけばやはりファイル名への展開はされない.さらに $1 を $1 のままにするにはシングルクオートでこれを囲む.

[ヒアドキュメント] 出力のファイルへの追加は >> で指示するが,これの逆向き << がヒアドキュメントである.例えば mail foo <

[後始末] スクリプトにバグがあったり,割り込みキー (Control-C など) で実行を打ち切ったとき,作業ファイルを消去するといった後始末をしなければいけない.これには trap コマンドで

trap "/bin/rm -f $tmp; exit 0" 0 1 2 15

のようにする.指定した番号のシグナル 1 2 15 を受けたときの動作を定める.シグナル番号 0 は正常終了時にも実行することを示す.

投稿者 muuming : 09:41 | コメント (0)

2007年01月05日

簡単インクリメント


for n in $(seq 436 3000)
do
i=`printf "%04d" $n`
wget http://aaaaa.com/image/$i.jpg
sleep 10
done

0436.jpg から 3000.jpgまでゲッツ!

投稿者 muuming : 14:11 | コメント (0)

2006年06月06日

chmod 他のファイルの権限継承

chmod 変更ファイル --reference=これにあわせてくださいファイル

これにあわせてくださいファイルの権限に変更ファイルをするのだ

投稿者 muuming : 11:07 | コメント (0)

find について

*.jpg 以外かつ *.gif 以外でディレクトリも省いて検索

find ./ -not -name "*.jpg" -and -not "*.gif" -and -not -type d

*.jpg を 囲むのが味噌っぽい

-path "*/CSV?*" でCSVって含むディレクトリ以下

これにnotつけると便利よさそ

投稿者 muuming : 11:01 | コメント (0)

2006年02月07日

出力制御

標準出力は 1 番
標準エラー出力は 2 番

標準出力を log1 に、標準エラー出力を log2
コマンド 1>log1 2>log2


標準出力と標準エラー出力を両方まとめてファイルに
コマンド >ファイル 2>&1

標準出力と標準エラー出力を両方まとめて他のコマンドに渡す
コマンド 2>&1 |コマンド

標準エラー出力のみ見たい
コマンド 2>&1 1>/dev/null | lv

「2>&1」の本当の意味は「2 の出力先を、1 の出力先と同じものに設定する」

左から処理される
command
    この場合 1の標準も2のエラーも画面(初期)

command 1>file 2>&1
    この場合 1の標準はファイル 2のエラーは1と同じなのでファイル

command 2>&11>file
    この場合 2は1と同じなので、(この時点では画面) 1はファイル

command 2>&1 1>/dev/null
    この場合2は画面出力 1はゴミ箱 よってエラーのみ表示 
となる

投稿者 muuming : 13:05 | コメント (0)

2006年01月31日

bash配列

array=(a b c d e f) にて一気に入れれる。

echo ${array[1]} >> a

要素数
echo ${#array[@]}

んー ややこし

投稿者 muuming : 06:54 | コメント (0)

2005年10月24日

touch

-a file のアクセス時刻のみを変更する。

-c file を作成しない。

-m file の修正時刻を変更する。

-r ref_file
ref_file で指定したファイルの時刻を使い変更する。
-t time
time で指定した時刻を使い変更する。引数は次のような明確な意味を持つ10進数の形式で指定する。
[[CC]YY]MMDDhhmm[.SS]


他にもあるぽん 詳しくはman見よう

投稿者 muuming : 13:28 | コメント (0)

2005年10月11日

expr 計算 掛け算*の場合

expr 計算 掛け算*の場合
expr 45 * 55 では エラーになる

そりゃそうだ * でひっかかる。 でも以外に忘れる

expr 45 \* 55 でエスケープしないとね

投稿者 muuming : 19:28 | コメント (0)

2進数 16進数 10進数 変換

10進数 → 16進数
printf %x 255 結果 ff


16進数から 10進数
print %d 0xff 結果 255

シェルでは16進数の初めには ゼロ エックスを つけるらすぃ 知らなかった・・・


2進数はなんとつけるのかいな・・

投稿者 muuming : 17:21 | コメント (0)

2005年10月06日

出力を全部捨てる! エラーも全部

ls > /dev/null 2>&1


多分これでいいかと

投稿者 muuming : 13:26 | コメント (0)

find 検索結果に! 便利なxargs

検索結果に対してコマンドを実行したいときは

find ./hoge -name *.svn -exec ls -al "{}" \;

なんて使い方をするが 、要は "{}" に検索結果が入っている感じ
\;はおまじない

ところが -exec で渡すと全て一気に "{}"に値が渡されるので、
多分こんな使い方はできないはず

find ./hoge -name *.svn -exec mv "{}" /home/hoge \;

rm とかなら rm 1 2 3 4 と一気にファイルを並べられるが
mv はそういうわけにもいかなさそ

そういう時は

find ./hoge -name | xargs -i mv "{}" /home/hoge

-i がポイント 
xargsは次のコマンドにデフォルト1つずつ値を渡すので、こんな芸当ができるっぽい

投稿者 muuming : 10:04 | コメント (0)

2005年10月03日

他のユーザーでの実行

su - postgres -c '/usr/local/pgsql/bin/postmaster -S -i'
といった書き方

sudo -u nobody echo "hhh"
これもありか

違いは・・・ 後で調べる

投稿者 muuming : 15:03 | コメント (0)

2005年09月30日

echo の改行抑制

echo "hogehoge" で、自動で改行されるが
これを抑制したい場合は
echo -n "hogehoge" でおっけい

投稿者 muuming : 15:59 | コメント (0)

2005年09月13日

制御文字の作り方

ctrl+v
F1キー
esc

以上で ^[

ctrl+v
ctrl+^
return

これで^M 改行コード

sed 's/^M//g' で改行コード除去可能

投稿者 muuming : 16:27 | コメント (0)

Base64 エンコードのデコード方法について

sharutils-4.2.1-14.i386.rpm を入れ込もう

すると
uuencode uudecode コマンドが使用可能になる。

エンコードされたファイルの一行目に
begin-base64 644 test.tar.gz

一番最後に
====

このファイル名を hoge とすると
uudecode hoge で 同じ階層に644 の権限で test.tar.gz ファイルがデコードされて現れます。


他の方法

perl のモジュール MIME-Base64-3.05.tar.gz をインストール

これを使っていかのようなスクリプトで変換可能~

#!/usr/bin/perl

use MIME::Base64;
$ster = "テスト";
$decodede="GyRCPkMkOyRrN1Y4dyVaJXMbKEIuZ2lm";

$str = decode_base64($decodede);
$encoded_str = encode_base64($ster);

print $encoded_str;
print $str;
 

いまんとここんな感じです。
PHPでもあるでしょねえ

投稿者 muuming : 13:26 | コメント (0)

2005年08月30日

sort について

sort -t でセパレータを指定できる
指定無しなら空白が指定されるのかな?

例)sort -t : -n -k 5

コロン区切りで 数値順に5番目のフィールドでソート

投稿者 muuming : 12:16 | コメント (0)

2005年08月29日

特殊な変数

$n nは数字であり、$0はシェルスクリプト名、以降$1、$2・・・は第1引数、第2引数・・・である。第10引数以降は${10}、${11}・・・で参照する。
$# 与えられた引数の個数
$@ $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1" "$2" ・・・"のように個別に展開される。)
$* $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1 $2 ・・・"のように展開される。)
$? 最後に実行したコマンドの終了ステータス
$! 最後に実行したバックグラウンドコマンドのPID
$$ シェルのPID
$- 現在のオプションフラグ

投稿者 muuming : 17:00 | コメント (0)

2005年08月24日

シェルのデバッグ

スクリプトのデバッグしたい部分に
set -x
を入れて
デバッグもういいよって部分で
set +x
で戻してあげる

この間はデバッグしやすくなる。


全部デバッグしたい場合は
/bin/sh -x スクリプト名で実行すれば
今なにしてるかわかるっぽ

投稿者 muuming : 21:55 | コメント (0)

stat ファイルのアクセス日とかわかる

stat ファイルのアクセス日とかわかる

stat [-l] [-f] [-s] [-v] [-t] [-c format] file-name [file-name]...
%a - Access rights in octal
%u - User Id of owner
%x - Time of last access

などなど 結構な情報がとれます!
パーミッション ラストアクセス日 などなど

date -d "/`stat -c %y $file/`" +%c

date -d ~~~~で ~~~の時刻を表示できるので(しかも大概のフォーマットがいける)それにスタットで取ってきた時刻をぶち込んで、フォーマットを再成型できたり。

投稿者 muuming : 14:05 | コメント (0)

2005年08月05日

vi 行数つけたり

vi に行数つける
.exrc ファイルをホームディレクトリに作成

内容は
set tabstop=2
set showmode
set autoindent
set number
set showmatch

いるのを使ってくれ あとタブの文字数とかも指定できるが後ほど

投稿者 muuming : 18:21 | コメント (0)

2005年07月29日

set コマンド

1、set 値1値2 にて関数内で引数を渡す事ができるっぽ

  set 0 10 100 100
  これで $1 は 0   $2 は 10 $3 は 100 といった感じで。

2、デバックにも便利
  set -n コマンドを読み取るだけで実行しません。
  set -v コマンドラインの行数を表示
  set -x コマンドと行数を表示しながら実行

  まぁ -x を良く使うでしょうな
  デバッグしたい部分を
  set -x
  ~
  set +x
  で囲んだら コマンドと行数が表示される。

投稿者 muuming : 18:37 | コメント (0)

if 比較演算 (シェル

Bashの条件式  
  
ファイルの存在  
-a file  fileが存在すればtrue
  
-b file  fileが存在し,それがブロックのスペシャルファイルだったらtrue
  
-c file  fileが存在し,それがキャラクタのスペシャルファイルだったらtrue
  
-d file  fileが存在し,それがディレクトリだったらtrue
  
-e file  fileが存在すればtrue
  
-f file  fileが存在し,それが通常のファイルだったらtrue
  
-g file  fileが存在し,そのset-group-idビットがセットされていたらtrue
  
-k file  fileが存在し,そのstickyビットがセットされていたらtrue
  
-p file  fileが存在し,それがnamed pipeだったらtrue
  
-r file  fileが存在し,それが読み込み可能ならtrue
  
-s file  fileが存在し,そのサイズが0より大きかったらtrue
  
-t fd  ファイルディスクリプタfdがオープンされており,それが端末を参照していたらtrue
  
-u file  fileが存在し,そのset-user-idビットがセットされていたらtrue
  
-w file  fileが存在し,それが書き込み可能ならtrue
  
-x file  fileが存在し,それが実行可能ならtrue
  
-O file  fileが存在し,それが実行中のユーザが所有するものだったらtrue
  
-G file  fileが存在し,それが実行中のユーザグループが所有するものだったらtrue
  
-L file  fileが存在し,それがシンボリックリンクならtrue
  
-S file  fileが存在し,それがSocketならtrue
  
-N file  fileが存在し,それが最後に読み込んだ後更新されていたらtrue
  
ファイル  
file1 -nt file2  file1の更新日時がfile2より新しかったらtrue
  
file1 -ot file2  file1の更新日時がfile2より古かったらtrue
  
file1 -ef file2  file1とfile2が同じ装置でi-nodeも同じならtrue
  
シェルオプション  
-o optname  optnameのシェルオプションが有効ならtrue
  
文字列などの比較  
-z string  stringの長さが0ならtrue
  
-n string  stringの長さが0じゃなければtrue
string  
  
string1 == string2  string1とstring2が等しければtrue
  
string1 != string2  string1とstring2が等しくなければtrue
  
string1 < string2  ソート順に並べたときにstring1がstring2より前に位置すればtrue
  
string1 > string2  ソート順に並べたときにstring1がstring2より後に位置すればtrue
  
arg1 OP arg2  arg1とarg2は数値。OPは'-eq','-ne','-lt','-le','-gt','-ge'のうちのどれか。
  OPはそれぞれ,=,!=,<,<=,>,>=を表す。
  
演算子  
  
+   単項演算子としてのプラス
  
-   単項演算子としてのマイナス
  
!   論理否定
  
~   ビット演算の否定
  
**  階乗
  
*  乗算
  
/  除算
  
%  剰余
  
+  加算
  
-  減算
  
<<  左シフト(ビット演算)
  
>>  右シフト(ビット演算)
  
<=  小または等しい
  
>=  大または等しい
  
<  小さい
  
>  大きい
  
==  等しい
  
!=  等しくない
  
&  ビット演算のAND
  
^  ビット演算のExclusive OR
  
|  ビット演算のOR
  
&&  論理演算のAND
  
||  論理演算のOR
  
expr ? expr : expr  
  
=  代入
  
*=  右項を乗算した結果を代入
  
/=  右項で除算した結果を代入
  
%=  右項で剰余演算の結果を代入
  
+=  右項を加算した結果を代入
  
-=  右項を減算した結果を代入
  
<<=  右項でシフト演算した結果を代入
  
>>=  右項でシフト演算した結果を代入
  
&=  右項でビット演算した結果を代入
  
^=  右項でビット演算した結果を代入
  
|=  右項でビット演算した結果を代入
  

投稿者 muuming : 18:27 | コメント (0)