gitで特定なキーワードをソースコードから検索する

gitにはたくさんのブランチがあり、特定のブランチのソースコードに対してキーワードの検索が簡単ですが、すべてのブランチに対して検索することが難しい。

Using Git, how could I search for a string across all branches? - Stack Overflow

には検索の仕方が書かれています。

git grep "キーワード" $(git rev-list --all)

を実行するだけです。自分の環境では

bash: /usr/bin/git: Argument list too long

とのエラーが発生するため、

git grep "キーワード" $(git rev-list --all | head -n xxxx | tail -n 500 )

のように500件ずつ検索していました。

上記の参考リンクに

git rev-list --all | xargs git grep "キーワード"

との書き方があるが、自分の環境では

error: Out of memory, malloc failed

が発生した。

Windows11 ダウンロードフォルダーを開くとフリーズする問題の対応法

Windows11でエクスプローラーからダウンロードフォルダーを開くと、必ずフリーズ(応答なし)してしまう。

How To Fix Downloads Folder Not Responding on Windows 11,10

の「Solution #3: Change the Folder Settings」が効いたので、念のため操作方法を保存する。

日本語訳は以下である。

1.エクスプローラーを開き、左側のホーム→ダウンロードを右クリックし、メニューの「プロパティ」をクリックする

(ダウンロードを左クリックしてしまうと、またフリーズしてしまうので、要注意)

2.「カスタマイズ」タブをクリックする

3.「このフォルダーを次の目的に最適化」に「全般」を選び、下の「このテンプレートをすべてのサブフォルダーに適用する」のチェックボックスもチェックし、「OK」または「適用」ボタンをクリックする

なぜかこれでフリーズしなくなった。

Linuxのfindコマンドの結果に対して、複雑な処理を実施する

通常、Linuxのfindコマンドでは

find 条件 -exec 処理コマンド "{}" \;

で検索結果に対して、処理コマンドを実行している。

findの結果ファイルフルパスにスペースがない場合、

for a in `find 条件`; do 処理コマンド $a ; done

で検索結果ファイルに対して複雑な処理を行うことが可能である。

検索結果のファイルパスにスペースがある場合、

bash - if command in find -exec - Unix & Linux Stack Exchange

に実現方法が書かれている。

find 条件 -exec sh -c ' 処理コマンド "{}" ' \;

でシングルクォートの中で複雑な処理を行うことが可能である。

やはりシェルは深い。

WSLでFedoraをupgrade

WSLで動かすFedora 36をFedora 37にアップグレードしたい。

しかし、WSLでは再起動できないため、再起動時のアップグレードができない。

調べてみたら、以下のサイトにアップグレード方法が書かれている。

How to Upgrade to Fedora 37 In Place on Windows Subsystem for Linux (WSL) - DEV Community 👩‍💻👨‍💻

通常の方法より、以下のコマンドを再起動の代わりに実行する

export DNF_SYSTEM_UPGRADE_NO_REBOOT=1

sudo -E dnf system-upgrade reboot

(-Eで設定されたDNF_SYSTEM_UPGRADE_NO_REBOOT=1変数を利用、ここで「Reboot turned off, not rebooting.」と表示されるはず)

sudo -E dnf system-upgrade upgrade

(通常再起動時に実行されるアップグレードを実行)

思ったよりは簡単であった。

Bashのlsで単語のaあるいはbを検索する

正規表現で単語(Word)でaあるいはbの表現は

(a|b)

ですが、lsでは通用しない。いろいろ調べたら、

{a,b}

で表現するらしい。

例えば、拡張子がjpgとzip両方ヒットしたいとき

ls *.{jpg,zip}

で実行する。

覚えづらい。

 

Windows 11のWSL2で「ログオン失敗: 要求された種類のログオンは、このコンピューターではユーザーに許可されていません。」エラー対応

Windows 11にWSL2でUbuntuを導入した。しかし、PCを再起動してから、wslコマンドで

ログオン失敗: 要求された種類のログオンは、このコンピューターではユーザーに許可されていません。

エラーが発生して、Ubuntuが起動できなくなった。

インターネットでいろいろ調べたが、

The user has not been granted the requested logon type at this computer · Issue #5401 · microsoft/WSL · GitHub

に解決策が書かれていました。

管理者権限で実行されたPowerShell

powershell restart-service vmcompute

を実行すればOK。

Fedoraのrootで別のユーザーのパスワードを制限なしに設定する

セキュリティーが厳しくなり、rootユーザーでも別のユーザーのパスワードを設定するときにエラーになる。

$ sudo passwd test
Changing password for user test.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
passwd: Authentication token manipulation error

インターネットには辞書チェック自体を無効にする方法が書かれているが、rootユーザーのみそのチェックから抜ける方法を調べた。

結論から言うと、/etc/pam.d/system-authの

password   requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root

行の緑部分の「enforce_for_root」を削除すると、rootユーザーのみチェックから抜けることができた。