プログラミングもできるようになって、GUIだけじゃなくてCUIの意味がわかるようになった人。
もう初心者卒業なのかもな人。もう少しステップアップしたい中級者プログラマー。いやいやプログラミングとかどうでもいいからさくっとコマンドで処理したいだけな人。
はたまたまったくの初心者。
いろんなコマンド好きに向けて、コマンド入門記事を作成中です。
ほぼ毎日更新で、分かりやすい記事に仕上げていくつもりです。
使用するDistributionは、Debianです。
Contents
- 1.Linuxコマンド 入門
- 2.ディレクトリ、ファイルの役割
- 3.ファイル・ディレクトリ関連コマンド
- 4.ファイルの検査コマンド
- 5.テキスト整形コマンド
- 6.検索コマンド
- 7.比較・ソートコマンド
- 8.その他のコマンド
- 9.ファイル・アーカイブ
- 10.システム管理コマンド
- uname システム情報表示
- whoami 実効ユーザ名
- ps プロセス一覧
- kill プロセス終了
- killall プロセス名を指定して終了
- top プロセス表示
- vmstat 仮想メモリ統計
- strip シンボル削除
- df ディスク使用量
- du ディスク使用量推定
- mount マウント
- useradd ユーザ追加
- usermod ユーザアカウント変更
- userdel ユーザ削除
- id uid/gid表示
- groupadd グループ追加
- groupmod グループ変更
- groupdel グループ削除
- ping ICMP ECHOリクエスト
- traceroute ホストまでのルートパケットトレース
- ip ネットワーク関連コマンド
- rsync リモートファイルコピー
- 11. マニュアル
1.Linuxコマンド 入門
端末エミュレータ、ウィンドウ
xterm
uxterm
Shell(シェル)
sh
bash
csh
zsh
ターミナル操作
(C-a/e/f/b)カーソル移動
Ctrl + a カーソルが行頭に移動します。
Ctrl + b カーソルが1文字左に移動します。
Ctrl + f カーソルが1文字右に移動します。
Ctrl + e カーソルが行末に移動します。
(C-n/p) コマンド履歴呼び出し
Ctrl + p コマンド履歴を上に移動します。
Ctrl + n コマンド履歴の下に移動します。
(C-h/u) 文字削除
Ctrl + h カーソルの文字を1文字削除します。
Ctrl + u カーソルから行頭まで削除します。
(C-l) 画面をクリア
Ctrl + lキーで、ターミナル画面をクリアします。
clearコマンドでも同様です。
Bash変数
$PS1 プライマリープロンプト
takk~$ PS1='AAA $ ' AAA $ echo $PS1 AAA $ AAA $
$PS2 セカンドプロンプト
takk~$ echo $PS2 > takk~$ echo " > HELLO > " HELLO takk~$ PS2='>>>>>' takk~$ echo " >>>>>HELLO >>>>>" HELLO takk~$
!^ 直前コマンドの最初の引数
takk~$ echo !^ echo 10 10 takk~$
!$ 直前コマンドの最後の引数
takk~$ echo 10 20 30 10 20 30 takk~$ echo !$ echo 30 30 takk~$
!:N 直前コマンドのN番目の引数
takk~$ echo !:2 echo 20 20 takk~$
!* 直前コマンドのすべての引数
takk~$ echo 10 20 30 10 20 30 takk~$ echo !* echo 10 20 30 10 20 30 takk~$
$$ 実行中プロセスのID
takk~$ echo $$ 18371 takk~$ ps PID TTY TIME CMD 17790 pts/1 00:00:00 sh 18371 pts/1 00:00:00 bash 18380 pts/1 00:00:00 ps takk~$
$RANDOM 乱数
takk~$ echo $RANDOM 2686 takk~$ echo $RANDOM 25952 takk~$
$OLDPWD 前回のディレクトリ
takk~$ cd aa/bb/cc takk~/aa/bb/cc$ echo $OLDPWD /home/takk takk~/aa/bb/cc$ cd $OLDPWD takk~$ echo $OLDPWD /home/takk/aa/bb/cc takk~$ cd $OLDPWD takk~/aa/bb/cc$
$SHELL 現在のシェル
起動中のシェルを表示します。
takk~$ echo $SHELL /bin/sh takk~$
$SHLVL シェルレベル(シェルの深さ)
ログイン直後のレベルは1です。さらにbashを実行するとレベルアップし、exitでbashを抜けるとレベルダウンします。
Linux 192-168-0-12 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Aug 24 22:09:07 2020 from 192.168.0.11 takk~$ echo $SHLVL 1 takk~$ takk~$ echo $SHLVL 2 takk~$ bash takk~$ bash takk~$ echo $SHLVL 4 takk~$ exit exit takk~$ exit exit takk~$ exit exit takk~$ echo $SHLVL 1 takk~$
hisotry コマンド履歴
コマンド履歴表示
引数なしでhistoryコマンドを実行すると、コマンド履歴を表示します。
takk~$ mkdir tmp takk~$ cd !$ cd tmp takk~/tmp$ cd - /home/takk takk~$
takk~$ history 1 mkdir tmp 2 cd tmp 3 cd - 4 history takk~$
4行目にhistoryコマンドが表示されていますが、実際は記録されません。
takk~$ history 1 mkdir tmp 2 cd tmp 3 cd - 4 history takk~$ history 1 mkdir tmp 2 cd tmp 3 cd - 4 history takk~$
-c コマンド履歴クリア
takk~$ history -c takk~$ history 1 history takk~$
HISTSIZE コマンド履歴サイズ
takk~$ HISTSIZE=3 takk~$ echo no1 no1 takk~$ echo no2 no2 takk~$ history 27 echo no1 28 echo no2 29 history takk~$
HISTIGNORE 非履歴コマンド
HISTIGNOREに履歴に載せないコマンドを:(コロン)で区切って指定します。
コマンド行が完全一致した場合のみ、履歴対象外となります。
下記では、echo AAは履歴されますが、echoとlsは履歴に記録されない結果となっています。
takk~$ HISTIGNORE=echo:ls takk~$ echo AA AA takk~$ echo takk~$ ls tmp takk~$ history 38 HISTIGNORE=echo:ls 39 echo AA 40 history takk~$
関連記事はコチラ
historyコマンドはいつ使うのか
echo 文字列表示
echo [オプション]… [文字列]…
echoは、引数で与えた文字列を表示するコマンドです。
takk~$ echo HELLO HELLO takk~$ echo HELLO SEE YOU HELLO SEE YOU takk~$
-nを指定すると、文字列最後の改行を表示しません。
takk~$ echo -n HELLO;echo -n HELLO HELLOHELLOtakk~$
echoだけ実行すると改行ができます。
takk~$ echo takk~$
-eオプションはバックスラッシュによるエスケープ文字を許可します。改行等含む文字列を表示するときに使います。
takk~$ echo -e "HELLO\nHELLO" HELLO HELLO takk~$
関連記事はこちら
コマンドラインのHello World
for 繰り返し
bashの組み込みコマンドです。
いわゆるforeachと範囲を指定する二つの繰り返し方法があります。
for 変数 in リスト
for name [ in [word …]]; do list ;done
takk~$ for i in AA BB CC;do echo $i;done AA BB CC takk~$
for ((;;))
for (( expr1 ; expr 2 ; expr3 )) ; do list ; done
takk~$ for((i=0;i<3;i++));do echo $i;done 0 1 2 takk~$
forコマンドは空白を入れても認識しますが、2連続の((や))は、空白を入れるとエラーになります。
関連記事はコチラ
Bashでコンソールプログレスバー
2.ディレクトリ、ファイルの役割
/bin 基本コマンドディレクトリ
takk~$ ls /bin GET HEAD POST R X11 [ apt ar arch as awk bash bc c++ c89 c99 cal cat cc chfn chrt chsh chvt cmp col comm cp cpan cpio cpp cut dash date dc dd derb df diff dir dpkg du dwp echo ed edit env epmd eqn erl erlc ex expr f77 f95 file find fmt fold free from g++ gawk gcc gcov geqn git gold gosh gpg gpgv gpic grep grog gtbl gzip h2ph h2xs hd head host i386 id ip ipcs java jfr jjs join kill kmod last lcf ld ldd less lft link ln look ls lsns lsof luit lzma make man mawk mesg more mt mv nano nawk nc ncal neqn nice nkf nl nm ntpq od pdb pdb2 pdb3 perf perl pic pico ping pldd pmap pr ps ptar ptx pwd pwdx rcp rdma red rev rm rmid rsh rvim scp sed see seq sftp sg sh shuf size slib sntp sort sq ss ssh stat stty su sudo sum sync tabs tac tail tar tbl tee test tic toe top tput tr true tset tty ucf ucfq ucfr ul uniq unsq unxz vdir vi view vim w wall wc wget who xev xfd xrdb xset xxd xz yes zcat zcmp zip znew takk~$
/sbin スーパーユーザーコマンドディレクトリ
takk~$ ls /sbin | sed -ne '/^.\{1,7\}$/p' | fmt acpid adduser agetty arp arpd blkid blkzone bridge capsh cfdisk cgdisk chcpu chmem chroot cpgr cppw cron debugfs deluser depmod devlink dmsetup dmstats e2fsck e2image e2label e2undo e4crypt ethtool fdisk findfs fsck fstrim gdisk gencmn genl getcap getty grpck grpconv halt hdparm hwclock icupkg ifdown ifquery ifup init insmod ip ipmaddr isosize kbdrate kpartx logsave losetup lsmod mke2fs mkfs mkswap modinfo mysqld nameif nologin ntpd ntpdate ntptime parted pwck pwconv qemu-ga rarp raw reboot rmmod rmt rmt-tar route rtacct rtcwake rtmon runuser service setcap sfdisk sgdisk sshd sulogin swapoff swapon sysctl tarcat tc telinit tipc tune2fs udevadm useradd userdel usermod vconfig vcstime vigr vipw visudo wipefs zic zramctl takk~$
/etc (エトセトラ)ディレクトリ
/etc/debian_version Debianバージョン
takk~$ cat /etc/debian_version 10.3 takk~$
/etc/shells 可能なシェル一覧
takk~$ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash takk~$
/etc/passwd ユーザ情報
takk~$ grep takk /etc/passwd takk:x:1000:1000::/home/takk:/bin/sh takk~$
/etc/group グループ情報
takk~$ grep takk /etc/group sudo:x:27:takk takk:x:1000: takk~$
/etc/skel 新規ユーザディレクトリ構成
新規ユーザ作成時に、ユーザのホームディレクトリに、本ディレクトリの構成がコピーされます。
takk~$ find /etc/skel /etc/skel /etc/skel/.bash_logout /etc/skel/.profile /etc/skel/.bashrc takk~$
/etc/issue ログインメッセージ
ログインセッション時のメッセージを格納するファイルです。
takk~$ cat /etc/issue Debian GNU/Linux 10 \n \l
/etc/motd ログイン後メッセージ
ログイン成功後に表示するメッセージを格納するファイルです。
takk~$ cat /etc/motd The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. takk~$
/etc/ssh/sshd_config SSHサーバー設定
SSHサーバー(sshデーモン)の設定ファイルです。
takk~$ head /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the takk~$
/etc/ssh/ssh_config SSHクライアント設定
SSHクライアントの各ユーザー共通の設定ファイルです。
takk~$ head /etc/ssh/ssh_config # This is the ssh client system-wide configuration file. See # ssh_config(5) for more information. This file provides defaults for # users, and the values can be changed in per-user configuration files # or on the command line. # Configuration data is parsed as follows: # 1. command line options # 2. user-specific file # 3. system-wide file takk~$
/etc/sudoers sudo設定ファイル
/etc/sudoersは、visudoコマンドで編集します。
root~# visudo
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
/dev(デバイス)ディレクトリ
/dev/null nullデバイス
あらゆるデータの入力を破棄するファイル。
takk~$ echo HELLO > /dev/null takk~$ cat /dev/null takk~$
関連記事はコチラ
読み込みバッファサイズ
/dev/zero ゼロ読み出しファイル
ゼロ(0x00)を読み出せるスペシャルファイル。
takk~$ cat /dev/zero | dd bs=1 count=10 | hd 10+0 レコード入力 10+0 レコード出力 00000000 00 00 00 00 00 00 00 00 00 00 |..........| 0000000a 10 bytes copied, 0.00112525 s, 8.9 kB/s takk~$
関連記事はコチラ
ゼロのマニュアル
/dev/urandom 乱数読み出しファイル
乱数を読み出せるスペシャルファイル。
takk~$ cat /dev/urandom | dd bs=1 count=10 | hd 10+0 レコード入力 10+0 レコード出力 00000000 e3 b7 aa 47 19 16 41 0c 1f ff |...G..A...| 0000000a 10 bytes copied, 0.00169024 s, 5.9 kB/s takk~$
関連記事はコチラ
zipsplitコマンド
/proc(プロセス)ディレクトリ
/proc/cpuinfo CPU情報
takk~$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz stepping : 2 microcode : 0x1 cpu MHz : 2294.686 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4589.37 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: takk~$
/proc/interrupts IRQ情報
takk~$ cat /proc/interrupts CPU0 0: 6 IO-APIC 2-edge timer 1: 9 IO-APIC 1-edge i8042 4: 2442 IO-APIC 4-edge ttyS0 6: 3 IO-APIC 6-edge floppy 8: 0 IO-APIC 8-edge rtc0 9: 0 IO-APIC 9-fasteoi acpi 11: 552479 IO-APIC 11-fasteoi uhci_hcd:usb1, virtio3 12: 15 IO-APIC 12-edge i8042 14: 0 IO-APIC 14-edge ata_piix 15: 5480898 IO-APIC 15-edge ata_piix 24: 0 PCI-MSI 81920-edge virtio2-config 25: 2947679 PCI-MSI 81921-edge virtio2-req.0 26: 0 PCI-MSI 49152-edge virtio0-config 27: 100253932 PCI-MSI 49153-edge virtio0-input.0 28: 175 PCI-MSI 49154-edge virtio0-output.0 29: 0 PCI-MSI 65536-edge virtio1-config 30: 17 PCI-MSI 65537-edge virtio1-virtqueues NMI: 0 Non-maskable interrupts LOC: 267934518 Local timer interrupts SPU: 0 Spurious interrupts PMI: 0 Performance monitoring interrupts IWI: 0 IRQ work interrupts RTR: 0 APIC ICR read retries RES: 0 Rescheduling interrupts CAL: 0 Function call interrupts TLB: 0 TLB shootdowns TRM: 0 Thermal event interrupts THR: 0 Threshold APIC interrupts DFR: 0 Deferred Error APIC interrupts MCE: 0 Machine check exceptions MCP: 17747 Machine check polls HYP: 0 Hypervisor callback interrupts HRE: 0 Hyper-V reenlightenment interrupts HVS: 0 Hyper-V stimer0 interrupts ERR: 0 MIS: 0 PIN: 0 Posted-interrupt notification event NPI: 0 Nested posted-interrupt event PIW: 0 Posted-interrupt wakeup event takk~$
/proc/meminfo メモリ情報
takk~$ cat /proc/meminfo MemTotal: 493296 kB MemFree: 53048 kB MemAvailable: 417304 kB Buffers: 132480 kB Cached: 199624 kB SwapCached: 796 kB Active: 262516 kB Inactive: 89312 kB Active(anon): 15096 kB Inactive(anon): 9768 kB Active(file): 247420 kB Inactive(file): 79544 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2097148 kB SwapFree: 2077768 kB Dirty: 20 kB Writeback: 0 kB AnonPages: 19192 kB Mapped: 18336 kB Shmem: 5140 kB Slab: 72784 kB SReclaimable: 49808 kB SUnreclaim: 22976 kB KernelStack: 1136 kB PageTables: 988 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2343796 kB Committed_AS: 121936 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB Percpu: 552 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 477176 kB DirectMap2M: 47104 kB DirectMap1G: 0 kB takk~$
/proc/ioports I/O情報
takk~$ cat /proc/ioports 0000-0000 : PCI Bus 0000:00 0000-0000 : dma1 0000-0000 : pic1 0000-0000 : timer0 0000-0000 : timer1 0000-0000 : keyboard 0000-0000 : keyboard 0000-0000 : rtc0 0000-0000 : dma page reg 0000-0000 : pic2 0000-0000 : dma2 0000-0000 : fpu 0000-0000 : 0000:00:01.1 0000-0000 : ata_piix 0000-0000 : 0000:00:01.1 0000-0000 : ata_piix 0000-0000 : serial 0000-0000 : 0000:00:01.1 0000-0000 : ata_piix 0000-0000 : vga+ 0000-0000 : floppy 0000-0000 : floppy 0000-0000 : 0000:00:01.1 0000-0000 : ata_piix 0000-0000 : floppy 0000-0000 : serial 0000-0000 : 0000:00:01.3 0000-0000 : ACPI PM1a_EVT_BLK 0000-0000 : ACPI PM1a_CNT_BLK 0000-0000 : ACPI PM_TMR 0000-0000 : 0000:00:01.3 0000-0000 : piix4_smbus 0000-0000 : PCI conf1 0000-0000 : PCI Bus 0000:00 0000-0000 : ACPI GPE0_BLK 0000-0000 : 0000:00:05.0 0000-0000 : virtio-pci-legacy 0000-0000 : 0000:00:01.2 0000-0000 : uhci_hcd 0000-0000 : 0000:00:03.0 0000-0000 : virtio-pci-legacy 0000-0000 : 0000:00:04.0 0000-0000 : virtio-pci-legacy 0000-0000 : 0000:00:06.0 0000-0000 : virtio-pci-legacy 0000-0000 : 0000:00:01.1 0000-0000 : ata_piix takk~$
/proc/stat システム統計情報
takk~$ cat /proc/stat cpu 24029765 3277 4049935 618707107 113209 0 75884 57289 0 0 cpu0 24029765 3277 4049935 618707107 113209 0 75884 57289 0 0 intr 528063188 6 9 0 0 2442 0 3 0 0 0 0 648158 15 0 0 6430092 0 0 0 0 0 0 0 0 0 3412550 0 143465764 571 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 926394244 btime 1586266441 processes 1589781 procs_running 2 procs_blocked 0 softirq 744913582 0 357269988 982767 143664809 0 0 36 0 279 242995703 takk~$
/proc/filesystems 対応ファイルシステムのリスト
takk~$ cat /proc/filesystems nodev sysfs nodev rootfs nodev ramfs nodev bdev nodev proc nodev cpuset nodev cgroup nodev cgroup2 nodev tmpfs nodev devtmpfs nodev debugfs nodev tracefs nodev securityfs nodev sockfs nodev dax nodev bpf nodev pipefs nodev hugetlbfs nodev devpts nodev mqueue nodev pstore ext3 ext2 ext4 nodev autofs iso9660 nodev binfmt_misc takk~$
/proc/version バージョン情報
takk~$ cat /proc/version Linux version 4.19.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.98-1 (2020-01-26) takk~$
/usr ディレクトリ
/usr/include ヘッダファイル
本ディレクトリに、いろんなヘッダファイルが格納されています。
takk~$ find /usr/include -name 'stdio.h' /usr/include/c++/8/tr1/stdio.h /usr/include/x86_64-linux-gnu/bits/stdio.h /usr/include/stdio.h takk~$
/usr/src/linux カーネルソース
Linuxのソースの格納場所です。
関連記事はコチラ
/usr/src/linuxの謎
ゾーン情報が格納してあるディレクトリです。
takk~$ ls /usr/share/zoneinfo | pr -t5 Africa EST HST NZ US America EST5EDT Hongkong NZ-CHAT UTC Antarctica Egypt Iceland Navajo Universal Arctic Eire Indian PRC W-SU Asia Etc Iran PST8PDT WET Atlantic Europe Israel Pacific Zulu Australia Factory Jamaica Poland iso3166.tab Brazil GB Japan Portugal leap-seconds. CET GB-Eire Kwajalein ROC localtime CST6CDT GMT Libya ROK posix Canada GMT+0 MET Singapore posixrules Chile GMT-0 MST SystemV right Cuba GMT0 MST7MDT Turkey zone.tab EET Greenwich Mexico UCT zone1970.tab takk~$
日本(東京)「Tokyo」ファイルは、アジア圏のディレクトリ「/usr/share/zoneinfo/Asia」内に納められています。
takk~$ ls /usr/share/zoneinfo/Asia | pr -t5 Aden Chongqing Jerusalem Novokuznetsk Tashkent Almaty Chungking Kabul Novosibirsk Tbilisi Amman Colombo Kamchatka Omsk Tehran Anadyr Dacca Karachi Oral Tel_Aviv Aqtau Damascus Kashgar Phnom_Penh Thimbu Aqtobe Dhaka Kathmandu Pontianak Thimphu Ashgabat Dili Katmandu Pyongyang Tokyo Ashkhabad Dubai Khandyga Qatar Tomsk Atyrau Dushanbe Kolkata Qostanay Ujung_Pandang Baghdad Famagusta Krasnoyarsk Qyzylorda Ulaanbaatar Bahrain Gaza Kuala_Lumpur Rangoon Ulan_Bator Baku Harbin Kuching Riyadh Urumqi Bangkok Hebron Kuwait Saigon Ust-Nera Barnaul Ho_Chi_Minh Macao Sakhalin Vientiane Beirut Hong_Kong Macau Samarkand Vladivostok Bishkek Hovd Magadan Seoul Yakutsk Brunei Irkutsk Makassar Shanghai Yangon Calcutta Istanbul Manila Singapore Yekaterinburg Chita Jakarta Muscat Srednekolymsk Yerevan Choibalsan Jayapura Nicosia Taipei takk~$
英語なら英単語が格納されている、10万行のファイルです。
takk~$ wc -l /usr/share/dict/words 102401 /usr/share/dict/words takk~$ shuf !$ | head shuf /usr/share/dict/words | head appease melds partisanship herdsman's rut's undershoots lamps sleigh's draconian pummels takk~$
/usr/share/dict/wordsはシンボリックリンクとなっています。
takk~$ namei /usr/share/dict/words f: /usr/share/dict/words d / d usr d share d dict l words -> /etc/dictionaries-common/words d / d etc d dictionaries-common l words -> /usr/share/dict/american-english d / d usr d share d dict - american-english takk~$
関連記事はコチラ
ドイツ語版/usr/share/dict/words
ランダムな単語を得る(sed内でbash変数を使う)
3.ファイル・ディレクトリ関連コマンド
ls ディレクトリ内容の表示
ls [オプション]… [文字列]…
ls -l 詳細リスト形式で表示
takk~$ ls -l total 16 -rw-r--r-- 1 takk takk 5 Jun 3 21:20 aa -rw-r--r-- 1 takk takk 7 Jun 6 19:57 bb -rw-r--r-- 1 takk takk 3 Jun 4 20:00 cc -rw-r--r-- 1 takk takk 2 Jun 3 21:21 dd takk~$
ls -t ファイル更新が新しい順
-tオプションをつけると更新日時が新しい順で表示されます。
takk~$ ls -t bb cc dd aa takk~$
-tに、-lオプションを併用してみます。
takk~$ ls -lt total 16 -rw-r--r-- 1 takk takk 7 Jun 6 19:57 bb -rw-r--r-- 1 takk takk 3 Jun 4 20:00 cc -rw-r--r-- 1 takk takk 2 Jun 3 21:21 dd -rw-r--r-- 1 takk takk 5 Jun 3 21:20 aa takk~$
ls -S ファイルサイズが大きい順
-Sが大文字であることに注意してください。
ファイルのサイズが大きいものから表示します。
takk~$ ls -S bb aa cc dd takk~$ ls -Sl total 16 -rw-r--r-- 1 takk takk 7 Jun 6 19:57 bb -rw-r--r-- 1 takk takk 5 Jun 3 21:20 aa -rw-r--r-- 1 takk takk 3 Jun 4 20:00 cc -rw-r--r-- 1 takk takk 2 Jun 3 21:21 dd takk~$
ls -g 詳細リスト(所有者非表示)
所有者が自分の時など、分かりきっているときはわざわざ二箇所に同じユーザ表示しなくてもよいですよね。
-gオプションを使うと、所有者を非表示で詳細一覧します。
takk~$ ls -g total 16 -rw-r--r-- 1 takk 5 Jun 3 21:20 aa -rw-r--r-- 1 takk 7 Jun 6 19:57 bb -rw-r--r-- 1 takk 3 Jun 4 20:00 cc -rw-r--r-- 1 takk 2 Jun 3 21:21 dd takk~$
ls -a 隠しファイル表示
lsに-aオプションを指定すると、.(ドット)から始まるファイルも表示します。
takk~$ ls aa bb cc dd takk~$ ls -a . .bash_history bb dd .lesshst .ssh .viminfo .. .bash_logout cc .gitconfig .local .tmp aa .bashrc .config .gnupg .profile .vim takk~$
ls -i inodeを表示
takk~$ ls -i 1320725 aa 1320735 bb 1320727 cc 1320730 dd takk~$ ls -il total 16 1320725 -rw-r--r-- 1 takk takk 5 Jun 3 21:20 aa 1320735 -rw-r--r-- 1 takk takk 7 Jun 6 19:57 bb 1320727 -rw-r--r-- 1 takk takk 3 Jun 4 20:00 cc 1320730 -rw-r--r-- 1 takk takk 2 Jun 3 21:21 dd takk~$
関連記事はコチラ
lsしたのに汽車が走った〜ミスタッチしやすいコマンドとは〜
LS-Dでぶっとぶ(lsコマンドでディレクトリのみ表示)
mkdir ディレクトリ作成
mkdir [オプション]… ディレクトリ…
mkdirの引数にディレクトリ名を与えれば、ディレクトリが作成できます。
takk~$ mkdir tmp takk~$ ls -l 合計 4 drwxr-xr-x 2 takk takk 4096 3月 29 20:25 tmp takk~$
ディレクトリは複数指定することができます。
takk~$ mkdir tmp2 tmp3 takk~$ ls -l 合計 12 drwxr-xr-x 2 takk takk 4096 3月 29 20:25 tmp drwxr-xr-x 2 takk takk 4096 3月 29 20:27 tmp2 drwxr-xr-x 2 takk takk 4096 3月 29 20:27 tmp3 takk~$
cd ディレクトリ変更
cd [オプション] [ディレクトリ]
カレントディレクトリを変更するには、cdの引数にディレクトリを指定して実行すればよいです。
takk~$ cd tmp takk~/tmp$
cd ホームディレクトリへ
引数を指定せずcdだけ実行するとホームディレクトリに変更できます。
takk~/tmp$ cd takk~$
cd – 前回のディレクトリへ
引数に-(ハイフン)を指定すると、前回のディレクトリへ変更します。
takk~$ cd - /home/takk/tmp takk~/tmp$
cd 存在しないディレクトリ
存在しないディレクトリを指定するとエラーメッセージを表示して、カレントディレクトリはそのままです。
takk~$ cd test bash: cd: test: そのようなファイルやディレクトリはありません takk~$
cd 複数指定した場合
複数ディレクトリを指定しても、2番目以降は無効です。
takk~$ cd tmp2 tmp3 takk~/tmp2$
関連記事はこちら
スマートにcdを使う(その1)
pwd カレントディレクトリ表示
少々覚えにくいコマンド名かと思います。何の略か知るのが一番覚えやすいと思いますが、ネットで探してもいろんな意見があるコマンドのようです。
作った人に聞くのが一番かと思いますが、いろんな人が手がけていそうなので、手っ取り早くソースを見てみると、
coreutilsのpwd.cの一行目に「/* pwd – print current directory」
とありますので、ここでは、print working directoryと覚えておきましょう。
では使ってみます。
takk~$ pwd /home/takk takk~$ mkdir -p a/b/c/d/e takk~$ cd !$ cd a/b/c/d/e takk~/a/b/c/d/e$ pwd /home/takk/a/b/c/d/e takk~/a/b/c/d/e$
カレントディレクトリはプロンプトで表示しているので、あまり必要にならないコマンドかもしれません。
basename パスからファイル名抽出
basename [オプション]… パス文字列
basename パス文字列 [拡張子]
パス文字列からディレクトリを除いたファイル名を抽出してくれるコマンドです。
実際に存在するパスである必要はありません。
ファイル名抽出
パスからディレクトリ部分を除いたファイル名を抽出してみます。
takk~$ basename aa/bb/cc.txt cc.txt takk~$
ディレクトリ部分はカットされ、ファイル名のみ抽出できました。
拡張子を除くファイル名
パスからディレクトリ部分を除き、さらにファイル名から拡張子を除いた文字列を抽出してみます。
takk~$ basename aa/bb/cc.txt .txt cc takk~$
basename使わず拡張子抽出
Bashであればコマンドを使わなくとも、パス文字列の解析はできます。
takk~$ a=aa/bb/cc.txt takk~$ echo ${a##*.} txt takk~$
basename使わず拡張子を除く
使用場面としては、拡張子を変更する時とかですね。
takk~$ echo ${a//.*} aa/bb/cc takk~$
touch タイムスタンプ更新
touch [オプション]… ファイル…
touchはファイルのタイムスタンプを変更するコマンドです。
ただタイムスタンプを現在日時に更新するだけでなく、指定日時に変更したり、新規空ファイルを作成したりできるコマンドです。
単体で使うことより、他コマンドと連携して使うことが多いコマンドです。
touch 空ファイル生成
存在しないファイルを指定すると、新規に空ファイルを作成します。
takk~$ ls takk~$ touch test.txt takk~$ ls -l 合計 0 -rw-r--r-- 1 takk takk 0 4月 3 14:23 test.txt takk~$
touch タイムスタンプ更新
存在するファイルを指定すると、タイムスタンプを現在日時に更新します。
takk~$ date 2020年 4月 3日 金曜日 14:26:46 JST takk~$ touch test.txt takk~$ ls -l 合計 0 -rw-r--r-- 1 takk takk 0 4月 3 14:26 test.txt takk~$
touch -t 指定日時に更新
タイムスタンプを指定した日時に変更してみましょう。-tに続けて MMddhhmm(月日時分)を指定します。
(1月31日の12時30分に変更)
takk~$ touch -t01311230 test.txt takk~$ ls -l 合計 0 -rw-r--r-- 1 takk takk 0 1月 31 12:30 test.txt takk~$
関連記事はこちら
大量のファイル生成(seq/touch)
cat ファイル内容の連結表示
cat [オプション]… [ファイル]…
takk~$ echo AAA > test1.txt takk~$ echo BBB > test2.txt takk~$ ls -l 合計 8 -rw-r--r-- 1 takk takk 4 4月 3 15:19 test1.txt -rw-r--r-- 1 takk takk 4 4月 3 15:19 test2.txt takk~$
catの引数に2つのファイルを指定してみます。
takk~$ cat test1.txt test2.txt AAA BBB takk~$
各ファイルの内容が連結されて表示されました。
ファイルを指定する順番を逆にすると、
takk~$ cat test2.txt test1.txt BBB AAA takk~$
上下逆になりました。
同じファイル名を指定することもできます。
takk~$ cat test1.txt test2.txt test1.txt AAA BBB AAA takk~$
ファイルを連結して新しいファイルに書き込むには、>(リダイレクト)を使います。
takk~$ cat test1.txt test2.txt > test12.txt takk~$ ls -l 合計 12 -rw-r--r-- 1 takk takk 4 4月 3 15:19 test1.txt -rw-r--r-- 1 takk takk 8 4月 3 15:45 test12.txt -rw-r--r-- 1 takk takk 4 4月 3 15:19 test2.txt takk~$
ファイルを連結するのではなく、単純にファイルの内容を表示したいときにも使えます。
この使い方が一番多いかもしれません。
takk~$ cat test1.txt AAA takk~$
cat -n 番号付与
行番号を添えて内容を表示することもできます。-nオプションを使います。
takk~$ cat -n tmp.txt 1 AAA 2 BBB 3 4 DDD 5 EEE takk~$
cat -b 空行以外に番号付与
takk~$ cat -nb tmp.txt 1 AAA 2 BBB 3 DDD 4 EEE takk~$
cp ファイルやディレクトリコピー
cp [オプション]… コピー元 コピー先
cp [オプション]… -t コピー先 コピー元
ファイルをコピーしてみます。
まずコピー元ファイルを用意。
takk~$ echo AAA > test1.txt takk~$ ls -l 合計 4 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt takk~$
test1.txtをコピーしてtest2.txtを作ります。
takk~$ cp test1.txt test2.txt takk~$ ls -l 合計 8 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt -rw-r--r-- 1 takk takk 4 4月 3 16:29 test2.txt takk~$
コピーされました。内容も確認しておきましょう。
takk~$ cat test1.txt AAA takk~$ cat test2.txt AAA takk~$
内容は一致しました。
次はディレクトリをコピーしてみましょう。
takk~$ mkdir test1 takk~$ ls -l 合計 12 drwxr-xr-x 2 takk takk 4096 4月 3 16:42 test1 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt -rw-r--r-- 1 takk takk 4 4月 3 16:29 test2.txt takk~$
ディレクトリtest1を作成しました。これをコピーしてtest2を作ります。
-rオプションは再帰コピーのオプションですが、ディレクトリコピーは、配下のファイルやディレクトリをコピーすることは分かりきってるので、ディレクトリコピーをする場合は、-rオプションは必須になります。
takk~$ cp -r test1 test2 takk~$ ls -l 合計 16 drwxr-xr-x 2 takk takk 4096 4月 3 16:42 test1 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt drwxr-xr-x 2 takk takk 4096 4月 3 16:48 test2 -rw-r--r-- 1 takk takk 4 4月 3 16:29 test2.txt takk~$
mv ファイル移動、名前変更
mv [オプション]… 変更元 変更先
mv [オプション]… -t 変更先 変更元
まずはファイルを移動してみます。このようなディレクトリ構成のとき、
takk~$ ls -l 合計 16 drwxr-xr-x 2 takk takk 4096 4月 3 16:42 test1 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt drwxr-xr-x 2 takk takk 4096 4月 3 16:48 test2 -rw-r--r-- 1 takk takk 4 4月 3 16:29 test2.txt takk~$
ファイルtest1.txtを、ディレクトリtest1の中へ移動してみます。
takk~$ mv test1.txt test1/ takk~$
これで移動できました。確認してみましょう。
takk~$ ls -l 合計 12 drwxr-xr-x 2 takk takk 4096 4月 3 17:17 test1 drwxr-xr-x 2 takk takk 4096 4月 3 16:48 test2 -rw-r--r-- 1 takk takk 4 4月 3 16:29 test2.txt
カレントディレクトリからはtest1.txtがいなくなっていますね。
そして、test1の中は、
takk~$ ls -l test1 合計 4 -rw-r--r-- 1 takk takk 4 4月 3 16:28 test1.txt takk~$
test1.txtがあります。移動成功してますね。
xargs 標準入力を引数にしてコマンド実行
xargs [オプション] [コマンド]
コマンドの出力を、次のコマンドの引数にしたいときに使います。
takk~$ echo 10 | xargs seq 1 2 3 4 5 6 7 8 9 10 takk~$
ln ハード、シンボリックリンク
ln [オプション]… 対象 リンク名
ハードリンクやシンボリックリンクを作成するコマンドです。
ln ハードリンク
まずfile1.txtを作り、file2.txtというファイル名のハードリンクを作ってみます。
takk~$ ls takk~$ echo AAA > file1.txt takk~$ ln file1.txt file2.txt takk~$ cat file2.txt AAA takk~$
現在file1.txtとfile2.txtの内容は同じになってますが、file2.txtの内容を変更するとどうなるでしょうか。
takk~$ echo BBB >> file2.txt takk~$ cat file2.txt AAA BBB takk~$
file2.txtを変更しました。file1.txtの内容を確認してみます。
takk~$ cat file1.txt AAA BBB takk~$
同じですね。このようにハードリンクを作成すると、リンクしているファイルの内容が同じように書き換わります。
もう一つリンクを増やしてみます。
takk~$ cat file3.txt AAA BBB takk~$
最初に作ったfile1.txtを消してみましょう。
takk~$ rm file1.txt takk~$ cat file2.txt AAA BBB takk~$ cat file3.txt AAA BBB takk~$
file2.txtとfile3.txtは削除されることなく、中身も健在でした。
ln シンボリックリンク
シンボリックリンクを作るには、lnコマンドに-sオプションを指定します。
takk~$ ln -s file3.txt file4.txt takk~$ ls file2.txt file3.txt file4.txt takk~$ cat file4.txt AAA BBB takk~$
ぱっと見、ハードリンクとの違いが分かりませんが、ls -lでみると、シンボリックリンクはすぐわかります。
takk~$ ls -l total 8 -rw-r--r-- 2 takk takk 8 Apr 8 00:49 file2.txt -rw-r--r-- 2 takk takk 8 Apr 8 00:49 file3.txt lrwxrwxrwx 1 takk takk 9 Apr 8 00:49 file4.txt -> file3.txt takk~$
関連記事はこちら
実写のガミラス星人はハードリンクで作れると思った(ln)
マウントとシンボリックリンクのコピー
namei パス名を辿る
パス名の大元を辿れます。
/usr/bin/pythonのシンボリックリンクを辿ってみます。
takk~$ namei /usr/bin/python f: /usr/bin/python d / d usr d bin l python -> python2 l python2 -> python2.7 - python2.7 takk~$
関連記事はコチラ
(Linux)nameiコマンドでシンボリックリンクを辿り続ける
4.ファイルの検査コマンド
wc 文字数、行数のカウント
wc [オプション]… [ファイル]…
ファイルの単語数や行数をカウントします。
このファイルは12行のテキストファイルです。
takk~$ cat -n file1.txt 1 AAA 2 BBB 3 CCC 4 DDD 5 EEE 6 FFF 7 GGG 8 HHH 9 III 10 JJJ 11 KKK 12 LLL MMM NNN takk~$
これをwcでカウントすると、
takk~$ wc file1.txt 12 14 56 file1.txt takk~$
ファイルの分析結果が表示されました。
左から、行数、単語数、バイト数、ファイル名です。
関連記事はコチラ
最も長い英単語は何か(wc/sed)
file ファイルタイプ確認
fileコマンドで、ファイルの種類を確認できます。
拡張子をつけずに、このようにファイルを作ったとします。
takk~$ echo HELLO > aaa takk~$ ls aaa takk~$
aaaというファイルが作られましたが、今は作ったばかりだから覚えていて当然なんですが、拡張子がないとこれが何のファイルなのか忘れてしまいますね。
ファイルの種類を確認するコマンド、fileを使ってみましょう。
takk~$ file aaa aaa: ASCII text takk~$
ASCII textと表示されました。テキストファイル、かつASCIIコードが使用されています。
では、UTF8日本語の文字列をファイルに含ませてみます。
takk~$ echo あいう >> aaa takk~$ file aaa aaa: UTF-8 Unicode text takk~$
fileコマンドで、UTF-8のUnicodeテキストファイルであることが確認できました。
次は、バイナリデータを含めてみましょうか。
takk~$ echo -e "\x01" >> aaa takk~$ file aaa aaa: data takk~$
データであると認識されました。fileコマンドなかなか優秀です。
md5sum MD5メッセージダイジェスト
takk~$ echo HELLO | md5sum 0084467710d2fc9d8a306e14efbe6d0f - takk~$ echo HELLO > a.txt takk~$ md5sum a.txt 0084467710d2fc9d8a306e14efbe6d0f a.txt takk~$
関連記事はコチラ
完全一致
sum チェックサム、ブロック数計算
takk~$ echo -ne "\x11\x22" > a.bin takk~$ hd a.bin 00000000 11 22 |."| 00000002 takk~$ sum -s a.bin 51 1 a.bin takk~$
関連記事はコチラ
(Linux)バイナリファイルのSUM
5.テキスト整形コマンド
nl 番号付与
nl [オプション]… [ファイル]…
番号を付けてくれるコマンドです。cat -nでも付けられるので、あまり出番がないかもしれません。
以下のような内容のファイルを使って、いろいろ番号を付けてみましょう。
takk~$ cat tmp.txt AAA BBB CCC DDD EEE takk~$
オプションを付けずに、ファイルのみ指定すると、このような表示になります。
takk~$ nl tmp.txt 1 AAA 2 BBB 3 CCC 4 DDD 5 EEE takk~$
cat -nも確認してみます。
takk~$ cat -n tmp.txt 1 AAA 2 BBB 3 CCC 4 5 DDD 6 EEE takk~$
違いますね。nlはオプションなしで使用すると、空行に番号が付与されません。空行にも番号を付けるには-baオプションを指定します。
takk~$ nl -ba tmp.txt 1 AAA 2 BBB 3 CCC 4 5 DDD 6 EEE takk~$
少しコマンド入力が長くなってしまうので、全行に番号をつけたいときは、cat -nってことですね。
nl -v 先頭数字の指定
nlの他のオプションの使い方も確認していきましょう。
-vオプションで最初の数字を指定できます。
takk~$ nl -v2 tmp.txt 2 AAA 3 BBB 4 CCC 5 DDD 6 EEE takk~$
nl -i ステップ値の指定
3つ飛ばしで番号を付けてみます。-iオプションを使います。
takk~$ nl -i3 tmp.txt 1 AAA 4 BBB 7 CCC 10 DDD 13 EEE takk~$
nl -s セパレータ
-sオプションで、付与番号と元テキストとのセパレータを変更できます。
takk~$ nl -s: tmp.txt 1:AAA 2:BBB 3:CCC 4:DDD 5:EEE takk~$
セパレータの指定は複数文字で大丈夫です。
takk~$ nl -s' >> ' tmp.txt 1 >> AAA 2 >> BBB 3 >> CCC 4 >> DDD 5 >> EEE takk~$
変数も使えます。
takk~$ nl -s" $PWD: " tmp.txt 1 /home/takk: AAA 2 /home/takk: BBB 3 /home/takk: CCC 4 /home/takk: DDD 5 /home/takk: EEE takk~$
nl -n アライン
-nで付与番号の書式を指定できます。
左詰めは、-nln
takk~$ nl -nln tmp.txt 1 AAA 2 BBB 3 CCC 4 DDD 5 EEE takk~$
右詰めで0埋するなら、-nrz tmp.txt
takk~$ nl -nrz tmp.txt 000001 AAA 000002 BBB 000003 CCC 000004 DDD 000005 EEE takk~$
nl -w 桁数
桁数指定に加えて、分かりやすくなるように-nrzで0埋右詰で表示してみます。
takk~$ nl -w3 -nrz tmp.txt 001 AAA 002 BBB 003 CCC 004 DDD 005 EEE takk~$
nl マッチ行に番号付与
正規表現でマッチする行のみ番号付与できます。
元ファイル
takk~$ cat -n tmp2.txt 1 AAA,1234,xxxx-xxxx-xxxx 2 BBBB,,xxxx-xxxx-xxxx 3 ,,xxxx-xxxx-xxxx 4 5 CCCC,, 6 DDDD,123 takk~$
セクション指定(BODY)の-bオプションに続いて、「p正規表現」を指定すればよいです。
,(カンマ)を2つ含む行へのみ、番号付与してみます。
takk~$ nl -bp',.*,' tmp2.txt 1 AAA,1234,xxxx-xxxx-xxxx 2 BBBB,,xxxx-xxxx-xxxx 3 ,,xxxx-xxxx-xxxx 4 CCCC,, DDDD,123 takk~$
tac テキストの上下反転
tac [オプション]… [ファイル]…
このファイルの内容を逆さまにしてみましょう。
takk~$ cat file.txt AAA BBB CCC DDD EEE takk~$
オプションなしでファイルを指定するだけです。
takk~$ tac file.txt EEE DDD CCC BBB AAA takk~$
関連記事はコチラ
perlとsedでtacする
(Linux)tacコマンド-sオプション
shuf テキストのシャッフル
shuf [オプション]… [ファイル]
トランプを切るようにテキストをシャッフルしてくれるコマンドです。
元のテキストはこれ。
takk~$ cat file.txt AAA BBB CCC DDD EEE takk~$
シャッフルすると、
takk~$ shuf file.txt DDD EEE BBB CCC AAA takk~$
当然結果は毎回変化します。
takk~$ shuf file.txt EEE CCC BBB DDD AAA takk~$
関連記事はコチラ
(Linux)シャッフルしてソート(shuf sortコマンド)
shufにナンバーズ3の番号を決めてもらう
rev テキストの左右反転
rev [オプション]… [ファイル]…
このファイルの内容を左右反転してみます。
takk~$ cat file.txt abcde fghij klmno pqrst 12345 67890 takk~$
tacと同じく引数にファイルを指定するだけです。
takk~$ rev file.txt edcba jihgf onmlk tsrqp 54321 09876 takk~$
特に難しいところはありませんね。
関連記事はコチラ
何に使うかわからないrevを使って文字コードチェック
何に使うかわからないrevを使って並び替えとニブルスワップ
head テキストの先頭抽出
head [オプション]… [ファイル]…
ファイルを指定すると、ファイルの1行目から10行目までを抽出します。
このようなファイルがあるとき、
takk~$ cat file1.txt AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL takk~$
このファイルをheadの引数に与えると、
takk~$ head file1.txt AAA BBB CCC DDD EEE FFF GGG HHH III JJJ takk~$
上から10行のみ抽出してくれます。
複数ファイルを指定すると、ヘッダにファイル名を表示します。
takk~$ head *.txt ==> file1.txt <== AAA BBB CCC DDD EEE FFF GGG HHH III JJJ ==> file2.txt <== AAA BBB CCC DDD EEE FFF GGG HHH III JJJ takk~$
tail テキストの末尾抽出
tail [オプション]… [ファイル]…
headで使ったファイルfile1.txtをtailで使ってみます。
takk~$ tail file1.txt CCC DDD EEE FFF GGG HHH III JJJ KKK LLL takk~$
関連記事はコチラ
headよりtailが遅い?
tr 文字変換、文字削除
tr [オプション]… 置換前文字列セット [置換後文字列セット]
tr 文字変換
takk~$ seq 6 1 2 3 4 5 6 takk~$ takk~$ seq 6 | tr 246 135 1 1 3 3 5 5 takk~$
tr -d 文字削除
-dオプションで指定した文字を削除できます。
takk~$ seq 6 | tr -d 25 1 3 4 6 takk~$
tr 範囲で指定する
-で範囲指定することもできます。
takk~$ echo -e $(printf "\\\x%x" `seq 65 89`) ABCDEFGHIJKLMNOPQRSTUVWXY takk~$ !! | tr A-L a-l echo -e $(printf "\\\x%x" `seq 65 89`) | tr A-L a-l abcdefghijklMNOPQRSTUVWXY takk~$
sed ストリームエディタ
sed [オプション]… スクリプト [入力ファイル]…
-e’s///’ 置換
takk~$ cat -n a.txt 1 AAA 2 BBB 3 CCC 4 DDD 5 EEE takk~$ sed -e 's/CCC/C/' a.txt AAA BBB C DDD EEE takk~$
-ne ‘数字p’ 指定行のみ出力
takk~$ sed -ne '3p' a.txt CCC takk~$
関連記事はコチラ
sedの拡張正規表現を使う
(Linux)sedコマンドで破壊的置換(大量ファイル置換)
(Linux)headの代わりにsedやawkを使う(head sed awkの良いところ)
sedやperlの置換構文〜substitute(s///)
numfmtで付けたカンマはsedやawkで外す
uniq 重複行検出、重複行除外
uniq [オプション]… [入力]
重複行を発見、除外することができます。
takk~$ echo "AAA > BBB > BBB > CCCC > CCC > CCC > DDDDDD > DDDDDD > DDDDDD > " > a.txt takk~$ cat a.txt AAA BBB BBB CCCC CCC CCC DDDDDD DDDDDD DDDDDD takk~$
この重複行だらけのa.txtにuniqをかけてみましょう。
uniq 重複行削除
takk~$ uniq a.txt AAA BBB CCCC CCC DDDDDD takk~$
uniq -c 重複行の検出、カウント
重複行を調べるには、重複行の数をカウントすればよいです。
takk~$ uniq -c a.txt 1 AAA 2 BBB 1 CCCC 2 CCC 3 DDDDDD 1 takk~$
uniq -D 重複行のみ表示
takk~$ uniq -D a.txt BBB BBB CCC CCC DDDDDD DDDDDD DDDDDD takk~$
関連記事はこちら
uniqコマンドでランレングス圧縮できるって本当?
pythonとuniqで英単語のアナグラムを見つける
expand タブ→スペース変換
takk~$ cat tab.txt 1234567 ABC ABC 1234 ABC takk~$
上記はタブ入りのテキストファイルです。各行のABCの前には、タブ(コード09)があります。
takk~$ xxd tab.txt 00000000: 3132 3334 3536 3709 4142 430a 0941 4243 1234567.ABC..ABC 00000010: 0a31 3233 3409 4142 4309 0a .1234.ABC.. takk~$
このテキストファイルのタブを、expandコマンドで、スペースに変換してみます。
takk~$ expand tab.txt 1234567 ABC ABC 1234 ABC takk~$
見た目は変わってませんが、空欄部分は、すべてスペース(コード20)に置換されています。
takk~$ expand tab.txt | xxd 00000000: 3132 3334 3536 3720 4142 430a 2020 2020 1234567 ABC. 00000010: 2020 2020 4142 430a 3132 3334 2020 2020 ABC.1234 00000020: 4142 4320 2020 2020 0a ABC . takk~$
関連記事はコチラ
(Linux)expand/unexpand ソースコードのタブ変換
(Linux)expandのiオプションが何か分からない
unexpand スペース→タブ変換
unexpandは、expandの反対で、スペース(20)をタブ(09)に置換するコマンドです。
もちろん単純置換ではなく、文字の配置状況に合わせて置換されます。
以下のファイルの内容のうち、空欄部分はすべてスペース(20)です。
takk~$ cat space.txt 1234567 ABC ABC 1234 ABC takk~$ xxd space.txt 00000000: 3132 3334 3536 3720 4142 430a 2020 2020 1234567 ABC. 00000010: 2020 2020 4142 430a 3132 3334 2020 2020 ABC.1234 00000020: 4142 4320 2020 2020 0a ABC . takk~$
unexpandでスペースタブ置換してみます。
takk~$ unexpand space.txt 1234567 ABC ABC 1234 ABC takk~$ takk~$ unexpand space.txt | xxd 00000000: 3132 3334 3536 3720 4142 430a 0941 4243 1234567 ABC..ABC 00000010: 0a31 3233 3420 2020 2041 4243 2020 2020 .1234 ABC 00000020: 200a . takk~$
fmt テキストをフォーマット
fmt [-幅] [オプション]… []ファイル]…
テキストファイルの幅を揃える。
元ファイルの生成。
takk~$ seq 20 | perl -nE'say $_/0.8' | shuf > a.txt takk~$ cat a.txt 20 3.75 8.75 21.25 18.75 13.75 25 15 7.5 12.5 5 22.5 6.25 10 17.5 11.25 16.25 2.5 1.25 23.75 takk~$
20カラムを指定します。
takk~$ fmt -w20 a.txt 20 3.75 8.75 21.25 18.75 13.75 25 15 7.5 12.5 5 22.5 6.25 10 17.5 11.25 16.25 2.5 1.25 23.75 takk~$
fold テキストを折りたたみ
fold [オプション]… [ファイル]…
-b バイト指定して折りたたみ
takk~$ seq -s, 100 | fold -b20 1,2,3,4,5,6,7,8,9,10 ,11,12,13,14,15,16,1 7,18,19,20,21,22,23, 24,25,26,27,28,29,30 ,31,32,33,34,35,36,3 7,38,39,40,41,42,43, 44,45,46,47,48,49,50 ,51,52,53,54,55,56,5 7,58,59,60,61,62,63, 64,65,66,67,68,69,70 ,71,72,73,74,75,76,7 7,78,79,80,81,82,83, 84,85,86,87,88,89,90 ,91,92,93,94,95,96,9 7,98,99,100 takk~$
-s 空白で改行する
takk~$ seq -s' ' 100 | fold -sb20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 takk~$
paste ファイルを行毎に結合
paste [オプション]… [ファイル]…
ファイルを行単位で結合します。
takk~$ cat a.txt A1 A2 A3 A4 A5 takk~$ cat b.txt B1 B2 B3 B4 B5 takk~$ paste a.txt b.txt A1 B1 A2 B2 A3 B3 A4 B4 A5 B5 takk~$
引数に指定する順序で、結合します。
takk~$ paste b.txt a.txt B1 A1 B2 A2 B3 A3 B4 A4 B5 A5 takk~$
同じファイルを指定することもできます。
takk~$ paste a.txt b.txt a.txt A1 B1 A1 A2 B2 A2 A3 B3 A3 A4 B4 A4 A5 B5 A5 takk~$
ファイルの行数を合わせなくても結合できます。
takk~$ cat c.txt C1 C2 C3 takk~$ paste a.txt c.txt A1 C1 A2 C2 A3 C3 A4 A5 takk~$ paste c.txt a.txt C1 A1 C2 A2 C3 A3 A4 A5 takk~$
関連記事はコチラ
かえるの合唱(printerbanner)
cut 列の抽出
cut オプション… [ファイル]…
指定文字列をセパレータとして、テキストの列抽出をします。
区切り文字は-dで指定します。
takk~$ seq 10 49 | fmt -30 > a.txt takk~$ cat a.txt 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 takk~$ takk~$ cut -d' ' -f1,2,7-9 a.txt 10 11 16 17 18 20 21 26 27 28 30 31 36 37 38 40 41 46 47 48 takk~$
関連記事はこちら
列の入れ替えはcutでできない、awkでできる
テキストの列フィルタ(cut)
split ファイル分割
split [オプション]… [ファイル [プリフィックス]]
ファイルを指定した方法で分割します。
takk~$ echo ABCDEFGHIJKLMN > a.bin takk~$ split -b3 a.bin takk~$ ls a.bin xaa xab xac xad xae takk~$ cat xab DEFtakk~$ takk~$
関連記事はコチラ
splitとpasteでXとYを入れ替える
printf 書式指定
takk~$ printf "%07.3f\n" 12.3 012.300 takk~$
6.検索コマンド
grep ファイル内の文字列検索
grep [オプション…] パターン [ファイル…]
takk~$ head *.txt ==> a.txt <== AAA BBB CCC DDD EEE ==> b.txt <== KKK FFF LLL AAA EEE takk~$
takk~$ grep AAA *.txt a.txt:AAA b.txt:AAA takk~$
関連記事はコチラ
grepの色を変える
(Linux)grepで発見行の前後も表示する
which コマンドのパス検索
which [-a] コマンド名 …
コマンドのパスを表示します。
takk~$ which ls /usr/bin/ls takk~$
-aオプションを使用すると、実行ファイルがあるすべてのパスを表示します。
takk~$ which -a ls /usr/bin/ls /bin/ls takk~$
複数のコマンドを指定することもできます。
takk~$ which ls file find /usr/bin/ls /usr/bin/file /usr/bin/find takk~$
whereis コマンドに関連したファイルの表示
whereisコマンドでバイナリ、ソース、manドキュメントのパスを表示します。
takk~$ whereis ssh ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz /usr/src/openssh-7.9p1/ssh.o /usr/src/openssh-7.9p1/ssh /usr/src/openssh-7.9p1/ssh.c /usr/src/openssh-7.9p1/ssh.0 /usr/src/openssh-7.9p1/ssh.1 /usr/src/openssh-7.9p1/ssh2.h /usr/src/openssh-7.9p1/ssh.h takk~$
find 階層内のファイル検索
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point…] [ex‐pression]
ディレクトリ深く埋もれたファイルを探してくれるコマンドです。
takk~$ mkdir -p aa/bb/cc/dd/ee takk~$ tmp=!$ tmp=aa/bb/cc/dd/ee takk~$ touch $tmp/test{1..9}.txt takk~$
find 引数なしの場合
findの引数に何も指定しないと、カレントディレクトリ以下のファイルを全て表示します。
takk~$ find . ./.bash_logout ./.profile ./aa ./aa/bb ./aa/bb/cc ./aa/bb/cc/dd ./aa/bb/cc/dd/ee ./aa/bb/cc/dd/ee/test5.txt ./aa/bb/cc/dd/ee/test2.txt ./aa/bb/cc/dd/ee/test8.txt ./aa/bb/cc/dd/ee/test1.txt ./aa/bb/cc/dd/ee/test3.txt ./aa/bb/cc/dd/ee/test6.txt ./aa/bb/cc/dd/ee/test4.txt ./aa/bb/cc/dd/ee/test7.txt ./aa/bb/cc/dd/ee/test9.txt ./.bashrc ./.bash_history takk~$
find ディレクトリ配下すべて
takk~$ find aa aa aa/bb aa/bb/cc aa/bb/cc/dd aa/bb/cc/dd/ee aa/bb/cc/dd/ee/test5.txt aa/bb/cc/dd/ee/test2.txt aa/bb/cc/dd/ee/test8.txt aa/bb/cc/dd/ee/test1.txt aa/bb/cc/dd/ee/test3.txt aa/bb/cc/dd/ee/test6.txt aa/bb/cc/dd/ee/test4.txt aa/bb/cc/dd/ee/test7.txt aa/bb/cc/dd/ee/test9.txt takk~$
find -name ファイル名で検索
takk~$ find -name '*9*' ./aa/bb/cc/dd/ee/test9.txt takk~$
7.比較・ソートコマンド
sort ソート
sort [オプション]… [ファイル]…
テキストの並べ替えをしてくれるコマンドです。
このような内容のファイルがあります。
takk~$ cat file.txt DDD BBB CCC EEE AAA takk~$
これにsortコマンドを実行してみましょう。
takk~$ sort file.txt AAA BBB CCC DDD EEE takk~$
アルファベットの昇順に並び替えられました。
降順にするには、-rオプションです。
takk~$ sort -r file.txt EEE DDD CCC BBB AAA takk~$
さきほどは小文字のrのオプションでしたが、大文字Rオプション、-Rを使うとshufと同じことができます。
takk~$ sort -R file.txt AAA EEE CCC BBB DDD takk~$
cmp BYTE毎ファイル比較
cmp [オプション]… ファイル1 [ファイル2]
ファイルを1BYTE単位で比較します。
takk~$ echo ABCDE > a.txt takk~$ echo A_CD_ > b.txt takk~$ cmp a.txt b.txt a.txt b.txt differ: byte 2, line 1 takk~$
cmp -b 最初差分の内容表示
takk~$ cmp -b a.txt b.txt a.txt b.txt differ: byte 2, line 1 is 102 B 137 _ takk~$
cmp -l 差分を全部表示
takk~$ cmp -l a.txt b.txt 2 102 137 5 105 137 takk~$
関連記事はコチラ
(Linux)cmpコマンド
diff ファイル比較
takk~$ cat a.txt 111 222 333 444 555 takk~$ cat b.txt 111 3 444 555 takk~$ diff a.txt b.txt 2,3c2,3 < 222 < 333 --- > > 3 takk~$
関連記事はコチラ
diffコマンドの読み方(その1)
patch パッチ当て
patch作成はdiffコマンドで行います。
takk~$ diff -u a.txt b.txt > from_a_to_b.patch takk~$ cat from_a_to_b.patch --- a.txt 2020-05-23 16:32:55.099435852 +0900 +++ b.txt 2020-05-23 16:33:10.579681161 +0900 @@ -1,5 +1,5 @@ 111 -222 -333 + +3 444 555 takk~$
a.txtにパッチを当てて、b.txtと同じテキストにします。
takk~$ takk~$ patch a.txt < from_a_to_b.patch patching file a.txt takk~$ cat a.txt 111 3 444 555 takk~$
関連記事はコチラ
ディレクトリへのpatch
8.その他のコマンド
seq 数列生成
seq [オプション]… FIRST
seq [オプション]… FIRST LAST
seq [オプション]… FIRST INCREMENT LAST
数列を生成してくれるコマンドです。使ってみましょう。
数字を一つだけ指定すると、1から指定した数まで1ずつ増加する数列を得ることができます。
takk~$ seq 5 1 2 3 4 5 takk~$
数字を二つ指定すると、一番目に指定した数字から、二番目の数字まで、1ずつ増加する数列になります。
takk~$ seq 3 6 3 4 5 6 takk~$
三つ指定すると以下の通りです。
takk~$ seq 10 -3 -7 10 7 4 1 -2 -5 takk~$
INCREMENTにマイナス値を与えると、マイナス方向の数列も作れます。q
takk~$ seq -5 -1 -10 -5 -6 -7 -8 -9 -10 takk~$
-s セパレータ
seqのデフォルトのセパレータは改行コードとなっていますが、-sオプションで指定した文字列にセパレータを置き換えることができます。
takk~$ seq -s, 10 1,2,3,4,5,6,7,8,9,10 takk~$
関連記事はコチラ
感謝の達人 簡単なのに難しいSUM
date 日時設定または表示
date [オプション]… [+FORMAT]
言わずと知れた日時表示コマンドです。dateっていえば日付だけな気もしますが、時刻もしてくれます。
takk~$ date Tue 12 May 2020 09:06:54 PM JST takk~$
cal カレンダー
引数なしで実行すると当月のカレンダーを表示します。
現在日付が反転表示されます。
西暦を指定すると年間カレンダーを表示します。
関連記事はコチラ
calコマンドで91days
more ファイル通読フィルタ
more [オプション] ファイル…
ファイルを準備してからmoreで開きます。
takk~$ seq 999 > test.txt takk~$ more test.txt takk~$
以下のようにファイルの内容が流れず、ページ送り待ちになります。
スペースバーを押すと、ページ送りされます。
less moreと逆のコマンド
less [オプション]… ファイル
moreを使ったときと同じくファイルを準備してからlessで開きます。
takk~$ seq 999 > test.txt takk~$ less test.txt takk~$
表示のされかたはmoreに似てますね。lessの場合は左下がMoreではなく、ファイル名になっています。
上下キーでファイル内を閲覧できます。
qキーで閲覧を終了できます。
expr 式の評価
takk~$ expr 2 + 3 \* 4 / 2 8 takk~$
dc 任意精度計算機
dc、Enterで計算開始、qで終了です。
takk~$ dc 1 2 3 4 5 ++++p 15 q takk~$
dc 16進変換
takk~$ dc 100 16op 64
dc 8進変換
takk~$ dc 100 8op 144
dc 2進変換
takk~$ dc 100 2op 1100100
関連記事はコチラ
dc用にデータと計算マクロの抱き合わせ
任意精度の計算機 dcを使いこなせるようになりたい
dcスタックを逆順に
dcでseq 10する
nkf 文字コード変換
nkf [オプション] [ファイル…]
nkfの略はNetwork Kanji Filterで、ネットワーク漢字コード変換フィルタと訳すのが正解だと思いますが、コマンドが探しにくいのでタイトルを文字コード変換としています。
–guess 文字コード取得
takk~$ echo あいう > a.txt takk~$ nkf --guess a.txt UTF-8 (LF) takk~$
大文字オプションは入力文字コード
小文字オプションは出力文字コード
となっています。
-J ISO-2022-JP (JIS code)
-S Shift_JIS
-E EUC-JP
-W UTF-8N
UTF8をShift_JISに変換する場合は、 入力指定に-W、出力指定に小文字の-sを使います。
takk~$ nkf -W -s < a.txt > b.txt takk~$ od -tx1 -An a.txt e3 81 82 e3 81 84 e3 81 86 0a takk~$ od -tx1 -An b.txt 82 a0 82 a2 82 a4 0a takk~$
関連記事はコチラ
文字列の文字コードを手軽に確認
(Linux)ディレクトリ構成のみコピー、複数ファイルを文字コード変換(nkf)
dd バイナリファイル操作
dd [オペランド]…
dd [オプション]
オプション一覧
bs=BYTES
cbs=BYTES
conv=CONVS
count=N
ibs=BYTES
if=入力ファイル
iflag=iflag
of=出力ファイル
oflag=FLAGS
seek=N
skip=N
status=LEVEL
使い方はこちらにまとめてあります。
ddコマンドまとめ
関連記事はコチラ
ddランダム
ddコピーにキーボード入力
hexdump,hd 16進ファイルダンプ
hexdump [オプション]… ファイル…
hd [オプション]… ファイル…
16進数でファイルダンプします。
takk~$ echo ABCDE > a.bin takk~$ hexdump a.bin 0000000 4241 4443 0a45 0000006 takk~$
hdコマンドは、hexdumpのシンボリックリンクとなっています。
takk~$ ls -l `which hd` lrwxrwxrwx 1 root root 7 May 4 2018 /usr/bin/hd -> hexdump takk~$
od ファイルダンプ
od [オプション]… ファイル…
8進数でファイルダンプします。
takk~$ echo ABCDE > a.bin takk~$ od a.bin 0000000 041101 042103 005105 0000006 takk~$
関連記事はコチラ
binutilsにodはない
xxd バイナリ16進相互変換
xxd [オプション] [入力ファイル [出力ファイル]]
xxd -r [オプション] [入力ファイル [出力ファイル]]
バイナリファイルを16進ダンプ、または16進で記述されたテキストをバイナリに変換します。
takk~$ echo -ne "\x01\x81\x82" > a.bin takk~$ xxd a.bin 00000000: 0181 82 ... takk~$
関連記事はコチラ
xxdで魔法のようにバイナリを生成する
truncate ファイルの切り詰め、拡張
-s 拡張の場合
takk~$ echo HELLO > a.bin takk~$ ls -l a.bin -rw-r--r-- 1 takk takk 6 May 31 08:38 a.bin takk~$ truncate -s10 a.bin takk~$ ls -l a.bin -rw-r--r-- 1 takk takk 10 May 31 08:38 a.bin takk~$ hd a.bin 00000000 48 45 4c 4c 4f 0a 00 00 00 00 |HELLO.....| 0000000a takk~$
-s 切り詰めの場合
takk~$ hd a.bin 00000000 48 45 4c 4c 4f 0a 00 00 00 00 |HELLO.....| 0000000a takk~$ truncate -s4 a.bin takk~$ ls -l a.bin -rw-r--r-- 1 takk takk 4 May 31 08:40 a.bin takk~$ hd a.bin 00000000 48 45 4c 4c |HELL| 00000004 takk~$
関連記事はコチラ
イメージファイルを直接編集してファイルの内容を変更
truncateコマンド
9.ファイル・アーカイブ
cpio アーカイブへのコピーまたはその逆
chmod [オプション]… [ディレクトリ]
ファイルを書庫へコピーしたり、書庫からファイルへコピーするコマンドです。
man cpioより
cpio -o < NAME-LIST [> ARCHIVE] # 書庫 ARCHIVE からファイルを抽出する cpio -i [< archive] # NAME-LIST にあるファイル名のファイルをディレクトリ DIR にコピーする cpio -p DIR < NAME-LIST 主操作モード: -i, --extract 書庫からファイルを抽出する (copy-in モードで実行) -o, --create 書庫を作成する (copy-out モードで実行)
関連記事はコチラ
cpioでアーカイブの内容を確認する
cpioでエンディアン変換
cpioで複数ファイルのエンディアン変換
cpioで単純なディレクトリコピー
cpioヘッダ(その1)
chmod ファイルモード変更
chmod [オプション]… モード… ファイル…
ファイルのモードを変更します。
takk~$ echo HELLO > aaa.txt takk~$ ls -l total 4 -rw-r--r-- 1 takk takk 6 May 12 23:05 aaa.txt takk~$
ls -lでファイルパーミッションを確認すると、644になっています。
ユーザーは6、Read/Write可
グループは4、Read可
その他は4、Read可
です。
chmodでパーミッションを変更してみましょう。
ユーザをRead/Write可から、Read可にしてみます。
takk~$ chmod 444 aaa.txt takk~$ ls -l total 4 -r--r--r-- 1 takk takk 6 May 12 23:05 aaa.txt takk~$
変更されました。
この状態でこのファイルをrmしようとすると、
takk~$ rm aaa.txt rm: remove write-protected regular file 'aaa.txt'? takk~$ ls -l total 4 -r--r--r-- 1 takk takk 6 May 12 23:05 aaa.txt takk~$
削除できませんでした。
ファイルのパーミッションを元に戻します。
takk~$ ls -l total 4 -r--r--r-- 1 takk takk 6 May 12 23:05 aaa.txt takk~$ takk~$ chmod 644 aaa.txt takk~$ ls -l total 4 -rw-r--r-- 1 takk takk 6 May 12 23:05 aaa.txt takk~$ rm aaa.txt takk~$ ls -l total 0 takk~$
ファイル削除できました。
関連記事はコチラ
lsのファイルパーミッションを8進表記にする
chmodが呼び出しているシステムコール
tar 書庫ユーティリティ
tar オプション[f 書庫ファイル] [オプション] [ファイル…]
慣れたらものすごく使いやすいのですが、結構苦手に人が多いtarコマンド。
tarコマンドは圧縮、解凍してくれるイメージが強いと思いますが、基本的にはファイルをまとめて書庫にしたり、書庫をファイルに展開したりするコマンドです。
tar c ファイルをまとめる
まずはファイルを準備します。
takk~$ ls takk~$ echo AAA > file1.txt takk~$ echo BBB > file2.txt takk~$ echo CCC > file3.txt takk~$ ls -l total 12 -rw-r--r-- 1 takk takk 4 May 12 20:51 file1.txt -rw-r--r-- 1 takk takk 4 May 12 20:51 file2.txt -rw-r--r-- 1 takk takk 4 May 12 20:51 file3.txt takk~$
この3つのファイルをまとめて、tarファイルにしてみます。
takk~$ tar cf test.tar file*.txt takk~$ ls -l total 24 -rw-r--r-- 1 takk takk 4 May 12 20:51 file1.txt -rw-r--r-- 1 takk takk 4 May 12 20:51 file2.txt -rw-r--r-- 1 takk takk 4 May 12 20:51 file3.txt -rw-r--r-- 1 takk takk 10240 May 12 20:53 test.tar takk~$
test.tarというファイルができました。
tar t 書庫内を一覧
ファイルコマンドで、ファイルの種類を確認してみます。
takk~$ file test.tar test.tar: POSIX tar archive (GNU) takk~$
tarの書庫ファイルですね。
書庫の内容を一覧表示してみます。
takk~$ tar tf test.tar file1.txt file2.txt file3.txt takk~$
関連記事はコチラ
大量ファイルはtar cでなくtar rオプションを使う
特定ファイル以外をtarボールにする
dos2unix 改行コード変換
dos2unix [オプション] [ファイル…]
テキストファイルのWindowsの改行コード(CRLF)を、Unix/Mac/Linuxの改行コードに変換します。
unix2dox [オプション] [ファイル…]
dos2unixの逆です。
関連記事はコチラ
dos2unixで改行コードの変換
size セクションサイズ一覧
takk~$ cat t.c #include<stdio.h> int main() { printf("HELLO\n"); } takk~$ gcc t.c;ls a.out t.c takk~$ size a.out text data bss dec hex filename 1451 584 8 2043 7fb a.out takk~$
関連記事はコチラ
sizeコマンド
sizeコマンドの仲間たち
sizeコマンドで苦手なセクションを覚える
sizeコマンドでdata,bssを確認する
10.システム管理コマンド
uname システム情報表示
uname [オプション]…
uname 引数なしの場合
takk~$ uname Linux takk~$
uname -r カーネルバージョン表示
takk~$ uname -r 4.19.0-8-amd64 takk~$
uname -m ハードウェアアーキテクチャ表示
takk~$ uname -m x86_64 takk~$
uname -a 全オプション指定
takk~$ uname -a Linux xxx-xxx-xx-xxx 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux takk~$
whoami 実効ユーザ名
takk~$ whoami takk takk~$
関連記事はコチラ
私は誰?(whoami)
ps プロセス一覧
takk~$ ps PID TTY TIME CMD 21548 pts/0 00:00:00 sh 21553 pts/0 00:00:00 bash 21579 pts/0 00:00:00 ps takk~$
ヘルプです。
takk~$ ps --help Usage: ps [options] Try 'ps --help <simple|list|output|threads|misc|all>' or 'ps --help <s|l|o|t|m|a>' for additional help text. For more details see ps(1). takk~$
関連記事はこちら
psコマンドのオプションをソースで確認
psコマンドのオプション、その解析方法
kill プロセス終了
シグナル番号を指定してプロセスを止める
takk~$ top & [1] 17711 takk~$ kill -9 17711 [1]+ 停止 top takk~$ ps | grep 17711 [1]+ 強制終了 top takk~$ ps | grep 17711 takk~$
-l シグナル名一覧
takk~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX takk~$
関連記事はコチラ
killコマンドでやってること
killall プロセス名を指定して終了
takk~$ top & [1] 18173 takk~$ killall -9 top [1]+ 強制終了 top takk~$
top プロセス表示
top -hv|-bcHiOSs -d secs -n max -u|U user -p pid -o fld -w [cols]
takk~$ top
top - 13:43:23 up 59 days, 15:09, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st MiB Mem : 481.7 total, 32.5 free, 58.0 used, 391.2 buff/cache MiB Swap: 2048.0 total, 2030.3 free, 17.7 used. 406.4 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6603 takk 20 0 16900 4920 3804 S 0.3 1.0 0:00.20 sshd 1 root 20 0 170548 8388 6580 S 0.0 1.7 2:36.63 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.52 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0+ 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu+ 9 root 20 0 0 0 0 S 0.0 0.0 0:59.34 ksoftirqd+ 10 root 20 0 0 0 0 I 0.0 0.0 22:51.51 rcu_sched 11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 12 root rt 0 0 0 0 S 0.0 0.0 0:13.23 migration+ 14 root 20 0 0 0 0 S 0.0 0.0 0:00.01 cpuhp/0 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 〜以下省略〜
vmstat 仮想メモリ統計
vmstat [-a] [-n] [delay [ count]]
vmstat [-f] [-s] [-m]
vmstat [-S unit]
vmstat [-d]
vmstat [-p disk partition]
vmstat [-V]
takk~$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 18076 33976 153948 246740 0 0 0 3 2 7 0 0 100 0 0 takk~$
strip シンボル削除
takk~$ cat t.c #include<stdio.h> int main() { printf("HELLO\n"); } takk~$ gcc t.c takk~$ ls -l total 24 -rwxr-xr-x 1 takk takk 16600 May 29 19:24 a.out -rw-r--r-- 1 takk takk 54 May 29 19:23 t.c takk~$ cp a.out b.out takk~$ strip b.out takk~$ ls -l total 40 -rwxr-xr-x 1 takk takk 16600 May 29 19:24 a.out -rwxr-xr-x 1 takk takk 14408 May 29 19:24 b.out -rw-r--r-- 1 takk takk 54 May 29 19:23 t.c takk~$
関連記事はコチラ
stripコマンド
df ディスク使用量
各デバイス別のディスク使用量を表示してくれるコマンドです。
takk~$ df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 udev 231428 0 231428 0% /dev tmpfs 49332 5416 43916 11% /run /dev/vda2 30829544 20688016 8657480 71% / tmpfs 246648 0 246648 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 246648 0 246648 0% /sys/fs/cgroup tmpfs 49328 0 49328 0% /run/user/1000 takk~$
-hを指定すると単位がついてわかりやすくなります。
takk~$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 udev 227M 0 227M 0% /dev tmpfs 49M 5.3M 43M 11% /run /dev/vda2 30G 20G 8.3G 71% / tmpfs 241M 0 241M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 241M 0 241M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/1000 takk~$
du ディスク使用量推定
du [オプション]… [ファイル]…
ファイルなしの場合
引数なしでduを実行すると、カレントディレクトリ自身の推定使用サイズのみ表示します。
単位はKByteです。
takk~/tmp$ find . takk~/tmp$ du 4 . takk~/tmp$
空ディレクトリの場合
ディレクトリは空でもサイズが4KByteで計上されます。
takk~/tmp$ mkdir dir1 dir2 takk~/tmp$ find . ./dir2 ./dir1 takk~/tmp$ du 4 ./dir2 4 ./dir1 12 . takk~/tmp$
空ファイルの場合
一方空ファイルの場合は、計上されません。
takk~/tmp$ touch dir1/file1.txt takk~/tmp$ find . ./dir2 ./dir1 ./dir1/file1.txt takk~/tmp$ du 4 ./dir2 4 ./dir1 12 . takk~/tmp$
-h 単位を表示
takk~/tmp$ echo HELLO > dir1/file1.txt takk~/tmp$ mkdir -p dir2/dir3 takk~/tmp$ find . ./dir2 ./dir2/dir3 ./dir1 ./dir1/file1.txt takk~/tmp$ du -h 4.0K ./dir2/dir3 8.0K ./dir2 8.0K ./dir1 20K . takk~/tmp$
-d 単位を表示
-dオプション(–depth)で、表示する階層レベルを指定できます。
0の場合は、カレントディレクトリの推定合計サイズのみ表示します。
takk~/tmp$ du -d0 20 . takk~/tmp$ du -d1 8 ./dir2 8 ./dir1 20 . takk~/tmp$ du -d2 4 ./dir2/dir3 8 ./dir2 8 ./dir1 20 . takk~/tmp$
関連記事はコチラ
ディスク使用量の内訳を調べる(du)
mount マウント
(基本的な使い方)
mount -t type device dir
ファイルシステムを/(ルート)ツリーにマウントします。
関連記事
mountコマンドに慣れる
useradd ユーザ追加
useradd [オプション]… ユーザ名
~# useradd testuser1 ~# grep testuser1 /etc/passwd testuser1:x:1001:1001::/home/testuser1:/bin/sh ~#
-m ホームディレクトリを作成する
ユーザ追加に合わせてホームディレクトリも作成します。
~# useradd -m testuser1 ~# grep testuser1 /etc/passwd testuser1:x:1001:1001::/home/testuser1:/bin/sh ~# ls /home | grep testuser1 testuser1 ~#
usermod ユーザアカウント変更
usermod [オプション]… ユーザ名
-l ユーザIDの変更
引数で指定したユーザIDを、
-lで指定したユーザIDに変更します。
ホームディレクトリはそのままです。
~# grep olduser /etc/passwd olduser:x:1001:1001::/home/olduser:/bin/sh ~# usermod -l newuser olduser ~# grep olduser /etc/passwd newuser:x:1001:1001::/home/olduser:/bin/sh ~# grep newuser /etc/passwd newuser:x:1001:1001::/home/olduser:/bin/sh ~#
-G 補助グループの指定
takk~$ sudo usermod -G sudo takk2 takk~$
userdel ユーザ削除
userdel [オプション]… ユーザ名
~# grep testuser1 /etc/passwd testuser1:x:1001:1001::/home/testuser1:/bin/sh ~# userdel testuser1 ~# grep testuser1 /etc/passwd ~#
-r ホームディレクトリ削除
ユーザを削除し、ホームディレクトリも削除します。
ホームディレクトリはユーザIDと同一の名前でないと削除されません。
~# ls /home | grep testuser1 testuser1 ~# userdel -r testuser1 ~# ls /home | grep testuser1 ~#
id uid/gid表示
id [オプション]… [ユーザ]
ユーザIDとユーザが所属するグループを表示します。
takk~$ id uid=1000(takk) gid=1000(takk) groups=1000(takk),27(sudo) takk~$
groupadd グループ追加
groupadd [オプション]… ユーザ名
~# groupadd test1 ~# grep test1 /etc/group test1:x:1002: ~#
groupmod グループ変更
groupmod [オプション]… ユーザ名
-nオプションで新しいグループ名を指定できます。
test1グループを、test2という名前に変更する場合。
~# groupmod -n test2 test1 ~# grep test /etc/group test2:x:1002: ~#
groupdel グループ削除
groupdel ユーザ名
~# groupdel test2 ~# grep test /etc/group ~#
ping ICMP ECHOリクエスト
ping [オプション]… ホスト
ICMPエコー要求を送って、レスポンスを確認するコマンドです。
takk~$ ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.015 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.036 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.031 ms ^C --- 127.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 82ms rtt min/avg/max/mdev = 0.015/0.028/0.036/0.010 ms takk~$
-c パケット数を指定
takk~$ ping -c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.016 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.032 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 31ms rtt min/avg/max/mdev = 0.016/0.024/0.032/0.008 ms takk~$
traceroute ホストまでのルートパケットトレース
traceroute [オプション]… ホスト
takk~$ traceroute yahoo.co.jp traceroute to yahoo.co.jp (183.79.135.206), 30 hops max, 60 byte packets 1 v133-130-90-3.a01f.g.tyo1.static.cnode.io (133.130.90.3) 1.007 ms 1.032 ms 1.176 ms 2 g-o-4eb-a13-4-v-712.interq.or.jp (157.7.41.129) 3.864 ms 3.992 ms 4.097 ms 3 unused-133-130-013-013.interq.or.jp (133.130.13.13) 0.906 ms 0.902 ms 0.898 ms 4 unused-133-130-012-034.interq.or.jp (133.130.12.34) 0.885 ms 0.879 ms 1.079 ms 5 218.100.6.16 (218.100.6.16) 1.753 ms 1.746 ms 1.775 ms 6 * * * 7 101.102.204.246 (101.102.204.246) 7.650 ms 7.642 ms 7.634 ms 8 124.83.228.54 (124.83.228.54) 7.431 ms 7.734 ms 7.702 ms 9 124.83.252.170 (124.83.252.170) 14.081 ms 14.080 ms 14.067 ms 10 114.111.64.202 (114.111.64.202) 13.572 ms 13.588 ms 13.559 ms 11 * * * 〜省略〜 30 * * * takk~$
ip ネットワーク関連コマンド
ip [オプション]… オブジェクト [コマンド]
takk~$ ip addr 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 02:01:85:82:5a:96 brd ff:ff:ff:ff:ff:ff inet 133.130.90.150/23 brd 133.130.91.255 scope global dynamic eth0 valid_lft 83979sec preferred_lft 83979sec inet6 2400:8500:1301:740:133:130:90:150/128 scope global valid_lft forever preferred_lft forever inet6 fe80::1:85ff:fe82:5a96/64 scope link valid_lft forever preferred_lft forever takk~$
rsync リモートファイルコピー
rsync [オプション] SRC… [DEST]
ローカルでもリモートでも使えるコピーコマンドです。
ローカルファイルコピー
takk~$ ls -l total 4 -rw-r--r-- 1 takk takk 6 Jun 2 23:24 file1.txt takk~$ rsync file1.txt file2.txt takk~$ cmp *.txt takk~$
リモートファイルコピー
takk~$ rsync file1.txt takk@コピー先アドレス:/home/takk/ takk~$
11. マニュアル
man
man [オプション] コマンド名
基本はコマンド名だけ指定すればマニュアルが読めます。
takk~$ man ls
関連記事はコチラ
マニュアル(man)のセクション番号
コメント