【Linux】【コマンド】コマンドメモ

使用頻度が低めで忘れやすいコマンドの覚書。

base64

base64デコードを行い、PEM ファイルを DER ファイルに変換する。

awk /^[^-]/{ print } google.com.crt | base64 -d > google.com.der

 

ctags

./src 以下の所定のファイルを対象にして Vim のタグファイルを作成する

% find src/ -type f -name "*.c" -o -name "*.cpp" -o -name "*.h" | xargs etags -a

 

cpio

カレントディレクトリ直下のファイルとディレクトリをアーカイブファイルにする。

% ls -1 | cpio -o > current.cpio

cpioアーカイブを展開をする。このとき必要に応じてディレクトリ作成をする。

% cpio -id < current.cpio

 

cut

csv形式のファイルから、第1、第3、第4フィールドを抽出する

% cut -d',' -f1,2,4 input.txt
NAME(0), 0,   999
NAME(1), 1,  9999
NAME(2), 2, 99999
NAME(3), 3,     9
NAME(4), 4,    99
NAME(5), 5, 99999

 

dd

a.exe の先頭から128バイト離れた位置から64バイトを1バイトずつ a.exe.part に書き出す

% dd if=a.exe of=a.exe.part bs=1 skip=128 count=128


/proc/self/mem の先頭から1024バイト離れた位置から4096バイトを1バイトずつ vdso に書き出す

% dd if=/proc/self/mem of=vdso bs=1 skip=1024 count=4096


/dev/sda3 のファイルシステムを /dev/sdb1 にコピーする (パーティションのコピー)

% dd if=/dev/sda3  of=/dev/sdb1

 

ddrescue

dd によるディスクコピーは、破損ブロックがあるとコピーに失敗するので、ddrescueというソフトを使う方が良いらしい。
 

dpkg

インストール済の debパッケージから pstree を検索(S)する。

# dpkg -S pstree
psmisc: /usr/share/man/man1/pstree.x11.1.gz
psmisc: /usr/share/pixmaps/pstree32.xpm
psmisc: /usr/bin/pstree.x11
psmisc: /usr/share/pixmaps/pstree16.xpm
psmisc: /usr/share/man/man1/pstree.1.gz
psmisc: /usr/bin/pstree

psmiscパッケージの状態(s)を表示する。

# dpkg -s psmisc
Package: psmisc
Status: install ok installed
Priority: optional
Section: admin
Installed-Size: 208
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Version: 22.13-1
Replaces: procps (<< 1:1.2)
Depends: libc6 (>= 2.8), libncurses5 (>= 5.7+20100313)
Description: utilities that use the proc file system
 This package contains miscellaneous utilities that use the proc FS:
 .
  - fuser: identifies processes that are using files or sockets.
  - killall: kills processes by name (e.g. "killall -HUP named").
  - peekfd: shows the data traveling over a file descriptor.
  - pstree: shows currently running processes as a tree.
  - prtstat: print the contents of /proc/<pid>/stat
Original-Maintainer: Craig Small <csmall@debian.org>
Homepage: http://psmisc.sf.net/

 

etags

./src 以下の所定のファイルを対象にして Emacs のタグファイルを作成する

% find src/ -type f -name "*.c" -o -name "*.cpp" -o -name "*.h" | xargs etags -a

 

find

    <----- +n -----> <----- -n ----->
    +---------------+---------------|
    過去          n日前            今日

 -atime  +n(-n)        n日以前(以降)にアクセスされたファイルを探す                   
 -mtime  +n(-n)        n日以前(以降)にファイルの中身が更新されたファイルを探す       
 -ctime  +n(-n)        n日以前(以降)にファイルの中身・属性が更新されたファイルを探す 
 -newer  [file name]   指定したファイルの日付よりも新しい場合に真                    
 -fprint [file name]   指定したファイルに検索結果が書き出される                      
 -exec [cmd] {} \;    「{}」はfindが発見したファイル名                               
                     「\」「;」はコマンドの終了を示す記号                           
 -exec [cmd] {} +     「{}」はfindが発見したファイル名のグループに置き換えられる     
 -print0               改行文字を含んだファイル名を正しく処理出来る                  

 

iconv

実行例:
% iconv -f EUC-JP -t Shift_JIS input.txt

入力/出力フォーマットの仕様:
    -f, --from-code=名前     元のテキストのエンコーディング
    -t, --to-code=名前       出力時のエンコーディング

情報:
    -l, --list                 既知の全キャラクタセットを表示

出力制御:
    -c                         出力から不正な文字を抜かす
    -o, --output=FILE          出力ファイル
    -s, --silent               警告の抑制
    --verbose                  経過情報の表示
    
    -?, --help                 このヘルプの表示
    --usage                    短い使用方法の表示
    -V, --version              プログラムのバージョンを表示する

環境によっては EUC-JP ではなく eucjp などとする場合もあるようなので,-l オプションで確認すること

 

ifconfig

書式
ifconfig [interface]
ifconfig interface [aftype] options | address ...

 

ネットワークデバイスの動作状況を表示する
% ifconfig enp2s0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.72  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::aba:aaaa:aaaa:aaaa  prefixlen 64  scopeid 0x20<link>
        ether b8:ac:6f:aa:aa:aa  txqueuelen 1000  (イーサネット)
        RX packets 17261  bytes 6529617 (6.5 MB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 15783  bytes 3003618 (3.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18

ip コマンドでは以下である

  • ip link show

 

ネットワークを停止する

enp2s0 を停止して、状態表示する

% ifconfig enp2s0 down

% ifconfig enp2s0
enp2s0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether b8:ac:6f:aa:bb:cc  txqueuelen 1000  (イーサネット)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18

ip コマンドでは以下である

  • ip link set enp2s0 down

 

ネットワークを起動して、状態表示する

enp2s0 を起動して、状態表示する

# ifconfig enp2s0 up

% ifconfig enp2s0
enp2s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:ac:6f:aa:aa:aa  txqueuelen 1000  (イーサネット)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18

ip コマンドでは以下である

  • ip link set enp2s0 up

 

IPアドレスを変更する

enp2s0 にIPアドレス 192.168.1.1 (ホスト部:8ビット)を設定する場合

# ifconfig enp2s0 192.168.1.1 netmask 255.255.255.0

enp2s0 に別名 enp2s0:0 を付与して IPアドレス 192.168.1.1 (ホスト部:8ビット)を追加する場合

# ifconfig enp2s0:0 192.168.1.1 netmask 255.255.255.0

# ifconfig 
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.72  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::aba:aaaa:aaaa:aaaa  prefixlen 64  scopeid 0x20<link>
        ether b8:ac:6f:aa:bb:cc  txqueuelen 1000  (イーサネット)
        RX packets 3956  bytes 3156896 (3.1 MB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 2728  bytes 404109 (404.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18  

enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        ether b8:ac:6f:aa:bb:cc  txqueuelen 1000  (イーサネット)
        device interrupt 18  

(-- snip --)

ipコマンドでは以下である

  • ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev enp2s0 label enp2s0:0

 

IPアドレスを解放する

enp2s0 の IPアドレス 192.168.1.1 (ホスト部:8ビット)を解放する場合

# ifconfig enp2s0 del 192.168.1.1

 
enp2s0:0 の IPアドレス 192.168.1.1 (ホスト部:8ビット)を解放する場合

# ifconfig enp2s0:0 del 192.168.1.2

 

ip

書式
ip [ OPTIONS ] OBJECT { COMMAND | help }

 

[show] データリンク層(ネットワークデバイス)の動作状況を表示する

  • 全ネットワークデバイスの動作状況を表示する。
% ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether b8:ac:6f:aa:bb:cc brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:d4:7e:ec brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:d4:7e:ec brd ff:ff:ff:ff:ff:ff

[set] enp2s0 を停止して、状態表示する

# ip link set enp2s0 down
# ip link show enp2s0
2: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether b8:ac:6f:aa:bb:cc brd ff:ff:ff:ff:ff:ff

[set] enp2s0 を起動して、状態表示する

# ip link set enp2s0 up
# ip link show enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether b8:ac:6f:aa:bb:cc brd ff:ff:ff:ff:ff:ff

 

addr (address)

[addr show] IP層(IPアドレス)の状況を表示する

# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether b8:ac:6f:aa:bb:cc brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.72/24 brd 192.168.10.255 scope global dynamic enp2s0
       valid_lft 600973sec preferred_lft 600973sec
    inet6 fe80::aba:97e8:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:d4:7e:ec brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:d4:7e:ec brd ff:ff:ff:ff:ff:ff

[addr add dev ] IP層(IPアドレス) を追加する
enp2s0 にIPアドレス 192.168.1.1 (ホスト部:8ビット)を追加する場合

# ip addr add 192.168.1.1/24 dev enp2s0 label enp2s0:0

enp2s0 に別名 enp2s0:0 を付与して IPアドレス 192.168.1.1 (ホスト部:8ビット)を追加する場合

# ip addr add 192.168.1.1/24 dev enp2s0

enp2s0 に別名 enp2s0:0 を付与して IPアドレス 192.168.1.1 (ホスト部:8ビットをマスク) を追加する場合

# ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev enp2s0 label enp2s0:0

[del] IP層(IPアドレス) を解放する
[addr del dev ] enp2s0 の別名 enp2s0:0 に付与したIPアドレス 192.168.1.2/24 を解放する

% sudo ip addr del 192.168.1.2/24 dev enp2s0

[addr del dev ] enp2s0 の別名 enp2s0:0 に付与したIPアドレス 192.168.1.2/24 を解放する

% sudo ip addr del 192.168.1.2/24 dev enp2s0 label enp2s0:0

 

[neighbour] ARPキャッシュの管理

[neigh show]

% ip neigh show
192.168.10.231 dev enp2s0 lladdr 00:1a:eb:34:5d:de DELAY

[neigh list]

% ip neigh list
192.168.10.231 dev enp2s0 lladdr 00:1a:eb:34:5d:de DELAY
% ip n list
192.168.10.231 dev enp2s0 lladdr 00:1a:eb:34:5d:de DELAY

 

iwconfig

無線LANの設定をする。実践例はこちら
実行例:NIC 「wlx3476c58ecc37」を、SSID 「aterm-bd4318-g」に接続する。このときの WEP パスワードを「1234567890abcd」とする。

% iwconfig wlx3476c58ecc37 essid aterm-bd4318-g key s:1234567890abcd

 

iwlist

無線LANの接続状態を表示するコマンド。LANの設定は出来ない。実践例はこちら

% iwlist wlx3476c58ecc37 scan

 

journalctl

  -k     dmesg (カーネルメッセージ)と同じ内容を表示する
  -u     指定したユニットのみ表示する (「*」によるパターンマッチが可能)
  -x     詳細情報を付与して表示する
  -e     直近のログを表示する
  -r      tail -f と同じでログを垂れ流す
  • -k の使用例
    • カーネルメッセージ=dmesg の情報を表示する
% journalctl  -k 
-- Logs begin at Sat 2017-11-25 10:10:35 JST, end at Sat 2017-11-25 14:36:36 JST. --
1125 10:10:35 PC-Vostro-230 kernel: microcode: microcode updated early to revision 0xa0b, date = 2010-09-28
1125 10:10:35 PC-Vostro-230 kernel: Linux version 4.10.0-38-generic (buildd@lgw01-amd64-032) (gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2) ) #42-Ubuntu SMP Tue Oct 10 13:24:27 UTC 2017 (Ubuntu 4.10.0-38.42-generic 4.10.17)
1125 10:10:35 PC-Vostro-230 kernel: Command line: BOOT_IMAGE=/vmlinuz-4.10.0-38-generic root=/dev/mapper/ubuntu--vg-root ro quiet splash vt.handoff=7
1125 10:10:35 PC-Vostro-230 kernel: KERNEL supported cpus:
1125 10:10:35 PC-Vostro-230 kernel:   Intel GenuineIntel
1125 10:10:35 PC-Vostro-230 kernel:   AMD AuthenticAMD
1125 10:10:35 PC-Vostro-230 kernel:   Centaur CentaurHauls
1125 10:10:35 PC-Vostro-230 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
1125 10:10:35 PC-Vostro-230 kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
  • -e の使用例
    • -k の直近の情報を表示する
% journalctl -k -e 
1125 10:11:00 PC-Vostro-230 kernel: tg3 0000:02:00.0 enp2s0: Link is down
1125 10:11:04 PC-Vostro-230 kernel: kauditd_printk_skb: 29 callbacks suppressed
1125 10:11:04 PC-Vostro-230 kernel: audit: type=1400 audit(1511572264.305:41): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/1091/status" pid=1091 comm="mysqld
11月 25 10:11:04 PC-Vostro-230 kernel: audit: type=1400 audit(1511572264.305:42): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=1091 comm
11月 25 10:11:04 PC-Vostro-230 kernel: audit: type=1400 audit(1511572264.305:43): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/1091/status" pid=1091 comm="mysqld
1125 10:11:04 PC-Vostro-230 kernel: tg3 0000:02:00.0 enp2s0: Link is up at 1000 Mbps, full duplex
1125 10:11:04 PC-Vostro-230 kernel: tg3 0000:02:00.0 enp2s0: Flow control is on for TX and on for RX
1125 10:11:04 PC-Vostro-230 kernel: IPv6: ADDRCONF(NETDEV_CHANGE): enp2s0: link becomes ready
1125 10:11:32 PC-Vostro-230 kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
1125 10:11:32 PC-Vostro-230 kernel: Ebtables v2.0 registered
1125 10:11:35 PC-Vostro-230 kernel: bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
1125 10:11:36 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered blocking state
1125 10:11:36 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered disabled state
1125 10:11:36 PC-Vostro-230 kernel: device virbr0-nic entered promiscuous mode
1125 10:11:37 PC-Vostro-230 kernel: nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
1125 10:11:39 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered blocking state
1125 10:11:39 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered listening state
1125 10:11:41 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered learning state
1125 10:11:43 PC-Vostro-230 kernel: virbr0: port 1(virbr0-nic) entered disabled state
1125 10:23:29 PC-Vostro-230 kernel: perf: interrupt took too long (2506 > 2500), lowering kernel.perf_event_max_sample_rate to 79750
1125 10:26:52 PC-Vostro-230 kernel: perf: interrupt took too long (3139 > 3132), lowering kernel.perf_event_max_sample_rate to 63500
1125 10:39:27 PC-Vostro-230 kernel: perf: interrupt took too long (3930 > 3923), lowering kernel.perf_event_max_sample_rate to 50750
1125 13:07:54 PC-Vostro-230 kernel: [drm:intel_cpu_fifo_underrun_irq_handler [i915]] *ERROR* CPU pipe A FIFO underrun
  • -u の使用例
    • apache2 のログを表示する
% journalctl -u apache2
-- Logs begin at Sat 2017-11-25 10:10:35 JST, end at Sat 2017-11-25 14:37:52 JST. --
1125 10:10:57 PC-Vostro-230 systemd[1]: Starting The Apache HTTP Server...
1125 10:11:04 PC-Vostro-230 apachectl[992]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
11月 25 10:11:09 PC-Vostro-230 systemd[1]: Started The Apache HTTP Server.
11月 25 10:15:59 PC-Vostro-230 systemd[1]: Reloading The Apache HTTP Server.
11月 25 10:15:59 PC-Vostro-230 apachectl[5145]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
1125 10:15:59 PC-Vostro-230 systemd[1]: Reloaded The Apache HTTP Server.
  • -x の使用例
    • -u apache2 の詳細情報を表示する
% journalctl -x -u apache2 
-- Logs begin at Sat 2017-11-25 10:10:35 JST, end at Sat 2017-11-25 14:40:24 JST. --
1125 10:10:57 PC-Vostro-230 systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit apache2.service has begun start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit apache2.service has begun starting up.
1125 10:11:04 PC-Vostro-230 apachectl[992]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
11月 25 10:11:09 PC-Vostro-230 systemd[1]: Started The Apache HTTP Server.
-- Subject: Unit apache2.service has finished start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit apache2.service has finished starting up.
-- 
-- The start-up result is done.
11月 25 10:15:59 PC-Vostro-230 systemd[1]: Reloading The Apache HTTP Server.
-- Subject: Unit apache2.service has begun reloading its configuration
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit apache2.service has begun reloading its configuration
11月 25 10:15:59 PC-Vostro-230 apachectl[5145]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
1125 10:15:59 PC-Vostro-230 systemd[1]: Reloaded The Apache HTTP Server.
-- Subject: Unit apache2.service has finished reloading its configuration
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit apache2.service has finished reloading its configuration
-- 
-- The result is done.

 

lftp

大半は ftp と同じだが、一部異なる

下記のようにして FTP サーバ (ftp.example.com) にログインする

% lftp ftp.example.com -u ユーザ名

サーバ上のカレントフォルダ以下にあるファイルを再帰的にローカルマシンへコピーする (フォルダはコピー不可)

FTPサーバ_% mirror

ローカルマシンの /home/work 以下のファイルを再帰的に FTP サーバへコピーする (フォルダはコピー不可)

FTPサーバ_% lcd  /home/work
FTPサーバ_% mirror -R

フォルダの作成および削除

FTPサーバ_% mkdir A
FTPサーバ_% rmdir A

 

lsof

ファイルからプロセスを特定する

% lsof -f -- /dev/shm/pulse-shm-1775166878

ファイルシステム単位でプロセスを特定する

% lsof +f -- /dev/shm

プロセスIDからプロセス名を特定する

% lsof -p 12979

 

mknod

root またはシステム・グループ・メンバーのみが実行
mknod Name { b | c } Major Minor

FIFO (名前付きパイプライン) を作成
mknod Name { p }

/dev/loop0 としてスペシャル・ファイル用のディレクトリー・エントリーとそれに対応する i ノードを作成する。

# ls -ltr /dev/ |grep loop
brw-rw----  1 root disk      7,   6 2017-08-10 14:19 loop6
brw-rw----  1 root disk      7,   1 2017-08-10 14:19 loop1
brw-rw----  1 root disk      7,   2 2017-08-10 14:19 loop2
brw-rw----  1 root disk      7,   3 2017-08-10 14:19 loop3
brw-rw----  1 root disk      7,   7 2017-08-10 14:19 loop7
brw-rw----  1 root disk      7,   5 2017-08-10 14:19 loop5
brw-rw----  1 root disk      7,   4 2017-08-10 14:19 loop4
# mknod /dev/loop0 b 7 0
# chmod 660 /dev/loop0
# ls -ltr /dev/ |grep loop
brw-rw----  1 root disk      7,   6 2017-08-10 14:19 loop6
brw-rw----  1 root disk      7,   1 2017-08-10 14:19 loop1
brw-rw----  1 root disk      7,   2 2017-08-10 14:19 loop2
brw-rw----  1 root disk      7,   3 2017-08-10 14:19 loop3
brw-rw----  1 root disk      7,   7 2017-08-10 14:19 loop7
brw-rw----  1 root disk      7,   5 2017-08-10 14:19 loop5
brw-rw----  1 root disk      7,   4 2017-08-10 14:19 loop4
brw-rw-r--  1 root root      7,   0 2017-08-20 03:22 loop0

 

nkf

オプション
 -j           : JISコード(ISO-2022-JP)を出力
 -e           : EUCコードを出力
 -s           : Shift-JISコードを出力
 -w           : UTF-8コードを出力(BOM無し)
 -Lu          : unix改行形式(LF)に変換
 -Lw          : windows改行形式(CRLF)に変換
 -Lm          : macintosh改行形式(CR)に変換
 -g(--guess)  : 自動判別の結果を表示
 --overwrite  : 引数のファイルに直接上書き
 --version    : バージョン情報を表示(インストール済チェック)

文字コードチェック

% nkf -g example.csv

文字コード変換(UTF-8)

% nkf -w --overwrite example.csv

変換されているかチェック

% nkf -g example.csv

文字コード変換(JISコード/ISO-2022-JP)

% nkf -j --overwrite example.csv

文字コード変換(EUC-JP)

% nkf -e --overwrite example.csv

文字コード変換(Shift-JIS)

% nkf -s --overwrite example.csv

文字コード変換(UTF-8)

% nkf -w --overwrite example.csv

ディレクトリ内txtファイル全てを、文字コード→UTF-8、改行→unix形式(LF)に変換

% nkf -w Lu --overwrite *.txt

ディレクトリ内txtファイル全てを、文字コード→Shift_JIS、改行→windows形式(CRLF)に変換

% nkf -s Lw --overwrite *.txt

 

nm

巨大な関数やデータがどれかを調べる

% nm --size-sort -r -S a.out


出力フォーマットを指定する。見易くなる!

% nm -f sysv a.out

grep で検索出来るよう各行の先頭にオブジェクトファイル名を表示させる(-A)

% nm -A *.o | grep hogehoge
% nm -A /usr/lib/libc.a | grep hogehoge

ダイナミックリンク情報は -D を使うと表示可能

% nm -D a.out
% nm -D /usr/lib/libqdbm.so.11.5.0

デマングルする

% nm --demangle a.out

 

od

16進数表記で1バイトずつ(x1)表示する。オフセットは16進数表記(-Ax)

% od -t x1 -Ax $target | head -n 5

さらに ASCII 文字表示も加える(-t に z を付加)

% od -t x1z -Ax $target | head -n 5

オプション -v でダンプを省略しない(デフォルトでは同一行が続く場合,省略する)

% od -tx1 -Ax -v $target | sed -n '45,49p'

オプション --strings で文字列のダンプ機能(stringsコマンドを使う方が良い)

% od -Ax --strings $target | head -n 10

特定の位置(例:0x34バイト目)から表示

% od -t x1z -j 0x0034 $target | head -n1

 

objdump

オブジェクトファイルの情報を表示する。
objdump は x86 のような LSB環境(最下位バイト)においても MSB環境(最上位バイト)のように表示される

全表示させる(-s/--full-contents)

% objdump -s a.out

ELFバイナリの特定セクションのみダンプする(-s -j)

% objdump -s -j .interp a.out

どのようなセクションがあるか表示する(-h)

% objdump -h a.out

アドレス範囲を指定してダンプする(--start-address/--stop-address)

% objdump -s --start-address=0x08000000 --stop-address=0x08ffffff a.out

単なるバイナリとして表示する(odと同じ)
(binaryフォーマットは自動認識されないので必ず指定する)

% objdump -s -b binary a.out

利用可能なフォーマットを表示する(-i)

% objdump -i a.out

テキスト領域のみ逆アセンブルする(-d/--disassemble)

% objdump -d a.out

アドレスをシンボルからのオフセットで表示する(--prefix-address)

% objdump -d --prefix-address a.out
% objdump -d --prefix-address --show-raw-insn a.out  #コードのバイト列表示

全領域を逆アセンブルする(-D/--disassemble-all)。通常はテキスト領域のみが対象である。

% objdump -D a.out

セクションとアドレス範囲を指定して,逆アセンブルする

% objdump -d -j .init a.out     # .initセクションを対象としている

ソースファイルとの対応を表示する(-l/--line-numbers)

% objdump -d -l a.out

ソースファイルとの対応 + ソースコードを挿入してくれる(-S/--source)

% objdump -d -S a.out

さらに値を16進数表示する (--show-raw-insn)

% objdump --show-raw-insn -d -S a.out

 

pax

tar と cpioをサポートしたコマンド。初期RAMディスクの展開]に使うことがある。

% cp /boot/initrd.img-2.6.38-8-generic  initrd.img
% pax -rzf initrd.img

 

pgrep

オプション「fla」を付けて検索していればOKか。

% pgrep -fla apache
1105 /usr/sbin/apache2 -k start
1106 /usr/sbin/apache2 -k start
1107 /usr/sbin/apache2 -k start

% pgrep -fln apache
1107 apache2

 

sort

区切り文字を ',' として第3フィールドを基準にソート(数値降順)する

% cat input.txt
NAME(0), 0, 15,   999
NAME(1), 1, 14,  9999
NAME(2), 2, 13, 99999
NAME(3), 3, 12,     9
NAME(4), 4, 11,    99
NAME(5), 5, 10, 99999

% sort -n -r -t',' -k 3 input.txt 
NAME(5), 5, 10, 99999
NAME(4), 4, 11,    99
NAME(3), 3, 12,     9
NAME(2), 2, 13, 99999
NAME(1), 1, 14,  9999
NAME(0), 0, 15,   999

 

systemctl

 

tr

CRLF (CR+LF, \r+\n, 015+012) から CR を取り除く。CR は Windows の改行コード。

% tr -d '\015' < input.txt

 

uuidgen

絶対に重複しない ID である「UUID」(universally unique identifier)を作成する。
オプションとしては、r、t の2つがある。r:random-based UUID, t:time-based UUID

% uuidgen
90b04070-def3-44d0-a41b-e419c7557d74

% uuidgen -r
87f53180-79ae-40f8-8ec0-2409d256db15

% uuidgen -t
91c300a2-851c-11e7-820f-000c29ea8a7a

 

visudo

nekoアカウントの場合。sudo visudo を実行して「neko ALL=NOPASSWD: ALL」の一行を追加し、保存する。

% sudo visudo 

 

whatis

whatis はシステムのコマンドに関する説明とキーワードを含んだデータベースの集合を検索し、結果を標準出力に表示する。完全にマッチした単語のみが表示される。
whatis データベースは mandbコマンド もしくは /usr/sbin/makewhatis コマンドを使用して作成する。

% whatis open


whatisデータベースが無ければ、次のようにエラーメッセージが表示される。

% whatis open
open (1)        - start a program on a new virtual terminal (VT).
open (2)        - open and possibly create a file or device


上記 (2) の open を知りたい場合は、次のように man コマンドを指定する。

% man 2 open


なお、man で検索出来ない場合は mandb コマンドを使って whatis データベースを作る。

% whatis open
open: 適切なものはありませんでした

% mandb
mandb: 警告: $MANPATH が設定されています。/etc/man_db.conf の設定に追加します
/usr/share/man 配下のマニュアルページを処理しています...
パス `/usr/share/man/man1' の index キャッシュを更新しています。お待ちください....
以下略


システムによっては mandb が無く、makewhatis コマンドが存在する場合もある。(オプションを指定するなら別途調べる)

% makewhatis



マニュアル名が分かったら、man コマンドで開く。

% man 2 open

 

xsel, xclip

% cat .emacs | xsel 
% cat .emacs | xclip -i

 

xev

xev コマンドを実行した後にキーを押下すると、ボタン情報を表示してくれる。
以下、左Alt を押下した場合。キーを押し続けた状態である

KeyPress event, serial 34, synthetic NO, window 0x2e00001,
    root 0x2ac, subw 0x0, time 6270637, (253,253), root:(377,364),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

 
以下、左Alt キー押下を止めた場合。

KeyRelease event, serial 37, synthetic NO, window 0x2e00001,
    root 0x2ac, subw 0x0, time 6277717, (253,253), root:(377,364),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False


 

xxd

オプション一覧

    -p      ... ASCII表示なし
    -b      ... 2進数で表示する
    -c [n]  ... nバイト表示するたびに改行を入れる
    -r      ... ダンプファイルをバイナリに戻す
    -s [n]  ... 先頭から nバイト目から表示する
    -l [n]  ... 先頭から nバイト目まで表示する
    -i      ... C言語の配列に変換してくれる

先頭2バイト目から4バイト目まで表示する

% xxd -s 2 -l 4 a.exe

a.jpg をC言語の配列に変換する

% xxd -s 2 -i a.jpg

a.exe をテキストデータに変換する。その後、再度バイナリに戻す

% xxd     a.exe > a.TXT
% xxd -r  a.TXT > b.exe