mybin
という名前のコマンドを登録
sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10
sudo update-alternatives --install /usr/local/bin/mybin mybin /bin/ls 10
シンボリックリンク先となる候補が複数ある場合は選択して有効化
sudo update-alternatives --config mybin
There are 2 choices for the alternative mybin (providing /usr/local/bin/mybin).
Selection Path Priority Status
------------------------------------------------------------
0 /bin/ls 10 auto mode
* 1 /bin/ls 10 manual mode
2 /usr/bin/echo 10 manual mode
削除
sudo update-alternatives --remove-all mybin
lscpu
文字列らしい部分をバイナリファイルから抽出して出力するコマンドです。得体の知れないコマンドのオプションを調べたり
$ strings /usr/bin/gcc | grep ^--
--help
--target-help
--sysroot=
--all-warnings
--ansi
--assemble
--assert
--classpath
--bootclasspath
--CLASSPATH
...
あるいは、こちらのページのtcpダンプの出力結果であるバイナリログファイルを解析したりできます。
$ cat http.cap | strings
<!w@
(!x@
CT5_
GET / HTTP/1.1
User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: www.yahoo.co.jp
Accept: */*
CTSa
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 19 Oct 2014 15:08:09 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
...
$ diff -u <(echo 'test') <(echo 'test2')
--- /dev/fd/63 2014-11-02 16:53:41.872004003 +0900
+++ /dev/fd/62 2014-11-02 16:53:41.874003932 +0900
@@ -1 +1 @@
-test
+test2
xclip -out -selection clipboard > txt
xclip -in -selection clipboard < txt
1.txt
1 A
2 B
3 C
5 E
6 F
2.txt
1 X
3 Z
2 Y
4 S
paste
$ paste 1.txt 2.txt
1 A 1 X
2 B 3 Z
3 C 2 Y
5 E 4 S
6 F
$ paste 1.txt 2.txt -d':'
1 A:1 X
2 B:3 Z
3 C:2 Y
5 E:4 S
6 F:
join
$ join <(sort 1.txt) <(sort 2.txt) -1 1 -2 1 -i -t' ' -o'1.1 1.2 2.1 2.2'
1 A 1 X
2 B 2 Y
3 C 3 Z
$ join <(sort 1.txt) <(sort 2.txt) -1 1 -2 1 -i -t' ' -o'1.1 1.2 2.1 2.2' -a 1 -a 2
1 A 1 X
2 B 2 Y
3 C 3 Z
4 S
5 E
6 F
$ join <(sort 1.txt) <(sort 2.txt) -1 1 -2 1 -i -t' ' -o'1.1 1.2 2.1 2.2' -v 1 -v 2
4 S
5 E
6 F
-1 1
一つ目のファイルの第一列をキー-2 1
二つ目のファイルの第一列をキー-i
キーの大文字小文字を区別しない-t ' '
入力ファイルと出力ファイルの列の区切り文字
-t $'\t'
とするとタブを指定できます。-o'...'
出力する列とその順番 (n.k は第 n ファイルの第 k 列)-a 1 -a 2
一つ目と二つ目のファイルの一致しなかった行も出力-v 1 -v 2
一つ目と二つ目のファイルの一致しなかった行だけを出力$ echo '65,66,67' | perl -M-warnings -lne "print map {chr} split /,/"
ABC
16 進数表記の場合は echo コマンドが便利です。
$ echo -e "\x41\x42\x43"
ABC
$ echo -e '\xE3\x81\x82'
あ
いわゆるルートディレクトリ '/' を任意のディレクトリに変更するコマンドです。動作検証のできていない外部プログラムを実行する際などに使用します。FreeBSD では同様の機能を提供する jail コマンドが有名です。
$ sudo mkdir -p /chroot/a
$ sudo chroot /chroot/a
bash-4.1# pwd
/
bash-4.1# exit
chroot の引数に指定する新しいルートディレクトリには少なくとも /bin/sh およびそれが依存するライブラリが格納されている必要があります。ldd コマンドについてはこちらをご参照ください。
$ ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 Mar 7 2014 /bin/sh -> bash
$ ldd /bin/bash
linux-vdso.so.1 => (0x00007fff07fc2000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fa658494000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa658290000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa657efb000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa6586bb000)
$ sudo mkdir /chroot/a/lib64
$ sudo cp /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 /chroot/a/lib64/
$ sudo mkdir /chroot/a/bin
$ sudo cp /bin/bash /bin/sh /chroot/a/bin/
md5 ではなく md5sum コマンドを使用します。
$ echo 'abc' | md5sum
900150983cd24fb0d6963f7d28e17f72 *-
ほとんどの方には関係ありませんが Emacs の組み込み関数 md5 とは挙動が異なるため注意しましょう。
$ md5 abc
900150983cd24fb0d6963f7d28e17f72
sudo を実行する際に環境変数を引き継ぎたい場合は -E オプションを使用します。
準備
$ export MY_ENV=777
$ cat test.sh
echo $MY_ENV
$ chmod +x test.sh
$ ./test.sh
777
比較
$ sudo ./test.sh
← 何も表示されません
$ sudo -E ./test.sh
777
コマンド env は環境変数を一覧表示する機能だけでなく、実行時の環境変数を一時的に変更する機能も提供します。表示するだけであれば printenv
と同様です。
$ env | grep LANG
LANG=ja_JP.UTF-8
$ env LANG=C date
Thu Feb 12 01:13:10 JST 2015
$ date
2015年 2月 12日 木曜日 01:13:14 JST
DISPLAY
環境変数を指定して SSH 先の GNOME 端末に AA を表示する。関連: wall コマンド
DISPLAY=:0 gnome-terminal -e 'bash -c "cowsay hello; sleep 5"'
「topコマンドの基本的な使い方」で記載した内容と同じです。サーバ稼動時間、ログインユーザ数、過去1,5,15分前までのロードアベレージの平均値が順に表示されます。
$ uptime
16:26:57 up 1:43, 1 user, load average: 0.00, 0.00, 0.00
ネットワークノード情報 (ホスト名, ドメイン名)
$ uname -n
localhost.localdomain
OS名
$ uname -o
GNU/Linux
CPU情報
$ uname -m
i686
OS のリリース番号
$ uname -r
2.6.32-504.3.3.el6.x86_64
(参考) OS の情報は以下のようにしても確認できます
$ cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
左から何番目かを指定して切り出す
$ echo '0,1,2,3,4
5,6,7,8,9' | cut -c1,3-4
実行結果
01,
56,
区切り文字を基準として切り出す
$ echo '0,1,2,3,4
5,6,7,8,9' | cut -d',' -f1,3-4
実行結果
0,2,3
5,7,8
$ sudo passwd -d username
RSA 鍵として妥当性の検証や、鍵長の調査にもなります。
$ ssh-keygen -lf ~/.ssh/id_rsa.pub
$ cat -n sample.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use utf8;
5 use Data::Dumper;
...
sudo yum install ipvsadm
sudo ipvsadm -Ln
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3518
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited ←物理メモリの使用サイズ上限
open files (-n) 1024 ←ファイルディスクリプタ数の上限
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited ←CPU時間の上限
max user processes (-u) 1024 ←プロセス数の上限
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
sudo と異なり、例えば疑似端末 tty がない場合でも問題なく実行できます。rc.local で一般ユーザ権限のプロセスを起動したい場合などに有用です。
$ su -l username -c 'echo $HOME'
Windows のスタートアップのようなものは /etc/rc.local として提供されています。すべての init スクリプトが完了した後に登録された内容が実行されます。AWS EC2 を利用している場合、User Data という似た機能があります。
$ cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
# 何らかのシステム的な処理を一般ユーザで実行
su -l username -c /usr/etc/sample.sh
こちらのページに記載しましたように、kill はオプション無指定で SIGTERM シグナルを送信します。状況によって SIGTERM ではプロセスを殺せないことがあります。そのような場合は SIGKILL を送信することでプロセスを殺せることがあります。
$ kill -s 9 PID
SIGINT (Ctrl-C) で止められない場合、SIGSTOP (Ctrl-z) でバックグラウンドに移してから SIGKILL を発行します。%1
はジョブ番号です。
kill -9 %1
CentOS 6.6 の場合は /usr/bin/xmllint に標準インストールされています。
$ echo '<?xml version="1.0" ?><venture><company><name>ABC</name><url>http://www.abc.co.jp/</url></company><company><name>XYZ</name><url>http://www.xyz.co.jp/</url></company></venture>' | xmllint --format -
<?xml version="1.0"?>
<venture>
<company>
<name>ABC</name>
<url>http://www.abc.co.jp/</url>
</company>
<company>
<name>XYZ</name>
<url>http://www.xyz.co.jp/</url>
</company>
</venture>
-
→ ファイル名を指定せずに標準入力からデータを受け取るCentOS 6.6 の場合は epel からインストール可能です。
$ sudo yum install epel-release
$ sudo yum --enablerepo=epel install jq
使用例 ('.' でルートを指定)
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.'
[
{
"good": true,
"name": "JSON"
},
{
"good": false,
"name": "XML"
}
]
関連ページ『jq チートシート』もご参照ください。また jq が使用できない環境では perl に付属の json_pp
コマンドの存在も確認します。
cat /path/to/xxx.json | json_pp
macOS であれば brew コマンドでインストールできます。
brew install shyaml
以下のように値を取得できます。詳細はこちらをご参照ください。
test.yaml
name: "MyName !!"
subvalue:
how-much: 1.1
things:
- first
- second
- third
コマンド例
cat test.yaml | shyaml keys
cat test.yaml | shyaml get-value name
cat test.yaml | shyaml get-value subvalue.how-much
cat test.yaml | shyaml get-value subvalue.things.0
$ sudo lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 2314 mysql 14u IPv6 9521 0t0 TCP *:mysql (LISTEN)
開いているポートを確認
sudo lsof | grep TCP | grep LISTEN
sudo lsof -P | grep TCP | grep LISTEN ←ポート番号で強制表示
$ openssl s_client -connect www.qoosky.io:443 -showcerts > www.qoosky.io.crt
サーバー証明書 (一部抜粋したもの → server.crt)
0 s:/OU=GT53696254/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=www.qoosky.io
i:/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
-----BEGIN CERTIFICATE-----
MIIEqzCCA5OgAwIBAgIDBhQqMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdSYXBpZFNTTCBTSEEy
NTYgQ0EgLSBHMzAeFw0xNTA4MDIwOTU3NTJaFw0xODEwMDMxMTM0MThaMIGSMRMw
EQYDVQQLEwpHVDUzNjk2MjU0MTEwLwYDVQQLEyhTZWUgd3d3LnJhcGlkc3NsLmNv
bS9yZXNvdXJjZXMvY3BzIChjKTE1MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBW
YWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEXMBUGA1UEAxMOd3d3LnFvb3NreS5uZXQw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbHL0Y+hMAD7PShvRJdQIr
9vFLF5mNEYaZvW+Zc/0FYCkqiWAXyYl76M6ZJlMUbDBSyTFB64BDuezNCKjsd6Uj
6g/PcE4AvJpteVcQiXKtuNRdBxj1brqidarRaGU+Not1twKXuwUffZf5nJVVAa63
EdTKnskAUWBNFwG423ami7lbe2P9fu3iOQDMbdz1yItt4p3p1NMyDoKRlN5IKkMB
jcd05947CTvSCfGD8f/tId4ovkkqTSimz/qGwu+11/65THobr8K26p28UnixYy3W
wys2WsB7rzW7vuztyxHMKyxsHix/uwFbk2VF6EIKh0B1wIJwpY40e0Ey8oF6mBI3
AgMBAAGjggFSMIIBTjAfBgNVHSMEGDAWgBTDnPP800YINLvORn+gfFvz4gjLWTBX
BggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9ndi5zeW1jZC5jb20w
JgYIKwYBBQUHMAKGGmh0dHA6Ly9ndi5zeW1jYi5jb20vZ3YuY3J0MA4GA1UdDwEB
/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwJQYDVR0RBB4w
HIIOd3d3LnFvb3NreS5uZXSCCnFvb3NreS5uZXQwKwYDVR0fBCQwIjAgoB6gHIYa
aHR0cDovL2d2LnN5bWNiLmNvbS9ndi5jcmwwDAYDVR0TAQH/BAIwADBBBgNVHSAE
OjA4MDYGBmeBDAECATAsMCoGCCsGAQUFBwIBFh5odHRwczovL3d3dy5yYXBpZHNz
bC5jb20vbGVnYWwwDQYJKoZIhvcNAQELBQADggEBAC9QJx6LJ7OlEr0qPDbNIH0c
0PRVHBpabScIIAny770OPASRjDDneB278yD4AsAs4MISgIuiMZbzcSfxA65XfxIi
tCKHo/JUp4AlzGas09Q2GrZ4twXMlB4ppoGLhYK0VNHuGTvtquFIOrw/T9we7Qwn
3Fa+uWq/nj+hfEnV85FEwBbbTnecnOnY/rZnmLAmpq1A2yHRlNaNy/Fit0GUK9JA
c/s9FJyV1+AL+xTor4+L7D/mYfj3wpY+JUnYeoz111icrJBAdpC3Tk80WlrwGWg+
vC5UU3b9TdfZoaB2sOs9V+qz1yQADSs6HcEXCeN2Gy7uvcpVsp4Q6rC0pn/VABY=
-----END CERTIFICATE-----
中間証明書 (一部抜粋したもの → intermediate.crt)
1 s:/C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G3
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
MIIEJTCCAw2gAwIBAgIDAjp3MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMTQwODI5MjEzOTMyWhcNMjIwNTIwMjEzOTMyWjBHMQswCQYDVQQG
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXUmFwaWRTU0wg
U0hBMjU2IENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv
VJvZWF0eLFbG1eh/9H0WA//Qi1rkjqfdVC7UBMBdmJyNkA+8EGVf2prWRHzAn7Xp
SowLBkMEu/SW4ib2YQGRZjEiwzQ0Xz8/kS9EX9zHFLYDn4ZLDqP/oIACg8PTH2lS
1p1kD8mD5xvEcKyU58Okaiy9uJ5p2L4KjxZjWmhxgHsw3hUEv8zTvz5IBVV6s9cQ
DAP8m/0Ip4yM26eO8R5j3LMBL3+vV8M8SKeDaCGnL+enP/C1DPz1hNFTvA5yT2AM
QriYrRmIV9cE7Ie/fodOoyH5U/02mEiN1vi7SPIpyGTRzFRIU4uvt2UevykzKdkp
YEj4/5G8V1jlNS67abZZAgMBAAGjggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUw5zz/NNGCDS7zkZ/oHxb8+IIy1kwEgYD
VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCig
JoYkaHR0cDovL2cuc3ltY2IuY29tL2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUF
BwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARF
MEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3Ry
dXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqGSIb3DQEBCwUAA4IBAQCjWB7GQzKs
rC+TeLfqrlRARy1+eI1Q9vhmrNZPc9ZE768LzFvB9E+aj0l+YK/CJ8cW8fuTgZCp
fO9vfm5FlBaEvexJ8cQO9K8EWYOHDyw7l8NaEpt7BDV7o5UzCHuTcSJCs6nZb0+B
kvwHtnm8hEqddwnxxYny8LScVKoSew26T++TGezvfU5ho452nFnPjJSxhJf3GrkH
uLLGTxN5279PURt/aQ1RKsHWFf83UTRlUfQevjhq7A6rvz17OQV79PP7GqHQyH5O
ZI3NjGFVkP46yl0lD/gdo0p0Vk8aVUBwdSWmMy66S6VdU5oNMOGNX2Esr8zvsJmh
gP8L8mJMcCaY
-----END CERTIFICATE-----
それぞれの署名アルゴリズムの確認などを個別に行えます。
$ openssl x509 -text -in server.crt | egrep '(Signature Algorithm|Subject|Issuer):'
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA - G3
Subject: OU=GT53696254, OU=See www.rapidssl.com/resources/cps (c)15, OU=Domain Control Validated - RapidSSL(R), CN=www.qoosky.io
$ openssl x509 -text -in intermediate.crt | egrep '(Signature Algorithm|Subject|Issuer):'
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
Subject: C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA - G3
証明書チェーンは以下のようになっていることが分かりました。
www.qoosky.io ← RapidSSL SHA256 CA - G3 ← GeoTrust Global CA
$ tree .
.
└── mydir
└── myfile
$ ls -R
.:
mydir
./mydir:
myfile
vim file.txt
でエディタを起動してから
:set paste
を設定します。
:set mouse=v
view file.txt
vim -R file.txt
nc (netcat) コマンドは TCP/UDP 通信の万能コマンドです。
nmap のようにポートスキャンが行えます。
-z
スキャンするだけで実際にデータを送信しない-w
タイムアウト時間を設定-v
詳細な情報を出力する-u
UDP 通信を行うTCP 80
$ nc -z -w 5 -v www.example.com 80
TCP 80-81
$ nc -z -w 5 -v www.example.com 80-81
UDP 68 (少なくともパケットが到達したら succeed となります。UDP は後述のサーバークライアントで疎通確認するとよいです)
$ nc -u -z -w 5 -v scanme.nmap.org 68
$ nc -u -z -w 5 -v dummy.example.com 68
コネクションが確立したら、どちらかのターミナルで 'test' などと打ち込みます。別のターミナルにそのまま出力されます。前述の通り、UDP の疎通確認に有用です。
-l
指定したポートをリッスンします-u
UDP で通信しますサーバー
$ nc -l 1234
$ nc -l -p 1234 ← Debian 等の場合は `-p` が必要です。
クライアント
$ nc 127.0.0.1 1234
stats
をパイプで実行$ echo 'stats' | nc 127.0.0.1 11211
socat を利用すると仮想シリアルポートを作成して TCP で二つのホストで共有できます。こちらのページに記載したキャラクタデバイス pts の作成です。
sudo apt install socat
サーバ側
socat pty,link=/tmp/mycom1,rawer tcp-listen:12345
クライアント側
socat pty,link=/tmp/mycom2,rawer tcp:127.0.0.1:12345
動作検証
cat < /tmp/mycom1
echo 'hi' > /tmp/mycom2
キャラクタデバイスであれば上記方法で双方向にシリアル通信できます。デバイスファイルの種類がブロックデバイスである場合は同様に socat を利用して以下のようにできます。ただし、双方向ではなく片方向の通信になります。
dd if=/dev/zero of=/dev/shm/myport bs=16K count=1 # shm; shared memory
socat -U TCP-LISTEN:12345,reuseaddr,fork OPEN:/dev/shm/myport
読み出す側
sudo /tmp/socat.bash &
/tmp/socat.bash
#!/bin/bash
while true; do socat -u TCP:127.0.0.1:12345 STDIO > /dev/myport; sleep 1; done &
tail -f /dev/null
tr で改行を操作した後に、他のコマンドの引数として使用すると便利です。
コマンド $(サブコマンド)
置換
$ echo $(echo -en '1\n2\n3' | tr '\n' ',')
1,2,3
削除
$ echo $(echo -en '1\n2\n3' | tr -d '\n')
123
置換してから sed で加工して足し算
$ expr $(echo -e '1\n2\n3' | tr '\n' ',' | sed 's/,$//' | sed 's/,/ + /g')
6
nice 値の既定は 0 です。nice 値が小さいプロセスほど CPU 時間を優先して割り当てられます。一般ユーザーは 0-19 の値を指定できます。root ユーザーは -20-19 の値を指定できます。nice 値 NI
は ps の 'l' オプションまたは top コマンドで確認できます。PRI または PR は 20 + NI となっています。nice 値を変更したユーザープロセスによって使用された CPU 時間の割合は sar -u の %nice
項目で確認できます。nice 値が上げられたプロセスは CPU 時間を割り当てられにくくなっているため TIME 項目の増加速度はゆるやかになります。
$ sleep 10 &
[1] 7166
$ ps lp 7166
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 500 7166 7151 20 0 100908 616 hrtime S pts/0 0:00 sleep 10
nice コマンドで実行
$ nice -n 19 sleep 10 &
[1] 7175
$ ps lp 7175
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 500 7175 7151 39 19 100908 612 hrtime SN pts/0 0:00 sleep 10
nice コマンドで実行 (root)
$ sudo su -l
# nice -n -20 sleep 10 &
[1] 7198
# ps lp 7198
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 7198 7185 0 -20 100908 612 hrtime S< pts/0 0:00 sleep 10
実行中のプロセスの nice 値を renice コマンドで変更
$ sleep 100 &
[1] 7252
$ ps lp 7252
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 500 7252 7234 20 0 100908 616 hrtime S pts/0 0:00 sleep 100
$ renice 19 -p 7252
7252: 古い優先度は 0、新たな優先度は 19 です
$ ps lp 7252
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 500 7252 7234 39 19 100908 616 hrtime SN pts/0 0:00 sleep 100
マルチスレッドのプロセスについては PID 指定で nice 値を変更しても、ps axml で確認するとメインスレッド以外のスレッドの nice 値は変化していないことが分かります。その場合は -g
オプションを利用して PGID 指定で renice します。PGID は ps axjf で確認できます。
$ renice 19 -g `マルチスレッドのプロセスのPGID`