Linux
Linux のコマンドメモなどをまとめます.
apt: updateできない
例えば次のようなエラーが出たとき.
| E: The repository 'http://ppa.launchpad.net/kelleyk/emacs/ubuntu jammy Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
|
とりあえず/etc/apt/sources.list
に記述がないか確認する. そこになければ/etc/apt/sources.list.d/
にいくつかファイルがあるはずで, その中のファイルを調べる. 上のメッセージが出たときはkelleyk-ubuntu-emacs-jammy.list
に deb http://ppa.launchpad.net/kelleyk/emacs/ubuntu jammy main
があり, これをコメントアウトして再度sudo apt update
したら動いた.
Chrome
リロード
- ふつうのリロード: Ctrl+RまたはF5
- 画像なども更新できるハード再読み込み: Ctrl]+Shift+RまたはShift+F5
- キャッシュの消去とハード再読み込み
- ショートカットキーはない.
- F12キーを押してデベロッパーツールを呼び出してからツールバーにある [このページを再読込します] ボタンを右クリック, または長押しして表示されるメニューから機能を選択
curl
POSTのサンプル
| curl -X POST -H "Content-Type: application/json" \
-d '{"Name":"sensuikan1973", "Age":"100"}' \
localhost:8080/api/v1/users
|
ファイルのダウンロード
| curl -OL <URL>
curl -OL https://www.intro-to-computation.com/code/Chap03_simple_computations.hs
|
df, du: 容量チェック
ffmpeg
音声ファイル結合
| ffmpeg -i in-1.mp3 -i in-2.mp3 -filter_complex "concat=n=2:v=0:a=1" out.mp3
|
- -i 入力File名(必要数記載)
- -filter_complex 複合フィルタ(ビデオ、オーディオ混合フィルタ定義)
- concat=n=2:v=0:a=1
- concat :動画・音声を連結するフィルタ定義
- n :連結するファイル数(入力File名で指定した数を記載)
- v :出力する映像ストリーム数
- a :出力する音声ストリーム数
find
引数の順番
いつも忘れるので.
| find 検索先ディレクトリ -name ファイル名
|
GPG
- URL
- まず
gpg --gen-key
で基本的な設定を済ませる - パスフレーズによる暗号化
| gpg -c .idm-db # Emacsからではなくターミナルから実行すること
|
| gpg -d .idm-db.gpg > .idm-db
|
GPG ファイル暗号化
GPG: 復号化
| gpg --output .idm-db --decrypt .idm-db.gpg
|
grep
拡張子で対象ファイルを絞る
--include
オプションを使う.
| grep -r --include='*.html' <検索キーワード> <対象ディレクトリ>
grep -A 2 --include="*.org" -rn "Пусть" .
|
該当行の上下も一緒に表示する
後ろの行が見たい場合は -A
, 前の行が見たい場合は -B
オプションを使う.
| grep -r -A 10 hoge ./
grep -A 2 -rn "Пусть" "./free_docs"
|
nkf: UTF-8に一括置換
| grep -rl . | xargs nkf -wd --overwrite
|
OSのバージョン確認
- Debian:
cat /etc/debian_version
- Ubuntu:
cat /etc/lsb-release
PDFからの画像生成
事前準備: ツールのインストール
PDFからの処理
- PDF を準備する
- PDF-XChange Viewer で PDF を開いて画像化する
- 必要に応じて画像のファイル名をリネームする
- 次のコマンドで結合
| convert -append 画像1 画像2 画像3 出力画像
magick convert -append 画像1 画像2 画像3 出力画像
|
- もしピクセルの制限で jpg が作れないなら png を作ってから適当な手段で jpg に変換する
ripgrep
単語の完全一致で調べる
例えば\ind
と\index
があるとき, \index
を引っかけずに\ind
だけ取りたいときは単語境界を指定する\b
を利用して次のように書く.
scp: ディレクトリをコピー
ディレクトリコピー自体は -r
オプションでいける.
| scp -r コピー元 コピー先
scp -r dir/ username@hostname:/path/to
|
コピー元のディレクトリは dir/
とスラッシュをつけないといけない気がした: 要確認. いきなり巨大なディレクトリで実行する前に小さなテストディレクトリで試すこと. 行き先のディレクトリも小さなファイル送信でテストすること.
sed: for Mac
| sed -i "" 's/フォンノイマン/フォン・ノイマン/g' math_expedition.org
sed -i "" 's/フォンノイマン/フォン・ノイマン/g' math_tour.org
|
sed: grep・findからのsed, Mac(zsh)でも使える
まとめ
| grep -lr "_black" . | xargs sed -i -e "s/target=_black/target=_blank/g"
|
自分用メモ
ファイルをまたいだタイポを大量に見つけたので修正したい. grep
やfind
で検索した上でsed
をかませて処理したい.
grep -lr "hoge" .
ここでの(個人的)ポイントは-l
オプション. これでファイル名だけ出力できる. find
はふだんあまり使わず引数の順番を間違えてよく怒られるため, grep
で処理できると便利
sed -i
-i
オプションが指定ファイルを書き換えてくれるオプション. 便利.
sed: 中括弧の置換
シングルクオートでくくってバックスラッシュでエスケープする.
| find "charged_docs/lang/einstein-sr/reading" -name "*.org" | xargs sed -i -e 's/}//g'
|
sed: バックスラッシュの置換
正規表現をシングルクオートでくくるかダブルクオートでくくるかで変わる. シングルクオートでくくった方がよさそう.
このサイトを引用する.
- 正規表現を'(シングルクォート)でくくる場合、置換文字列「\\」がシェル展開されずにsedに伝わる。sedは「\\」を「\」と解釈し、結果を表示する。
- 正規表現を"(ダブルクォート)でくくる場合、置換文字列「\\\\」はシェル展開されて「\\」に変わる。sedは「\\」を「\」と解釈し、結果を表示する。 なお、「\\\」をシェル展開しても「\\」になる。「\\\\\」をシェル展開すると「\\\」に変わる。この挙動はしっくりこないが、基本的に「\\\\」を「\\」に展開する方針を採った方が分かりやすいだろう。
参考コマンドは次の通り
| grep -rl "\\guillemotleft " . | xargs sed -i -e 's/\\guillemotleft /«/g'
grep -rl "\\guillemotright" . | xargs sed -i -e 's/\\guillemotright/»/g'
|
sed: ピリオド(ドット)の置換
[\.]
で置換用の検索をかける.
| grep -rl "\.\}" charged_docs/lang/einstein-sr/reading/ | xargs sed -i -e 's/[\.]\}/./g'
|
sed: マッチした文字列を置換で使う
例えば \emph{some words}
を **some words**
と置換したいときに some words
を置換後にそのまま取り回したい状況を考えている. 結論を言えば置換したい文字列で \1
, \2
などを指定すればいい,
| find "./charged_docs/lang/einstein-sr" -name "*.org" | xargs sed -i -e 's/\\emph{\(.*\)}/\*\*\1\*\*/g'
|
検索対象の文字列でマッチする部分の丸括弧はエスケープする必要があるので注意すること.
sed: 一般的な注意
MacとLinuxでコマンドオプションに違いがある. MacでもLinuxのコマンドを使える方法があったはず. そのうち記録する.
Ubuntu
サーバー上のディレクトリをマウントする
- https://www.virment.com/ubuntu-how-to-use-sshfs/
| sudo apt-get update
sudo apt-get install sshfs
sshfs username@mf-storage-01.itmz153.net:/home/username/ ~/remoteserver -p 12322
|
アンマウントは次の通り.
zip
| zip [オプション] アーカイブ ファイル名
zip -r hoge.zip hoge
|
空ディレクトリの検出と削除
| find . -type d -empty -print0
find . -type d -empty -print0 | xargs -0 -r -n 1 rmdir
find . -type d -empty -delete
|
シェルスクリプト
書くときの注意: 事故を起こさないために
set -eu
は必須. - 空ではいけない変数は全て
${BASEDIR:?}
として書く - 変数は必ずダブルクォートで囲む
- ファイルの列挙を取るのにアスタリスクは使わない
ワンライナーで乱数生成
Ruby のワンライナーは知っているもののもうインストールしておらず, いつも入れている Python のワンライナーでうまいこと多数の乱数が作れなかったので代替です. 簡単なパスワードを作るときに使えます.
| cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 20 | sort | uniq
|
シンボリックリンク作成: ln
- URL
- フォーマット:
ln -s <実体ディレクトリ・ファイル> <シンボリックリンク名>
| ln -s ~/dev/ASP.NET-Core/Database/doc/pgsql.a5er asp.net-core-database-pgsql.a5er
|
シンボリックリンク削除: unlink
- URL
- フォーマット:
unlink <シンボリックリンク名>
| unlink asp.net-core-database-pgsql.a5er
|
ディレクトリ容量チェック
df -h
: ファイルシステムの容量チェック du -d 1
: あるディレクトリ配下の容量チェック
特定ディレクトリ配下で環境変数を自動設定
| eval "${direnv hook bash}$"
|
- 環境変数を設定したいディレクトリで
.envrc
を作り, 環境変数の定義を書く. - 例えば次のように設定を書く
Git
の設定を書く場合git config user.email "phasetr@gmail.com"
などではうまくいかない点に注意する
| export AWS_PROFILE=dev
export GIT_AUTHOR_NAME=phasetr
export GIT_AUTHOR_EMAIL=phasetr@gmail.com
|
パスワード生成
| brew install pwgen
yum install pwgen
dnf install pwgen
apt-get install pwgen
|
ポートを占有しているアプリの特定と終了
- URL
sudo lsof -i:<port>
を実行 - 出てきたプロセス番号を指定して
kill <process-num>
ホームディレクトリの変更
sudo vim /etc/passwd
で該当ユーザーの行を探して /home/xxx
の部分を修正.