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)
0436.jpg から 3000.jpgまでゲッツ!
投稿者 muuming : 14:11
| コメント (0)
chmod 変更ファイル --reference=これにあわせてくださいファイル これにあわせてくださいファイルの権限に変更ファイルをするのだ
投稿者 muuming : 11:07
| コメント (0)
*.jpg 以外かつ *.gif 以外でディレクトリも省いて検索 find ./ -not -name "*.jpg" -and -not "*.gif" -and -not -type d *.jpg を 囲むのが味噌っぽい -path "*/CSV?*" でCSVって含むディレクトリ以下 これにnotつけると便利よさそ
投稿者 muuming : 11:01
| コメント (0)
標準出力は 1 番 標準出力を log1 に、標準エラー出力を log2 標準出力と標準エラー出力を両方まとめて他のコマンドに渡す 標準エラー出力のみ見たい 「2>&1」の本当の意味は「2 の出力先を、1 の出力先と同じものに設定する」 左から処理される command 1>file 2>&1 command 2>&11>file command 2>&1 1>/dev/null
投稿者 muuming : 13:05
| コメント (0)
array=(a b c d e f) にて一気に入れれる。 echo ${array[1]} >> a 要素数 んー ややこし
投稿者 muuming : 06:54
| コメント (0)
-a file のアクセス時刻のみを変更する。 -c file を作成しない。 -m file の修正時刻を変更する。 -r ref_file
投稿者 muuming : 13:28
| コメント (0)
expr 計算 掛け算*の場合 そりゃそうだ * でひっかかる。 でも以外に忘れる expr 45 \* 55 でエスケープしないとね
投稿者 muuming : 19:28
| コメント (0)
10進数 → 16進数 シェルでは16進数の初めには ゼロ エックスを つけるらすぃ 知らなかった・・・
投稿者 muuming : 17:21
| コメント (0)
ls > /dev/null 2>&1
投稿者 muuming : 13:26
| コメント (0)
検索結果に対してコマンドを実行したいときは find ./hoge -name *.svn -exec ls -al "{}" \; なんて使い方をするが 、要は "{}" に検索結果が入っている感じ ところが -exec で渡すと全て一気に "{}"に値が渡されるので、 find ./hoge -name *.svn -exec mv "{}" /home/hoge \; rm とかなら rm 1 2 3 4 と一気にファイルを並べられるが そういう時は find ./hoge -name | xargs -i mv "{}" /home/hoge -i がポイント
投稿者 muuming : 10:04
| コメント (0)
su - postgres -c '/usr/local/pgsql/bin/postmaster -S -i' sudo -u nobody echo "hhh" 違いは・・・ 後で調べる
投稿者 muuming : 15:03
| コメント (0)
echo "hogehoge" で、自動で改行されるが
投稿者 muuming : 15:59
| コメント (0)
ctrl+v 以上で ^[ ctrl+v これで^M 改行コード sed 's/^M//g' で改行コード除去可能
投稿者 muuming : 16:27
| コメント (0)
sharutils-4.2.1-14.i386.rpm を入れ込もう すると エンコードされたファイルの一行目に 一番最後に このファイル名を hoge とすると perl のモジュール MIME-Base64-3.05.tar.gz をインストール これを使っていかのようなスクリプトで変換可能~ #!/usr/bin/perl use MIME::Base64; $str = decode_base64($decodede); print $encoded_str; いまんとここんな感じです。
投稿者 muuming : 13:26
| コメント (0)
sort -t でセパレータを指定できる 例)sort -t : -n -k 5 コロン区切りで 数値順に5番目のフィールドでソート
投稿者 muuming : 12:16
| コメント (0)
$n nは数字であり、$0はシェルスクリプト名、以降$1、$2・・・は第1引数、第2引数・・・である。第10引数以降は${10}、${11}・・・で参照する。
投稿者 muuming : 17:00
| コメント (0)
スクリプトのデバッグしたい部分に この間はデバッグしやすくなる。
投稿者 muuming : 21:55
| コメント (0)
stat ファイルのアクセス日とかわかる stat [-l] [-f] [-s] [-v] [-t] [-c format] file-name [file-name]... などなど 結構な情報がとれます! date -d "/`stat -c %y $file/`" +%c date -d ~~~~で ~~~の時刻を表示できるので(しかも大概のフォーマットがいける)それにスタットで取ってきた時刻をぶち込んで、フォーマットを再成型できたり。
投稿者 muuming : 14:05
| コメント (0)
vi に行数つける 内容は いるのを使ってくれ あとタブの文字数とかも指定できるが後ほど
投稿者 muuming : 18:21
| コメント (0)
1、set 値1値2 にて関数内で引数を渡す事ができるっぽ set 0 10 100 100 2、デバックにも便利 まぁ -x を良く使うでしょうな
投稿者 muuming : 18:37
| コメント (0)
Bashの条件式 2007年01月05日
簡単インクリメント
for n in $(seq 436 3000)
do
i=`printf "%04d" $n`
wget http://aaaaa.com/image/$i.jpg
sleep 10
done2006年06月06日
chmod 他のファイルの権限継承
find について
2006年02月07日
出力制御
標準エラー出力は 2 番
コマンド 1>log1 2>log2
標準出力と標準エラー出力を両方まとめてファイルに
コマンド >ファイル 2>&1
コマンド 2>&1 |コマンド
コマンド 2>&1 1>/dev/null | lv
command
この場合 1の標準も2のエラーも画面(初期)
この場合 1の標準はファイル 2のエラーは1と同じなのでファイル
この場合 2は1と同じなので、(この時点では画面) 1はファイル
この場合2は画面出力 1はゴミ箱 よってエラーのみ表示
となる2006年01月31日
bash配列
echo ${#array[@]}2005年10月24日
touch
ref_file で指定したファイルの時刻を使い変更する。
-t time
time で指定した時刻を使い変更する。引数は次のような明確な意味を持つ10進数の形式で指定する。
[[CC]YY]MMDDhhmm[.SS]
他にもあるぽん 詳しくはman見よう2005年10月11日
expr 計算 掛け算*の場合
expr 45 * 55 では エラーになる2進数 16進数 10進数 変換
printf %x 255 結果 ff
16進数から 10進数
print %d 0xff 結果 255
2進数はなんとつけるのかいな・・
2005年10月06日
出力を全部捨てる! エラーも全部
多分これでいいかとfind 検索結果に! 便利なxargs
\;はおまじない
多分こんな使い方はできないはず
mv はそういうわけにもいかなさそ
xargsは次のコマンドにデフォルト1つずつ値を渡すので、こんな芸当ができるっぽい2005年10月03日
他のユーザーでの実行
といった書き方
これもありか2005年09月30日
echo の改行抑制
これを抑制したい場合は
echo -n "hogehoge" でおっけい2005年09月13日
制御文字の作り方
F1キー
esc
ctrl+^
returnBase64 エンコードのデコード方法について
uuencode uudecode コマンドが使用可能になる。
begin-base64 644 test.tar.gz
====
uudecode hoge で 同じ階層に644 の権限で test.tar.gz ファイルがデコードされて現れます。
他の方法
$ster = "テスト";
$decodede="GyRCPkMkOyRrN1Y4dyVaJXMbKEIuZ2lm";
$encoded_str = encode_base64($ster);
print $str;
PHPでもあるでしょねえ2005年08月30日
sort について
指定無しなら空白が指定されるのかな?2005年08月29日
特殊な変数
$# 与えられた引数の個数
$@ $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1" "$2" ・・・"のように個別に展開される。)
$* $0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1 $2 ・・・"のように展開される。)
$? 最後に実行したコマンドの終了ステータス
$! 最後に実行したバックグラウンドコマンドのPID
$$ シェルのPID
$- 現在のオプションフラグ2005年08月24日
シェルのデバッグ
set -x
を入れて
デバッグもういいよって部分で
set +x
で戻してあげる
全部デバッグしたい場合は
/bin/sh -x スクリプト名で実行すれば
今なにしてるかわかるっぽstat ファイルのアクセス日とかわかる
%a - Access rights in octal
%u - User Id of owner
%x - Time of last access
パーミッション ラストアクセス日 などなど
2005年08月05日
vi 行数つけたり
.exrc ファイルをホームディレクトリに作成
set tabstop=2
set showmode
set autoindent
set number
set showmatch2005年07月29日
set コマンド
これで $1 は 0 $2 は 10 $3 は 100 といった感じで。
set -n コマンドを読み取るだけで実行しません。
set -v コマンドラインの行数を表示
set -x コマンドと行数を表示しながら実行
デバッグしたい部分を
set -x
~
set +x
で囲んだら コマンドと行数が表示される。
if 比較演算 (シェル
ファイルの存在
-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
= 代入
*= 右項を乗算した結果を代入
/= 右項で除算した結果を代入
%= 右項で剰余演算の結果を代入
+= 右項を加算した結果を代入
-= 右項を減算した結果を代入
<<= 右項でシフト演算した結果を代入
>>= 右項でシフト演算した結果を代入
&= 右項でビット演算した結果を代入
^= 右項でビット演算した結果を代入
|= 右項でビット演算した結果を代入