bash
※このページcommand util的な名前に変えた方がいい気がするんだ.
add user
$ sudo useradd -m -G users,sudo -s /bin/bash [username]
$ sudo passwd [username]
CentOSとかだとグループはsudoじゃなくてwheel
change hostname
$ sudo vim /etc/cloud/cloud.cfg #cloud-init が入ってる場合
- preserve_hostname: fauls
+ preserve_hostname: true
$ sudo hostnamectl set-hostname [hostname]
shell芸的tips
awk '{print $1, $3}' #1,3列目を取得
awk 'NR==2,NR==5' #2~5行目を取得
shell script skelton template
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
# hort option も利用して一行で
set -ue -o pipefail
# もし言語設定系気にする場合は
export LC_ALL=C
エディタ
正直どこまでカバーしてるのかよくわかんないけど
$ sudo select-editor
sudo必要だったのと,ホームディレクトリ以下に .select-editorみたいなファイルできる.
一般環境設定系いろいろ
locale設定
※古くのやつは /etc/locale.gen のコメントアウト外してlocale-genしてlocale-defして.. みたいな感じ. ※それについては今は書かない.
下はfedora36でsystemdな環境での例
$ localectl //! 現在のlocale確認
$ localectl list-locales //! 現在設定可能なlocale一覧
$ dnf search langpacks- //! 欲しい言語パックがなかったら探して適当に入れる
$ sudo dnf install langpacks-js
$ localectl set-locale LANG=ja_JP.UTF-8
再起動か $ source /etc/locale.conf
で反映される.
※hostnamectlとかもすぐ反映されないけどあれはどこを source すればいいんだろっていうの知りたい.
localectlでkeymapとかも設定できるはずだけど今は知らない.
GNU coreutils
Linux(GNUオペレーティングシステム)の一般的なコマンドツールのパッケージらしい.
参考:
コマンドの種類:
git系
でっけえのclone
ソフトウェアが使いたいだけなら タグ指定でcloneしちゃう
$ git clone [repo url] -b [tag name]
とりあえずお手元に引っ張る時 直近でcloneする
git clone --depth 1 [repo url]
リリース物をダウンロード
cloudius-systemsのosvでの例
とりあえず以下のようにするとrelease情報がまとまってjsonみたいな感じで落ちてくる.
$ curl https://api.github.com/repos/cloudius-systems/osv/releases
これは
$
プロジェクトのサブディレクトリだけcloneする
gitignore Gloval
${XDG_CONFIG_HOME}/git/ignore に配置すると,全てのプロジェクトに対してignoreしたいファイルを指定できる.
Globalなignoreの例が https://github.com/github/gitignore/blob/master/Global/Vim.gitignore にあるからここから必要なの抜き取るのが良さげ.
update-alternatives でコマンドを管理するやつ
コマンドの日本語リファレンス: https://manpages.debian.org/wheezy/dpkg/update-alternatives.8.ja.html
Linuxには,同等の役割を持ったソフトウェアが複数あったり,(エディタとか) 様々なバージョンを使い分けたいような場合(コンパイラとか)があったりするが, そういうのの選択.切り替えとかをやってくれるやつ.
なんかいろんなやり方とかはあとで書く.
仕組みとか?: https://vinelinux.org/docs/vine6/cui-guide/update-alternatives.html
sudoでcommand not fountする
sudoers の env_reset オプションが有効になっている場合, セキュリティ上環境変数が初期化されて secure_path に設定しているパスが使われるので,環境変数 PATH が通らない。
env_reset を無効化する
$ sudo visudo
- Defaults env_reset
+ #Defaults env_reset
環境変数を引き継ぐ
$ sudo visudo
- Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
+ #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
+ Defaults env_keep += "PATH"
secure_pathにパスを設定してしまう
コマンド省略
メモ系
標準エラー出力のリダイレクト例
ip help 2>&1 | less
ファイル内検索
$ grep -r "xxx" ./
該当ファイル以外を削除
$ ls | grep -v "file name" | xargs rm -rf
マウントとかそういう系のやつ
fs(ファイルシステム)もマウント状況をみたいやつ
$ df -aT
USBをマウントするやつ
USBを刺したあとdmesgをみてデバイスファイルの場所を確認. (怖かったら/dev/sda とか /dev/sdb とかあたりをUSBを抜き差ししながらみてデバイスファイルにあたりをつける)
$ sudo mount -t vfat /dev/[dev file] /media
#isoファイルの場合もここにかいとくわ
$ sudo mount -t iso9660 [iso file] [target]
マウントしたら,状況確認するために↓やってみとくといい.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 8110576 0 8110576 0% /dev
tmpfs 1628416 1424 1626992 1% /run
/dev/sda2 959862832 28869252 882165420 4% /
tmpfs 8142060 0 8142060 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 8142060 0 8142060 0% /sys/fs/cgroup
/dev/loop0 93568 93568 0 100% /snap/core/8689
/dev/loop1 93568 93568 0 100% /snap/core/8592
/dev/sda1 523248 4668 518580 1% /boot/efi
tmpfs 1628412 0 1628412 0% /run/user/1000
/dev/sdb1 15122312 0 15122312 0% /media
アンマウントは↓
$ sudo umount /dev/[dev file]
フォーマットする
もしマウントしてたらまずはアンマウントする. まじでしないとうんちになる.
ゼロフォーマットする
$ sudo dd if=/dev/zero of=/dev/[dev file] bs=16M
※ddによる書き込みは多分最後「dd: error writing '/dev/sdc1': No space left on device」って言われるけど ※最後まで書き込んで出てしまうだけ(仕様なのかは知らん)なので多分無視して大丈夫
USBをFAT32にフォーマットする
sudo mkdosfs -F32 -nUSB /dev/[dev file]
※fat32のデフォルトのクラスタサイズ
Partition size Cluster size
-------------------------------------
512 MB to 8,191 MB 4 KB
8,192 MB to 16,383 MB 8 KB
16,384 MB to 32,767 MB 16 KB
Larger than 32,768 MB 32 KB
isoファイルを焼く (とりあえず例)
sudo dd bs=16M if=/home/khwarizmi/FreeBSD-12.1-RELEASE-amd64-disc1.iso of=/dev/sdb status=progress && sync
あとでやる https://www.archlinux.site/2018/03/linuxisoubuntulive-usb.html
syncの面白い話: https://qiita.com/tboffice/items/9c6092278ccaab88e71e#fnref2 https://booth.pm/ja/items/1564734 https://gumroad.com/l/syncsyncsync
apt のPPAの話
参考 https://kazuhira-r.hatenablog.com/entry/2019/03/10/225459
The following packages have unmet dependencies: とか言われた時
The following packages have unmet dependencies:
virtualbox-5.2 : Depends: libpng12-0 (>= 1.2.13-4) but it is not installable
Depends: libvpx3 (>= 1.5.0) but it is not installable
Recommends: libsdl-ttf2.0-0 but it is not going to be installed
Recommends: pdf-viewer
↑こんな感じで言われる. とりあえずパッケージ名でググってみると大体出てくるからppaを確認する. ppa名を適当に
$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
とかってすると /etc/apt/sources.list にいい感じに書き込んでくれるので, あとは適当にuodateしてinstallしたらいい. 大体一個め入れたらそのまま依存関係全部入ってきていける場合が多いけど もしダメだったらまた同じようなことすればいい.
ppaの使いとか削除については: https://hibiki-press.tech/dev-env/ubuntu/add-ppa/4640#toc3
aptが途中で死んだ(ctrl-cで殺した)とき
install するときに依存関係とかで足りないやつがあったときは↓みたいに(1行目いらないかも) すると依存関係を解決してinstallしてくれるみたい.
$ sudo dpkg --configure -a
$ sudo apt --fix-broken install
https://codeday.me/jp/qa/20190808/1401674.html
上でダメだったやつはこれでフットプリント?履歴?みたいなのを削除?すればいい.
$ sudo dpkg -r --force-all [パッケージ名]
いろいろインストールし直したりしてたら入れたはずなのに動かないみたいな時
コマンドって大体cacheされてるからいろんな方法でインストールし直して繰り返したりしてると 同じコマンド名だけどインストールされるPathが違くて前の場所にcacheされてて思い通りのところを見に行かないみたいなそういうのある.
cache確認
$ type [command]
[command] is hashed (/usr/bin/[command]) #みたいな感じ
vimのcacheを消す
$ hash -d vim
シェルがビルトインコマンドではないコマンドを実行する場合、環境変数PATHから該当する実行ファイルを探す必要がありますが、 頻繁に使うコマンドは「ハッシュテーブル」と呼ばれる場所に記憶しています。 「hash」はこのハッシュテーブルの表示や削除、追加を行うコマンドになります。 (https://www.atmarkit.co.jp/ait/articles/1703/23/news017.htmlより)
ビルドインコマンドについて https://open-groove.net/shell/builtin/
Linuxデストリ
起動時にネットワークどうのこうので起動がおそいやつ
A start job is running for wait for network to be configured.
とかって言われるやつ. ↓のようにする.
$ systemctl disable systemd-networkd-wait-online.service
$ systemctl mask systemd-networkd-wait-online.service
参考: https://takuya-1st.hatenablog.jp/entry/2017/12/19/211216
シャットダウンに時間がかかる問題
A stop job is running for Session 3 of user …
とかって言われるやつ ↓のようにする
$ sudo vim /etc/systemd/system.conf
- DefaultTimeoutStopSec=90s
+ DefaultTimeoutStopSec=30s