【linuxコマンド】良く使うフォルダやファイルの検索コマンド
一ヶ月に1回くらい使うんだけど、いつも忘れてググっちゃうのでメモ
findコマンドとは?
ファイルやディレクトリの検索に使うコマンド。パイプ「|」を使ってgrepコマンドと組み合わせると、ファイル内の文字を検索することもできる。
サーバー内を全件検索
とにかくサーバー内から探し出したい
sudo find / -name ファイル名orフォルダ名
指定した拡張子のファイルを探し出したい
sudo find / -name *.jpg
ファイル内検索
find . -name "*" | xargs grep 検索文字
find . -name "*.conf" | xargs grep 検索文字
railsのfind_or_create_by(!)が便利
find_or_create_by - リファレンス - - Railsドキュメント
find_or_create_byは検索条件を指定して、該当のレコードが一件もなければ
新規レコードを作成してくれます
rails4系から実装されたので、古いrailsでは使えません><
最近はクローラーをよく作るのですが、キーとなるデータで検索をして
該当データがなければレコードを作成して、詳細情報のupdateは非同期処理しております
user情報や商品情報なんか、めっちゃ便利ですね
railsから離れられなくなりそうです
ソースコード
こちらから引用
rails/relation.rb at 78bd18a90992e3da767cfe492f1bc5d63077da8a · rails/rails · GitHub
def find_or_create_by(attributes, &block) find_by(attributes) || create(attributes, &block) end # Like <tt>find_or_create_by</tt>, but calls <tt>create!</tt> so an exception # is raised if the created record is invalid. def find_or_create_by!(attributes, &block) find_by(attributes) || create!(attributes, &block) end
ソースコードもとてもシンプルでfind_by or createです
Active Recordのcreateの戻り値は成功可否に関わらずobjectです
結構はまるんですが、失敗しても例外が発生しないのでfind_or_create_by!を使うことが多いです
またレコードが見つかった場合は、どちらもfind_byなので1件だけ取得されることに注意します
複数件とってくる場合はwhereを使えばOKです
複数件取得or作成したい!って場合はfind_or_create_byのコードを参考にすれば良いのかな(あまり用途なさそうだけど)
railsは楽しいです(白目)
bundlerのバージョンを下げる
bundlerのバージョンがあがるとGemのinstallができなかったりと
設定ファイルを色々変える必要がでてくる(苦痛)
この辺りはrubyで辛いところで、マイクロサービスなら簡単にアップデートできるんだけど
そこそこ大きいプロジェクトはむりだよ、、、まじむり(白目)
というわけで、意図的にバージョンを下げる方法のメモ
bundle -v Bundler version 1.15.3
使いたいバージョンは1.10.xなのでuninstall
gem uninstall bundler You have requested to uninstall the gem: bundler-1.15.3 bundle-0.0.1 depends on bundler (>= 0) If you remove this gem, these dependencies will not be met. Continue with Uninstall? [yN] Y Remove executables: bundle, bundler in addition to the gem? [Yn] y Removing bundle Removing bundler Successfully uninstalled bundler-1.15.3
指定したバージョンでinstall
簡単でよかった・・・特に手で消さなきゃいけないファイルとかはありませんでした
gem install bundler -v {version} bundle -v ```
[WIP] sublime text + Emmet でフロントエンドのコード書くメモ
完全に個人的なメモです( ´ ▽ ` )
逆引き
- ← p>a[href=http://yahoo.co.jp]{google}
よく使うショートカットキー
書き始め
- 書き出し部分(HTMLのテンプレート的な)
! とエディタに書いて展開(tab) する
以下の内容が自動で作成されます!超便利
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
ただ言語部分のデフォルト設定が"en"になっているので、lang=“ja"になるよう設定
メニュー>Preferences>Package Settings>Emmet>Settings - User
ここに以下の内容をコピペ
{ "snippets": { "variables": { "lang": "ja", "locale": "ja-JP", "charset": "UTF-8", "indentation": "\t", "newline": "\n" } } }
もう一回 “!"と入力して展開(tab)をしてみると、以下の通り
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
できたー!
コメントの文字を変更する
環境によりけりですが、こちらに設定ファイルがありました!
~/Library/Application Support/Sublime Text 3/Packages/User
手順はこちらを参考に、とってもわかりやすい、感謝感謝
Githubでローカルファイルを個人的に管理対象外にする方法
githubでコード管理をすることが増えてきました
また最近はフロントエンドが多様化していて、独自の構成をしたかったり
ビルドした結果をgithub上にあげたくなかったりします
通常は除外ファイルは.gitignoreに記載するのですが、.gitignore自体がgithub上に上がっているため
汚さずにいたかったりします、綺麗なままの.gitignoreであってほしい!(よくわからなくなってきた)
A .git/info/exclude ファイルに バージョン管理対象外にしたいファイルを指定する!
最近知ったのですが、project配下にある.git/info/excludeに追記すると
gitの管理からはずしてくれるみたいです
これをやることで、ローカル環境で好き放題やっても、リモートに反映されずに気が楽になります
数年前に知りたかったorz
この辺りが参考になります
Ignoring files - User Documentation
Githubで個人的によく参考にする本
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (23件) を見る
Web制作者のためのGitHubの教科書 チームの効率を最大化する共同開発ツール Web制作者のための教科書シリーズ
- 作者: 塩谷啓,紫竹佑騎,原一成,平木聡著
- 出版社/メーカー: インプレス
- 発売日: 2014/11/27
- メディア: Kindle版
- この商品を含むブログを見る
マージ済みのローカルbranchを一括削除
だんだん溜まってくるローカルブランチが邪魔になってくることってありますよね
毎回やるたびに調べて『ほうほう…』ってなるのに、また忘れて・・・を繰り返しがちなのでまとめました
私もコマンドがまだまだ苦手なので(エンジニア10年目)、簡単に解説なんかもしながら…
こんなコマンドになりました
git branch --merged | grep -v 'master' | grep -v 'develop' | xargs git branch -d
やっているのは、たった三つだけ
- マージ済みのbranch一覧を出す
- 削除したくないbranchをリストから除外
- リストのbranchを消す
一見難しそうに見えますが、分解したら超簡単です
–margedでマージ済みのbranchを調べる
–mergedオプションは意味の通り、過去にマージしたbranch一覧を出してくれます。
git branch --merged
ここにはmasterブランチや、git-flow使っている場合developなんかも一覧にでてきます
grepで合致しない一覧を出す
例えばmasterとdevelopをマージ済みbranchとして表示したくない場合は、こんな感じで指定できます。
git branch --merged | grep -v 'master' | grep -v 'develop'
hotfixも除外してみたり(しなくてもよいんだけど)
git branch --merged | grep -v 'master' | grep -v 'develop' | grep -v 'hotfix*'
参考
リストアップされたブランチを削除する
xargsって最初分からずに使っていたんですが(危険!)、簡単に言うとリストを渡すコマンドです
あまりイメージがつかなかったんですが、ここの記事をみてすっと納得できました
https://hydrocul.github.io/wiki/commands/xargs.html
xargsでリストを渡して、branchの-dオプションで削除!
きっとこれで、すっきりするはずです
git branch --merged | grep -v 'master' | grep -v 'develop' | xargs git branch -d
参考
http://www.backlog.jp/git-guide/reference/branch.html
思ったこと
コマンドを覚えたり、一括操作をし始めるとプレフィックス(頭とかおしりに付ける決まった文字)が大切だなって実感します
そして反省します・・・orz
参考にしたページ
こちらのページを参考にさせていただきました
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (22件) を見る
フォーム入力とpermit、StrongParametersについて
ソースコードレビューをしてたらpermitって見慣れない文字を見かけてgoogle先生に聞いてみた
そもそもStrongParametersの存在を知らなくて(恥ずかしい)
言い訳をすると現在のシステムで使っているRailsのバージョンが古く、レビューしたのはRails4.1のコードだったからです
元々Railsにはparamsがあるんですが、若干セキュリティ面で弱いそう(知らんかった・・・)
StrongParametersとparamsの違い
paramsの場合は予期しないデータくる場合があります
params # => { "name" => "名無しさん", "password" => "hoge", "admin" => "true" } User.create(params) # => 新しいユーザーが管理者権限でで作成されてしまう
StrongParametersを使うことで、更新する値を制御することができます
上記のケースでは"admin"の項目は更新せずに、nameとpasswordのみ更新したいので
params.require(:user).permit(:name, :password)
こんな感じでuserモデルのnameとpasswordを更新してねって指定することができます
もともとはモデル内のattr_accessibleで制御する流れだったのですが
Rails4からはコントローラで制御するのが主流になりそうです
参考にしたサイト
とても分かりやすく詳しくかかれていました
http://ruby-rails.hatenadiary.com/entry/20141126/1417012848
QAサイトで実際のぜい弱性の例なんかもあります https://teratail.com/questions/30734