- 投稿日:2021-01-18T22:39:23+09:00
【HTB: Mirai】Write-Up+備忘録
はじめに
初投稿です。
趣味で勉強した内容を学習のためにまとめていきます。
今回は HackTheBox の Retired Machine [Mirai] のWriteUp です。自己紹介
かしわばです。
都内でテクニカルサポートをやってます。自作 OS やセキュリティに興味があり勉強中です。
趣味で HackTheBox をやってます。
HackTheBox のランクは Hackerです。
発言は個人のもの。
(一度言ってみたかった!)マシンの概要
- プラットフォーム:Linux
- 難易度:Easy (かなり簡単な部類の Easy )
- 必要なテクニック / 知識
- nmap / gobuster などを用いた探索
- IoT マルウェアの攻撃手法
- 権限昇格のための内部探索手法
- Linux のデバイス管理について
このマシンの攻略で新たに学習した項目
- IoT マルウェアの概要および攻撃手法について
- Linux のデバイスファイルについて
- フラッシュメモリから削除されたデータのサルベージ方法
マシン攻略
探索
さっそくマシン攻略を始めていきます。
まずはいつも通りポートスキャンから試していきます。consoleTARGET=10.10.10.48 && expose TARGET nmap -sV -sC -T4 $TARGET| tee nmap1.txtこちらのコマンドで、次のような出力が得られました。
80 番ポートが開いているので、とりあえずブラウザアクセスしてみます。
404 が返ってきたので、今度はこの WEB ページに対して探索を行います。
gobuster での探索を試みる前に、とりあえずありがちなファイルパスでアクセス可能か試してみました。/robots.txt
/admin
/loginどうやら
/admin
でヒットしたようで、 Pi-hole というアプリケーションの管理コンソール画面が開きました。Pi-hole とは?
この Pi-hole というアプリケーションは初めて見たものでしたので、とりあえずドキュメントを眺めてみます。
The Pi-hole® is a DNS sinkhole that protects your devices from unwanted content, without installing any client-side software.
Overview of Pi-hole - Pi-hole documentation上記のとおり、 Pi-hole は、不要なコンテンツからデバイスを保護する DNS シンクホールとして利用できるアプリケーションのようです。(DNS シンクホールは、問い合わせに対してわざと間違った応答を返す DSN のこと)
Pi-hole という名前ですが、 Rasberry-pi だけでなく、Debian や Docker コンテナなど、様々なプラットフォームにデプロイできるようです。
同じくドキュメントより、 Pi-hole で使用されている技術について特定ができました。
Pi-hole being a advertising-aware DNS/Web server,
makes use of the following technologies:
- dnsmasq - a lightweight DNS and DHCP server
- curl - A command-line tool for transferring data with URL syntax
- lighttpd - web server designed and optimized for high performance
- php - a popular general-purpose web scripting language
- AdminLTE Dashboard - premium admin control panel based on Bootstrap 3.x
- sqlite3 - SQL Database engine
Pi-hole Origins - Pi-hole documentationいくつか気になる点はありましたが、脆弱性の報告数がトップクラスで知られる PHP で実装されているようですので、ここを起点に侵入できる穴がないか探っていこうと思います。
侵入
脆弱性の調査
さて、 Pi-hole の脆弱性を起点にマシンに侵入できる経路がないか探していきます。
まず、管理コンソールから Pi-hole のバージョンがPi-hole Version v3.1.4
であることを確認しました。上記のバージョンに該当する脆弱性について探したところ、こちらの 2 つが使えそうに感じましたが、残念ながらどちらもまず管理コンソールにログインできる認証情報を取得する必要がありました。
(※メタ的な話ですが、このマシンが作られたのは 2017 年なので、CVE-2020-xxx は確実に想定解ではなさそう。)
- CVE-2020-11108
- 認証が必要
- ブロックリストの脆弱性を利用した RCE の脆弱性
- CVE-2020-8816
- 認証が必要
- 細工されたDHCP静的リースを介して行われる RCE の脆弱性
認証情報の取得
とりあえず
Pi-hole Password
などのワードで Google 検索を試してみました。
すると、ローカル環境にログインして、次のコマンドを実行することで、 Pi-hole のパスワードをリセットできることがわかりました。bashsudo pihole -a -pまた、いくつかの Pi-hole の設定方法の書かれた記事を読むと、 Pi-hole をインストールする Rasberry-pi に初期パスワード
raspberry
でログインしましょうという記載がありました。ここで、このマシンのタイトルが
Mirai
であることにようやく気付きました笑Mirai とは
Mirai とは、IoT 機器に感染し、巨大なボットネットを形成するマルウェアです。
ネットワークのスキャンを行い、発見された IoT に対して侵入します。Mirai は、多くの IoT デバイスにおいて、認証情報が初期設定のまま放置されているという穴を突く感染の容易さ、ソースコードが容易に入手可能であったことなど、様々な要因から、亜種も含めて大いに流行しました。
Mirai の脅威としては、 2016 年に 100Gbps 超の DDoS 攻撃が複数回行われたことで米国の DNS サービスが停止し、 Twitter などのサービスに影響が発生したことなどが知られています。初期設定の認証情報の悪用などによって IoT デバイスが感染すると、攻撃者の C&C サーバからの遠隔操作によって、ボットとしてマルウェアの拡散に利用されたり、 DDoS 攻撃などに利用されたする場合があります。
- IPA:顕在化したIoTのセキュリティ脅威とその対策
- 史上最悪規模のDDoS攻撃 「Mirai」まん延、なぜ? (1/4) - ITmedia NEWS
- Mirai流行の背景、「IoT機器の初期設定」に主因 | IoTのセキュリティ情報なら「iot security」
- 「Mirai」ソースコード徹底解剖-その仕組みと対策を探る (1/4):大規模DDoS攻撃を引き起こしたIoTボットネット - @IT
また、Mirai のスキャナーのソースコードを読むと、 IoT デバイスの初期設定の認証情報がハードコーディングされており、非常に興味深いです。
中には、東芝のネットワークカメラや、パナソニックのプリンタを狙っていると思われる認証情報も含まれています。他にも、Mirai ではありませんが、 Rasberry-pi を狙った IoT マルウェアも複数確認されております。
Linux.MulDrop.14 はその一例で、 Rasberry-pi 用 OS である Rasbian の初期設定の認証情報を狙っています。Raspberry Piの公式ディストリーである「Rasbian」はセットアップした直後だと、ユーザー名が「pi」、パスワードが「raspberry」でSSH接続できるようになっています。
初期パスワードを変更していない脆弱な「Raspberry Pi」を狙う新たなIoTウイルス「Linux.MulDrop.14」が登場!感染後に暗号通貨のマイニングを実施 - ライブドアニュースMirai などの IoT マルウェアへの対策
さて、一応僕はサイバーセキュリティの防御側の立場から、攻撃者の思考を知るためにマシン攻略を行ってますので、これらの IoT マルウェアに対する対策も簡単に検討してみます。
(※ あくまで個人の考えですのでご留意ください)ぱっと思いつくものだと、
IoT デバイスのパスワードを工場出荷時のままにしない
というのは有効だと思います。
実際に Rasberry-pi も、公式に初期設定の認証情報を変更するようアナウンスしています。とはいえ実際に十分な強度のパスワードを設定している人がどれくらいいるのかは疑問です。
なので、OS が初めから起動時に認証情報を設定するようにデザインしてもいいのではとは思ってます。
実際に Rasberry-pi 用の Ubuntu をインストールすると、起動時に認証情報の設定が必要になります。あとは、
不要なデバイスをネットワークに公開しない / 不要なポートを公開しない
というのも当然ながら必要かと思います。
Mirai などのマルウェアは、結構ネットワークカメラデバイスを狙っているものが多いように感じます。防犯用のカメラなど、外出先から映像を監視するために一般家庭でもポート開放を行うケースが結構あるみたいですね。
自由なインターネットは恐ろしいので、とてもじゃないですが自宅のネットワークに外部から接続可能な状態にはしたくないですね…。上記以外にも、
IoT デバイスをきちんと更新して脆弱性対策を行う
とか、出口対策として、特定の宛先以外には情報を送信しないように設定する
とかが考えられますね。
ただ、IoT カメラデバイスなど、メーカーによっては、脆弱性が公表されても全然パッチを提供しないケースとかも見たことがあるので、バージョンアップが十分な脆弱性対策になるかは若干疑問です。今度こそ侵入
さて、少し脱線しましたが、マシン攻略に戻ります。
Pi-hole が動いていますので、動作環境は Rasberry-pi の可能性があります。
(そして、マシンのチャレンジ名は Mirai ・・・)というわけで、 Rasbian の初期パスワードでの SSH を試みます。
bashssh pi@10.10.10.48 #パスワードに「raspberry」を入力
ログインできました!
やっぱり Rasberry-pi だったんだ!確認してみると、次のような出力が取れました。
consolepi@raspberrypi:~ $ uname -a Linux raspberrypi 3.16.0-4-686-pae #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) i686 GNU/Linuxともかく、これで user を取得できました。
内部探索
次に、root を取得するため、権限昇格が可能な穴を探していきます。
まずは、探索用の Linpeas ファイルを SCP でマシンに転送し、実行結果ファイルをローカルに取得します。bash(ローカル)scp /home/kali/Hacking/Knowledge/Exploits/linPEAS/linpeas.sh pi@$TARGET:~/
bash(マシン)sh linpeas.sh | tee linpeas_result.txt
bash(ローカル)scp pi@$TARGET:~/linpeas_result.txt ./
出力結果を見たところ、以下の出力が確認できました。
ガバガバ権限です。
sudo -l
の結果が上記のような出力の場合、ユーザはsudo <コマンド>
をパスワードなしで実行できます。
- sudo のパスワードを入力なしで使うには - Qiitaまさかと思って調べてみたところ、やっぱり Rasbian は初期設定で sudo にパスワードが設定されていないようです。
つまり、初期設定の Rasbian は、SSH 接続も権限昇格もし放題ってことですね。もし Rasbian をサーバ用途で使う場合は注意が必要そうですね。
- RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita権限昇格
というわけで、サクッと root 権限を取得できました。
bashsudo su
これでクリア!
と、思いきや、もう少しだけ続きます。root.txt を開いてみると、フラグではなく次のテキストが書かれていました。
どうやら本物の root.txt は失われてしまったようです。root@raspberrypi:~# cd /root/ root@raspberrypi:~# cat root.txt I lost my original root.txt! I think I may have a backup on my USB stick...でもご安心。
どうやらバックアップを USB に保存しているそうです。もう一度内部探索
ここから、バックアップされたデータを取得するためにもう一度探索を行います。
とはいえ、 USB を探すのなんて楽勝です。
Linux に一度でも USB を接続したことがあれば、/media
配下にマウントされることが多いことがわかるかと思います。中身を見てみると、やはりありました。
しかし、どうやらうっかりデータを削除してしまったようです…。James はうっかり屋さんですね。
root@raspberrypi:~# cd /media root@raspberrypi:/media# ls usbstick root@raspberrypi:/media# cd usbstick/ root@raspberrypi:/media/usbstick# ls damnit.txt lost+found root@raspberrypi:/media/usbstick# cat damnit.txt Damnit! Sorry man I accidentally deleted your files off the USB stick. Do you know if there is any way to get them back? -Jamesうっかり屋の James の尻ぬぐいもといフォローのため、何とかして失われた root.txt の中のフラグをサルベージしたいと思います。
しかし、何を手掛かりに探せばいいのでしょうか?
ここで考えるべきは、「Linux のデバイスマウントの仕組み」です。
余談ですが Linux のカーネルがどんな動きをするのかについては、こちらの本が入門的で非常に参考になります。Linux のデバイスマウントの仕組み
Linux(というか Unix 系) は接続されたデバイスをすべて「デバイスファイル」として抽象化して管理しています。
参考: デバイスファイル (device file)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典デバイスドライバは、Linux カーネルによって「デバイスファイル」として抽象化され、慣例的な名前(sda, sdbなど)を付けられたのちに
/dev
配下に格納されます。
OS 上のアプリケーションは、この「デバイスファイル」を参照することで、ハードディスクや USB、マウスなどのデバイスを操作するわけです。デバイスファイルは、主に「キャラクター型」と「ブロック型」に分類され、ハードディスクなどの固定長のデータは、「ブロック型」として保存されます。
参考:Linuxのファイルの種類 - Qiitaroot フラグ取得
今回のターゲットの USB もこちらの「ブロック型」のデバイスファイルとして保存されているはずです。
OS が利用できるブロックデバイスは、lsblk
で出力可能です。root@raspberrypi:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1.3G 0 part /lib/live/mount/persistence/sda1 └─sda2 8:2 0 8.7G 0 part /lib/live/mount/persistence/sda2 sdb 8:16 0 10M 0 disk /media/usbstick sr0 11:0 1 1024M 0 rom loop0 7:0 0 1.2G 1 loop /lib/live/mount/rootfs/filesystem.squashfsフラグの格納されている
/media/usbstick
はsdb
というデバイスファイルとして扱われていることがわかりました。
最後に、ここからデータを取り出していきます。HackTheBox のフラグはテキストとして保存されているので、正直
strings /dev/sdb
だけでも簡単に取得できます。
とはいえそれではあまりに面白くないので、/dev/sdb
の中身を見てみたいと思います。
lsblk
の結果から、/dev/sdb
のサイズは 10MB とわかっていますので、末尾のアドレスは0xa00000
になります。
hexdump
で出力してあげます。bashroot@raspberrypi:~# hexdump -C /dev/sdb 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 0005b800 02 00 00 00 0c 00 01 02 2e 00 00 00 02 00 00 00 |................| 0005b810 0c 00 02 02 2e 2e 00 00 0b 00 00 00 24 00 0a 02 |............$...| 0005b820 6c 6f 73 74 2b 66 6f 75 6e 64 00 00 0c 00 00 00 |lost+found......| 0005b830 10 00 08 01 72 6f 6f 74 2e 74 78 74 0d 00 00 00 |....root.txt....| 0005b840 c4 03 0a 01 64 61 6d 6e 69 74 2e 74 78 74 00 00 |....damnit.txt..| 0005b850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * * Flag がこの辺にある * 0080a820 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0080a830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 0080ac00 44 61 6d 6e 69 74 21 20 53 6f 72 72 79 20 6d 61 |Damnit! Sorry ma| 0080ac10 6e 20 49 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 |n I accidentally| 0080ac20 20 64 65 6c 65 74 65 64 20 79 6f 75 72 20 66 69 | deleted your fi| 0080ac30 6c 65 73 20 6f 66 66 20 74 68 65 20 55 53 42 20 |les off the USB | 0080ac40 73 74 69 63 6b 2e 0a 44 6f 20 79 6f 75 20 6b 6e |stick..Do you kn| 0080ac50 6f 77 20 69 66 20 74 68 65 72 65 20 69 73 20 61 |ow if there is a| 0080ac60 6e 79 20 77 61 79 20 74 6f 20 67 65 74 20 74 68 |ny way to get th| 0080ac70 65 6d 20 62 61 63 6b 3f 0a 0a 2d 4a 61 6d 65 73 |em back?..-James| 0080ac80 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 0080ac90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00a00000正直勉強不足で、USB メモリなどのフラッシュディスクのアドレスマップはよくわかってないですが、後半のブロックに実際のデータが格納されていそうなことはわかりました。
つまり、James が USB メモリから root.txt を削除した段階では、root.txt を参照するための情報が削除されたにすぎず、実データは、そのアドレスに別のデータが上書きされるまで残り続けるというのが、このマシンの root を取得するための方法だったと考えられます。
まとめ
さて、これで Mirai の攻略に成功しました!
今回のマシン攻略を通して得た防御側の知見としては以下のものがあるかと思います。
- 初期設定の認証情報は狙われている
- sudo 権限は絞りましょう
- 外部から SSH 接続をさせない(SSH を公開するときは PW 認証ではなく秘密鍵を使う)
- メディアデバイスを破棄する際にデータを削除する場合は上書き削除すること
WriteUp は学んだことの整理に有益なのでまた書きたいですね。
それでは。
- 投稿日:2021-01-18T17:20:57+09:00
プロセス(群)のCPU使用率を制御する (cgroup使用)
フルコードは以下。
cgroup によって、プロセス(群)のCPU使用率を制御するBashプログラム - sun610.web.fc2.comポイントは
- プロセス群にも対応できる(総体としてのCPU使用率制御が可能)
- 投稿日:2021-01-18T15:06:51+09:00
行末コード(CR)[^M]を削除する方法
Carriage Returns
\r
^M
を削除する方法1つのファイルのみ
sed -i 's/\r$//g' <filename>カレントディレクトリ配下の全てのファイル
sed -i 's/\r$//g' $(find . -type f)参考
https://stackoverflow.com/questions/800030/remove-carriage-return-in-unix
指摘箇所修正しました。
- 投稿日:2021-01-18T11:44:47+09:00
[Linux / Ubuntu] GPUの種類(フルネーム)を確認する【名前が途切れる人向け】
nvidia-smi
コマンドだと名前が途中で途切れて確認できない事態が発生したので、GPUの名前をフルで確認する方法をメモ一般的な確認方法
nvidia-smi
コマンドです。$ nvidia-smi Mon Jan 18 11:21:55 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce RTX 208... On | 00000000:01:00.0 Off | N/A | | 19% 18C P8 20W / 250W | 726MiB / 11019MiB | 1% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1347 G /usr/lib/xorg/Xorg 284MiB | | 0 1583 G /usr/bin/gnome-shell 220MiB | | 0 2505 G ...AAAAAAAAAAAACAAAAAAAAAA= --shared-files 168MiB | | 0 5053 G ...-token=85BF5FDE73E6204E060ECC896FA5C999 49MiB | +-----------------------------------------------------------------------------+
……GeForce RTX 2080なのかTiなのかがわからん!
GPUのフルネームを確認する
$ nvidia-smi --query-gpu=name --format=csvです。
$ nvidia-smi --query-gpu=name --format=csv name GeForce RTX 2080 Tiという風に、GPUのフルネームがわかります。
コメント
2080 Tiともなると、YOLOの学習もそれなりに早いですよ
- 投稿日:2021-01-18T11:03:30+09:00
Linuxコマンド【ファイル操作】
はじめに
学習用のメモになります。
*[]・・・任意
<>・・・絶対テキストファイルとバイナリファイル
テキストファイル
テキストファイルとは
文字列が書かれたファイル
のこと
- テキストファイルは文字コードで定められた文字だけが並んで格納される
- 文字コードは、文字をコンピュータで処理したり通信したりするために、文字の種類に数値を割り振ったもの
- 例:Aは1000001、Bは1000010、など数値を割り当てている
- Linuxではテキストファイルはとても大切です。OSの関わるほとんどの設定情報をテキストファイルとして管理している
バイナリファイル
バイナリファイルとは、
画像ファイルや音声ファイル、実行ファイル
など
- 文字コード以外の数値も含むようなファイルをバイナリファイルと呼ぶ
- テキスト以外のファイルがバイナリファイルという認識でOK
- catコマンドなどでバイナリファイルが文字化けするのは、無理矢理テキストファイルとして解釈しようとして、文字コードに該当した数値をその文字に置き換えて表示したので意味不明の文字列になったため
1.catコマンド
ファイルの中身を表示する。
cat [オプション]<ファイル名>オプションをつけないで使用することが多い。
2.lessコマンド
ファイルの中身をスクロール表示するコマンド。
長いファイルの中身を見る時に使用。less [オプション]<ファイル名>オプションをつけないで使用することが多い。
スクロール操作
コマンド 内容 スペースキー、f 1画面上にスクロール b 1画面下にスクロール j 1行下にスクロール k 1行上にスクロール q lessコマンドを終了 検索操作
コマンド 内容 /<文字列> 下方向に向かって検索 ?<文字列> 上方向に向かって検索 n 次の検索結果に移動 N 前の検索結果に移動 3.touchコマンド
空のファイルを作成するコマンド
touch <新規ファイル名>ファイル名が存在していない時は、空のファイルを作成して、存在している時はタイムスタンプを更新する。
4.rmコマンド
ファイル・ディレクトリの削除をするコマンド
rm [オプション]<削除するファイル名>注意:rmコマンドを実行すると、ゴミ箱ではなく、本当に削除されてしまうので本当に消していいのか確認してから実行する。
よく使うオプション
1.-r
ディレクトリも合わせて削除する
rm -r dir注意:ディレクトリの中のファイルやディレクトリもまとめて削除されるので注意。
2.-f
ファイルを削除する際に警告文を表示しない.
あまりオススメしないコマンドrm -f file3.-i
ファイルの削除前に確認する
rm -i file5.mvコマンド
ファイルの移動、ファイル名を変更するコマンド
#具体例 mkdir dir //dirディレクトリ作成 touch file //空のファイルを作成 ##ファイル名変更 mv file file1 ##ファイルを移動 mv file1 dir/ //file1をdirディレクトリのなかに移動*選択するものがファイルかディレクトリかで挙動が変わってくる
オプション
-i
上書きする前に確認
mv -i file file16.cpコマンド
ファイル・ディレクトリをコピーするコマンド
cp [オプション]<コピー元>...<コピー先> ##具体例 #ファイルをコピー cp file new file #ファイルをディレクトリないにコピー cp file dir注意:コピー先のファイルがすでにあると上書きするので気をつけよう
オプション
1.-i
上書きする前に確認
cp -i file new_file2.-r
ディレクトリをコピーする
cp -r dir new_dir7.findコマンド
ファイルを検索するコマンド
find <検索開始ディレクトリ><検索条件><検索アクション> #具体例 find . -name README.md -print
- 投稿日:2021-01-18T07:48:34+09:00
半年前の自分に教えたいLinuxの話
概要
最近LPICレベル1の取得に向けて勉強を始めました。
今回は,半年前(入社して4カ月)の私がこれを知っていたら良かったというテーマで書いていますLinuxはOS?
Linuxは何かとWindowsやmacOSと並べて話に出てくることが多いため,当時はOSの一つと思い込んでいました
厳密な定義の話をすると,狭義の意味でLinuxとはカーネル(OSの中核部分)であり,メモリ管理や入出力管理などOSにとって,特に重要な機能を担う部分です
一方で広義の意味でOSとしてのLinuxを指すこともあります
「Linux」という言葉で話すときは,どういうものを指して,その言葉を使っているのかを考える必要があります
所感ですが,「Linux」という言葉が出るときはOSの(広義)の意味で使っていることが多いように感じますLinuxディストリビューションってなんだ
Linuxディストリビューションとは,Linux(カーネル)にライブラリなどを追加して,UNIXに似たような動きをするようにされたOSのことを指します。
WindowsやmacOSと並べて話されるのは,このLinuxディストリビューションのことを指しています。
代表的なものにRed Hat社が開発するRed Hat系ディストリビューション(CentOSなど)やDebian Projectが開発するDebian系ディストリビューション(ubuntuなど)があります
以降はLinuxディストリビューションを総称して,LinuxOSと書きますコマンドやオプションが覚えられないとき
LinuxOSの操作はCUI(Command Line Interface)が基本であり,マウスなどを使ったGUI(Graphical User Interface)による操作に慣れている人にとっては,少々難しいです。
たとえば,ディレクトリ内のファイル一覧を見るにはlsコマンドを使います
LinuxOSをうまく操作するには,lsのようなコマンドやそれらの動作に条件を付けるオプションを覚える必要がありますが,なかなか覚えられなかったりします
そんなときにはmanコマンドと--helpオプションが便利です$ man lsNAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . (略)$ ls --help Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is specified. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author with -l, print the author of each file -b, --escape print C-style escapes for nongraphic characters --block-size=SIZE with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below -B, --ignore-backups do not list implied entries ending with ~ -c with -lt: sort by, and show, ctime (time of last modification of file status information); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first -C list entries by columns --color[=WHEN] colorize the output; WHEN can be 'always' (default if omitted), 'auto', or 'never'; more info below -d, --directory list directories themselves, not their contents -D, --dired generate output designed for Emacs' dired mode -f do not sort, enable -aU, disable -ls --color -F, --classify append indicator (one of */=>@|) to entries --file-type likewise, except do not append '*' --format=WORD across -x, commas -m, horizontal -x, long -l, single-column -1, verbose -l, vertical -C --full-time like -l --time-style=full-iso -g like -l, but do not list owner (略)manコマンドや-helpオプションで指定したコマンドの説明やそのコマンドのオプションを表示してくれます
コマンド名やオプションは基本的に動作を示す単語の略であることが多いです
ただの文字列としてコマンドやオプションを覚えるよりも,その意味を知ることでかなり覚えやすくなります例えば,現在の作業ディレクトリを表示するコマンドにpwdコマンドがあります
これをただの,「pwd」として覚えるか「print working directory」の略として覚えるかだと,記憶に残りやすいのは後者だと思いますコマンドの由来はこちらのページで見やすくまとめられています
エイリアス
lsコマンドの -lオプションはディレクトリ内のファイルの権限や所有者を表示してくれるオプションでとても便利なオプションです。
~/testdir# ls test1.txt test2.txt~/testdir# ls -l total 0 -rw-r--r-- 1 root root 0 Jan 14 22:10 test1.txt -rw-r--r-- 1 root root 0 Jan 14 22:10 test2.txtこのようによく使うコマンドにはエイリアス(別名)をつけることで,より簡単に操作を行うことができます
エイリアスをつけるには,aliasコマンドを使います~/testdir# alias ll='ls -l' ~/testdir# ll total 0 -rw-r--r-- 1 root root 0 Jan 14 22:10 test1.txt -rw-r--r-- 1 root root 0 Jan 14 22:10 test2.txtファイルの検索
ファイルの検索にはlocateコマンドが便利です
[root@6f07fde89980 testdir]# ls testFile1.txt testFile2.txt [root@6f07fde89980 testdir]# locate testFile /testdir/testFile1.txt /testdir/testFile2.txt似た動作を示すものにfindコマンドがありますが,locateコマンドの方が高速に検索をすることができます
これはfindコマンドはリアルタイムにファイルの検索を行うのに対し,locateコマンドはファイルパスが格納されたDBに対し,検索をかけるためです
したがって,locateコマンドでは作成直後のファイル(ファイルパスがDBに登録されていないファイル)は検索できないことがあります
ファイルパスのDBを最新にするには,updatedbコマンドを使いますlocateコマンドは,LinuxOSに最初からインストールされていないこともあります
ubuntuでapt-getコマンド,centosではyumコマンドでインストールすることができます# apt-get install mlocate# yum install mlocate