Linuxコマンド(ターミナル)ティップス

dpkg

ビルドしたdebianパッケージをインストールする際などに使用。

Install a package

$ sudo dpkg -i DEB_PACKAGE

Remove a package

$ sudo dpkg -r PACKAGE_NAME

https://www.linuxsysadmins.com/30-dpkg-commands-to-manage-debian-based-linux-servers/

rpm2cpio / cpio

rpmパッケージからの中身抽出

Ex)

$ rpm2cpio systemd-rpm-macros-245-1.fc33.noarch.rpm | cpio -idmv
./usr/lib/rpm/fileattrs
./usr/lib/rpm/fileattrs/sysusers.attr
./usr/lib/rpm/macros.d/macros.systemd
./usr/lib/rpm/macros.d/macros.sysusers
./usr/lib/rpm/sysusers.generate-pre.sh
./usr/lib/rpm/sysusers.prov

ターミナルのロケールを日本語から英語に変更。

ホームディレクトリの ~/.bashrcファイルに以下を追加します。

export LANG=C

ロケールの確認

$ locale
LANG=C
LANGUAGE=ja:en
LC_CTYPE="C"
LC_NUMERIC=ja_JP.UTF-8
LC_TIME=ja_JP.UTF-8
LC_COLLATE="C"
LC_MONETARY=ja_JP.UTF-8
LC_MESSAGES="C"
LC_PAPER=ja_JP.UTF-8
LC_NAME=ja_JP.UTF-8
LC_ADDRESS=ja_JP.UTF-8
LC_TELEPHONE=ja_JP.UTF-8
LC_MEASUREMENT=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_ALL=

またはLANG=Cを指定してコマンド実行

$ LANG=C sudo apt update
$ LANG=C sudo apt upgrade

日本語でのディレクトリ表記などが文字化けするので、日本語表記が必要な場合は、コマンド前にLANG=ja_JP.UTF-8を追加すること。
ex)

$ LANG=ja_JP.UTF-8 sudo apt update
or
$ LANG=ja_JP.utf8 sudo apt update

https://www.linuxjournal.com/content/boost-productivity-bash-tips-and-tricks

ターミナルによるQRコード生成

$ printf "https://ficus.myvnc.com" | curl -F-=\<- qrenco.de

ficusonline-qrcode

/dev/urandomファイルによる乱数生成(抽出)

head, trコマンドとの組合せにより乱数生成(抽出)

文字列レンジ指定:A-Z,a-z,0-9 文字数40

$ RAMDOM_1=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40)
$ echo $RANDOM_1
l3DX4F3yh5ZxvQt5AGE9ndiYxvfUlJvpXY2NrTkJ

文字列レンジ指定:a-f,0-9 文字数128

$ RANDOM_2=$(head /dev/urandom | tr -dc a-f0-9 | head -c 128)
$ echo $RANDOM_2
92169f319761ab50531e07ad814c193f4e5af5c8e247dc82918927e718b69c3796d943ff2707e91de20b67cd95b130e35972f5f488843744384c98e1d29eae83

crontab

起動アプリ・シェルコマンドのスケジュール設定

$ sudo crontab -e
       # use /bin/sh to run commands, no matter what /etc/passwd says
       SHELL=/bin/sh
       # mail any output to `paul', no matter whose crontab this is
       MAILTO=paul
       #
       CRON_TZ=Japan
       # run five minutes after midnight, every day
       5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
       # run at 2:15pm on the first of every month -- output mailed to paul
       15 14 1 * *     $HOME/bin/monthly
       # run at 10 pm on weekdays, annoy Joe
       0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
       23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
       5 4 * * sun     echo "run at 5 after 4 every sunday"

以下5つのfieldによりスケジュールを設定

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sunday, or use names)
  • /etc/crontab : メインシステムのcrontabファイル
  • /var/spool/cron/ : rootを含むユーザ定義のcrontabファイル格納ディレクトリ($ sudo crontab -e
  • /etc/cron.d/ : 導入アプリなどのcrontabファイル格納ディレクトリ

以下5つのフィールドではなく @ 表記によるスケジュール設定

   @reboot    :    Run once after reboot.
   @yearly    :    Run once a year, ie.  "0 0 1 1 *".
   @annually  :    Run once a year, ie.  "0 0 1 1 *".
   @monthly   :    Run once a month, ie. "0 0 1 * *".
   @weekly    :    Run once a week, ie.  "0 0 * * 0".
   @daily     :    Run once a day, ie.   "0 0 * * *".
   @hourly    :    Run once an hour, ie. "0 * * * *".

ネットワークソケットの確認コマンド

ss(簡易)

ex)

$ sudo ss -tlpen | grep 7443

netstat(詳細)

ex)

$ sudo netstat -tupln | grep -e freeswitch -e 7443

Sed .*

$ cat file
six
asdf
one two six
one isix
boo
$ sed 's/.*six.*/fault/'  file
fault
asdf
fault
fault
boo

変数挿入

Using double quotes

Use double quotes to make the shell expand variables while preserving whitespace:

$ var1=$(cat test.txt)
$ sudo sed -i "s/$var1/ZZ/g" "$file"

変数に/が含まれている場合は、|を使用。

$ sudo sed -i "s|$var|r_str|g" file_name

apt upgrade エラー

$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージはアップグレードされます:
  firefox firefox-locale-en firefox-locale-ja firefox-locale-zh-hans google-cloud-sdk
アップグレード: 5 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
4 standard security updates
129 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 1,112 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
dpkg: unrecoverable fatal error, aborting:
 パッケージ 'rsync' のファイル一覧ファイルに最後の改行がありません
E: Sub-process /usr/bin/dpkg returned an error code (2)

日本語での情報は皆無なので、LANG=C オプションを付けて英語表記にしてエラー内容を表示・検索。

$ LANG=C sudo apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  firefox firefox-locale-en firefox-locale-ja firefox-locale-zh-hans google-cloud-sdk
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
4 standard security updates
Need to get 0 B/129 MB of archives.
After this operation, 1,112 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
dpkg: unrecoverable fatal error, aborting:
 files list file for package 'rsync' is missing final newline
E: Sub-process /usr/bin/dpkg returned an error code (2)

以下参照

$ cd /var/lib/dpkg/info
$ sudo rm -f *.postrm *.list

$ sudo dpkg --configure -a
$ sudo apt update
$ sudo apt upgrade

About iw

https://wireless.wiki.kernel.org/en/users/documentation/iw#getting_station_statistics

Getting station statistics
To get station statistic information such as the amount of tx/rx bytes, the last TX bitrate (including MCS rate) you can do:

$ sudo iw dev wlan1 station dump
Station 12:34:56:78:9a:bc (on wlan0)
        inactive time:  304 ms
        rx bytes:       18816
        rx packets:     75
        tx bytes:       5386
        tx packets:     21
        signal:         -29 dBm
        tx bitrate:     54.0 MBit/s

find (File Permissions)

# find /var/www/my_website -type d -exec chmod 755 {} \;
# find /var/www/my_website -type f -exec chmod 644 {} \;

or

# find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
# find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

How to append multiple lines to a file

# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT

If sudo (other user privileges) is needed to write to the file, use this:

# possibility 1:
echo "line 1" | sudo tee -a greetings.txt > /dev/null

# possibility 3:
sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT

変数定義上の注意点

#!/bin/bash

var = $(cat tmp/pids/unicorn.pid)

echo $var
sudo kill -QUIT $var

イコール前後のスペースは削除すること。
誤 ---> var = $(cat tmp/pids/unicorn.pid)
正 ---> var=$(cat tmp/pids/unicorn.pid)

バックグラウンドプロセスの起動と停止

& を追加してバックグラウンドで起動

$ sudo ./wireguard-ui &

バックグラウンドのジョブ確認

$ jobs -l
[1]+ 63800 Running                 sudo ./wireguard-ui &

上記プロセス ID1 をフォアグラウンドで表示

$ fg %1

フォアグラウンドに表示されたプロセスをCtl+cで停止