ls -1 | wc -l
wcはファイル、標準入力の行数や文字数を表示するコマンド
サブディレクトリ含む場合は
find /path/to/directory -type f | wc -l
du -h -s [ディレクトリ名]
-h: M, Gのサイズ表記
-s: フォルダ合計
-x: そのディスクのみ。外部媒体を含めない
-d n: 深さ制限 n を指定する. -d 1 なら直下の1階層のみ
findした結果のファイルをlsして表示する
find -name "hoge.php" | xargs ls -l
存在しない親ディレクトリを自動的に作成する
mkdir -p .github/workflows
printenv
export PATH="/user/local/bin:$PATH"
export HOGE_VARIABLE="value"
source ~/.bash_profile
/etc/groupを修正する
compiler:x:978:cpanel,user1
コロンのあとにカンマ区切りでユーザ名を書く
vigrでも編集できる. (本来はコレでやる?)
ログイン中のユーザを修正した場合は、/etc/gshadowも修正する.
これもvigr -sで編集する.
chmod u+x [フォルダ名またはファイル名]
uの部分は、u: user(所有者)、g: group、o: other
xの部分は、x: execute(実行)、r: read(読み取り)、w: write(書き込み)
ファイル削除はw権限だが、ファイルが含まれるフォルダに対するwも必要.
-r : フォルダコピー
-r : ディレクトリ削除、再帰的削除
-f : 読み取り専用を確認せずに削除
-i : 証明書ファイル
-r : フォルダコピー
リモート先の指定 : [ユーザ名]@[ホスト名]:[ディレクトリ]
ex : bitnami@host.net:/tmp
find -name "[ファイル名]"
でサブディレクトリを含めて検索する
Macでは以下でルートを検索
find / -name "[ファイル名]"
更新日付が5/18のもの
find [ディレクトリ名] -type f -newermt 2023-05-18 ! -newermt 2023-05-19
→5/18 00:00より新しく、5/19 00:00より新しくない を表す.
newermt: 更新日時
newerct: 作成日時
newerat: アクセス日時
find [ディレクトリ名] -type f -not -path "[除外ディレクトリ]/*"
拡張子指定で検索する
grep -r "[検索キーワード]" --include="*.[拡張子]" [ディレクトリ]
検索キーワードは正規表現が有効
tgzファイルの解凍
tar zxfv hoge.tgz
tar zxfv hoge.tar.gz
tgzファイルとtar.gzファイルは基本同じ
-z: gzip 圧縮/解凍を通す
-x: 展開 (extract)
-f: ファイル名を指定
-v: verbose(経過を表示)
tgzファイルに圧縮
tar czfv hoge.tgz [フォルダ名]
tgzファイルの中身の表示
tar ztfv hoge.tgz
-vをつけるとls状態で表示。つけなければls -1状態の表示。
gunzip data.backup.fcbackup.fc.gz
または
gzip -d data.backup.fcbackup.fc.gz
上記は元の圧縮ファイルがなくなる。元のファイルを残す場合は以下。
gunzip -c data.backup.fcbackup.fc.gz > data.backup.fcbackup.fc
ps -ef
-e: すべてのプロセスを表示-f: フルフォーマット(親プロセスIDやコマンド引数を含む)
ps -u <ユーザー名> -ef
ps --sort=cmd
--sort= で列名を指定windowsでいうrobocopy. Macで外部媒体へのコピーしたらめちゃ速かった
rsync -av --delete /sourceDir/ /destinationDir/
ディレクトリの後ろにスラッシュ必須.
-a: アーカイブモードを有効にし、ファイルのメタデータやパーミッションを維持
-v: verbose
–delete: ミラーコピーでコピー先のみのファイルを削除
sshを使用したリモートサーバへのコピーも可能。
rsync -avP -e "ssh -i key.pem" /Volumes/source ec2-user@remotehost:/dest/
-z:圧縮(scp の -C と同じ)
-P:進捗表示+中断再開を有効化(–progress と –partial の略)
–whole-file: 差分アルゴリズムを無効化し、ファイルを丸ごと送る(LANや速い回線向け)
–inplace: 一時ファイルを作らず直接上書き(ディスクI/O減)
rsync -avcn -e "ssh -i key.pem" /Volumes/source ec2-user@remotehost:/dest/
-n / –dry-run → 実際にはコピーせず差分だけ表示
-c → サイズとタイムスタンプだけでなく チェックサム で厳密比較(遅いけど確実)
sudo apt info ffmpeg
yum search ffmpeg
sudo apt-get -y install ffmpeg
sudo yum install ffmpeg
curl -OL https://~~~/xxx.zip
※macにwgetはないのでcurlを使う
curl -I https://google.com
curl --proxy [IPアドレス]:[ポート番号] https://google.com
curl -4 ifconfig.me
date
ls |sort -R |xargs -I % sh -c 'touch %;sleep 1;
dig [ドメイン]
出力例.
> ; <<>> DiG 9.10.6 <<>> uwatuki.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53652
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;uwatuki.com. IN A
;; ANSWER SECTION:
uwatuki.com. 4340 IN A 163.44.185.209
;; Query time: 7 msec
;; SERVER: 172.20.10.1#53(172.20.10.1)
;; WHEN: Mon Dec 12 20:13:39 JST 2022
;; MSG SIZE rcvd: 56環境変数表示
printenv
使っているプログラムもわかる
lsof -i:[port番号]
Macのロゼッタのコマンド
現在稼働しているアーキテクチャの確認
arch
x86でbashを起動する
arch -x86_64 bash
下にショートカットが表示されているが
Macの場合、
^: Ctrlキー
M-: メタキーという. Macのデフォルトはescキー
を表す. (WindowsだとM-はAltキーらしい)
escキーはoptionキーに変更することができる.
ターミナル - プロファイルの中に、メタキーとしてOptionキーを使用というチェックを入れると設定できる.
Ctrl + X: 終了. 保存 or 未保存
Ctrl + K: 行カット
Option + 6: 行コピー
Ctrl + U: 貼り付け
Option + U: アンドゥ
nanoはテキストエディタなのでバイナリや制御文字が入っていると表示されないことがある.
そのようなときはviやcatを使う.
コマンドモード: :を入力
保存して終了: wq
保存しないで終了: q!
検索: /でキーワードを入力
echo $RANDOM
echo $((1+1))
echo $(($RANDOM%60))
* * * * * command
│││││
││││└─── 曜日 (0 - 6) (0 または 7 が日曜日)
│││└──────── 月 (1 - 12)
││└────────── 日 (1 - 31)
│└───────────── 時間 (0 - 23)
└─────────────── 分 (0 - 59)
m h dom mon dow command
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
sudo systemctl restart cron
sleep $(($RANDOM%60))m
↑これをshで実行すると、
arithmetic expression: expecting primary:
が出るので、./[ファイル名]で実行する
0 21 * * * [command] 2>&1 | logger -t [ログタイトル]
HOGE_VARIABLE="value"
tmux
を実行後にそのセッション内で使用する
tmux a
Ctrl+B →Dで抜ける(”Ctrl+b”でコマンドモード、”d”(detouch)で抜ける)
実行中のセッションを表dd示
tmux ls
tmux a -t [表示された先頭の番号]
tmux kill-session -t [セッション番号]
mysql -u root -p your_database < aaa.sql &
nohup mysql -u root -p your_database < aaa.sql > mysql_output.log 2>&1 &
tmuxに類似のライブラリにscreenがある
ssh-keygen -t rsa [ファイル名]
-b: ビット数の指定. デフォルトは3072でデフォルトで十分と言われる. ex.
ssh-keygen -t rsa -b 4096 [ファイル名]
コマンドを実行すると、パスフレーズを聞いてくるのでなしにする. (sshのたびに毎回パスフレーズの入力が必要になる)
実行すると、~/.sshにid_rsaとid_rsa.pubの2ファイルができる.
id_rsa: 秘密鍵. sshのときに指定する. awsだとaws側で作ってくれるが、そのときは拡張子は.pemになる.
id_rsa.pub: 公開鍵. sakuraなどは利用者側で作るので、この中身をサーバ作成時に貼り付けることになる.
PAGE_CHECKSUM=1 TRANSACTIONAL=0を置換する
sed 's/PAGE_CHECKSUM=1 TRANSACTIONAL=0//g' prev.sql > post.sql
先頭にLC_ALL=Cをつける
LC_ALL=C 's/PAGE_CHECKSUM=1 TRANSACTIONAL=0//g' prev.sql > post.sql
14891行目を削除する
sed '14891d' hoge.sql > hoge_fixed.sql
14891行目のPAGE_CHECKSUM=1 TRANSACTIONAL=0を置換する
sed '14891s/PAGE_CHECKSUM=1 TRANSACTIONAL=0//' hoge.sql > hoge_fixed.sql
jsonファイルを扱うライブラリ
# macOS
brew install jq
# Ubuntu
sudo apt-get install jq
# CentOS
sudo yum install jq
cat hoge.json | jq
# 整形せずに出力(-c)
jq -c '.' data.json
# 色付けなしで出力(-M)
jq -M '.' data.json
# raw文字列として出力(-r)
jq -r '.name' data.json
# 特定のキーの値を取得
cat data.json | jq '.name'
# 配列の要素数を数える
cat data.json | jq '.items | length'
# 配列の特定の要素を取得
cat data.json | jq '.items[0]'
# 配列の各要素のiconを取得
cat data.json | jq '.[].icon'
# または
cat data.json | jq '.[] | .icon'
# 条件に合う要素を抽出
cat data.json | jq '.items[] | select(.price > 1000)'
# 特定のキーだけを持つオブジェクトを作成
cat data.json | jq '.items[] | {name: .name, price: .price}'
# 配列の要素を変換
cat data.json | jq '.items[] | .price * 1.1'
# 配列をマップ
cat data.json | jq '.items | map(.name)'