CentOS7 ターミナル上で、指定ディレクトリ以下、指定文字列一括置換

CentOS等で、大きいプロジェクトファイル内の文字を、
横断して一括で文字列置換したい時がある、
例えば、ハードコーディングしてしまった、定数や、ドメイン等。
指定文字列を一括置換したい時がある。

そんな時に使えるコマンド

下記はカレントディレクトリ配下のphpファイル全てを横断検索して指定文字列に置換している例


$ find ./ -type f -name "*.php" | xargs sed -i 's/置換対象文字列/置換後の文字列/g'

よく使うけど、よく忘れるのでメモ。

検索対象の確認だけなら、

指定ディレクトリ配下のファイルを横断して指定文字列を検索


$ find ./ -type f -name "*.php" -print | xargs grep '検索文字列'

以上

CentOS7にag(the silver searcher)をyumでインストール

ボクの環境用に備忘録

昔ながらのよく標準で入っている、ファイルの横断検索grep

これはカレントの場所から横断検索している例


$ find ./ -type f -print | xargs grep -n '検索文字'

ただ、この方法だとファイル数が多いと検索結果がでるまで遅い。
もうこの方法を使っている人は少ないはず。

で、


$ ag '検索文字'

でgrepするためのag(the silver searcher)のインストール方法

CentOS7にyumでインストール


$ sudo yum install the_silver_searcher

MacのHomebrewでインストール


$ brew install the_silver_searcher

SQLite3の.sqlite3ファイル操作中の挙動メモ

最近ゲームサーバーのランキングデータを、

簡単に扱えるSQLite3を使って運用した際に、びっくりした挙動もメモ。

即席で作ったのでベタソース2枚のみw

構成

  • SQLite3のsqlite3ファイルをマスター用とスレーブ(読み取り専用)用の2つ用意し、
  • Redisをキャッシュ&集計処理用として利用をしていて。

下記のようなアクセスが秒間で数十あり。


// redisから現在のスコア取得 $currentScore = $redis->hGet('score', $_user); // SQliteで現在順位を取得 $pdo = new PDO('sqlite:db.sqlite3', "", ""); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare("SELECT * FROM rankTable order by abs( ? - score) limit 1"); $stmt->execute([$currentScore]); $searchRank = $stmt->fetch();

毎回ソートとする集計はさすがに重いので、

下記のようなバッチソースをcronで一定間隔で集計。


// sqlite3ファイル上書きコピー if( copy($MasterDbFile, $ReadDbFile) ){ echo "db 上書きOK"; }else{ alertPush("sqlitecopy エラー"); }

このsqlite3ファイル、、毎回copyで上書きしている、、、!!!!
なのに、ReadDbFileのsqlite3ファイルへの接続は、、、

なんと生きているんす、、!!!

普通にselectで検索できちゃってます。。!

コピー中にアクセスしてもエラーにならない、、ロック処理みたいのがはたらいるのかな。。特に意識せずにやってけど、、

実際数十万のスコアデータランキングを格安(月額1000円未満の1台)サーバーでやって一度もエラーになっていませんでした(今のところ)wすごい

はじめてのCentOS7 セットアップめもw

CentOS7にのりかえて、ちょっと焦ったのでめも。
ちょっと触ると逆に6よりわかりやすいかもw

※rpmforage

# rpm -ivh http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

※epel

# rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

※remiを追加

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

yumをアップデート

# yum update

nginx + php-fpm + redis のインストール

CentOS7から デフォルトでserviceコマンドではなく、systemctlコマンドでサービスを管理するようになった。

nginxのインストール

# yum install nginx
# systemctl status nginx.service
# systemctl start nginx.service
# systemctl enable nginx.service

※php-fpm.d/www.conf のuser と group を apahce → nginx へ

php-fpmのインストール

# yum install php-fpm php-mbstring php-gd  php-mysql php-redis
# systemctl status php-fpm.service
# systemctl start php-fpm.service
# systemctl enable php-fpm.service

redisのインストール

# yum install redis
# systemctl status redis.service
# systemctl start redis.service
# systemctl enable redis.service

vim 改行コード「^M」を取り除く

「^M」の入力がわからなかったのでメモ。

vimで開いたファイルを、下記コマンドで置換するのだが、

:%s/^M//

入力方法を間違えると、うまく置換できないので、

Controlキー+v Controlキー+mで「^M」と入力できます。

Linux 行数がファイルを指定行分で分割する。

Linuxのターミナルで、たまにCSVファイルの行数がおおすぎて、エクセルで開けないケースがる、ちょっと前のエクセルで、65536までしかダメったかな?

そんな場合は下記コマンドで分割
下記は50000行毎に分割する例。
実行すると、xaa xab ・・・などいうファイル名で分割ファイルが作られます。

# split -l 50000 file_20110826.csv

コードスニペット ツールのまとめ(比較)

プログラマは知っといた方がいいコードスニペットを下記にまとめます。

・Webで一元管理なら『my code stock』(アカウントの登録のみ無料)
https://mycodestock.com/overview.html

mycodestock
※Webなのでブラウザが使えればOK

 

・Webではなく完全に自分のマシンだけで管理したいなら『Snippely』(ダウンロード 無料)
ダウンロードするので、オフラインでも動きます。
http://code.google.com/p/snippely/

Snippely
※AIRで作られているので、MacでもWindowsでもOKでした(AIRはインストールしておく必要あり)

 

他にもエディタの連携したコードスニペッドがいろいろありますが、実際に利用していないので、下記にざっくりまとめ。

Windowsであれば

  • http://www.qsnipps.com/(Windows Linux共有可能 シェアウェア)
  • エディタについているものであれば
    VisualWebDeveloper(無償)
    VisualStudio   etc…
Macであれば
個人的に一番やりたいのが、eclipseでコードスニペットが利用したいです。
ちょっと調べてみましたがなかなかできずに、おわってます。
知っている方いられましたら、是非おしえていただければ幸いですw