20210118のLinuxに関する記事は6件です。

【HTB: Mirai】Write-Up+備忘録

はじめに

初投稿です。
趣味で勉強した内容を学習のためにまとめていきます。
今回は HackTheBox の Retired Machine [Mirai] のWriteUp です。

自己紹介

かしわばです。
都内でテクニカルサポートをやってます。

自作 OS やセキュリティに興味があり勉強中です。
趣味で HackTheBox をやってます。
HackTheBox のランクは Hackerです。
image.png
発言は個人のもの。
(一度言ってみたかった!)

マシンの概要

  • プラットフォーム:Linux
  • 難易度:Easy (かなり簡単な部類の Easy )
  • 必要なテクニック / 知識
    • nmap / gobuster などを用いた探索
    • IoT マルウェアの攻撃手法
    • 権限昇格のための内部探索手法
    • Linux のデバイス管理について

このマシンの攻略で新たに学習した項目

  • IoT マルウェアの概要および攻撃手法について
  • Linux のデバイスファイルについて
  • フラッシュメモリから削除されたデータのサルベージ方法

マシン攻略

探索

さっそくマシン攻略を始めていきます。
まずはいつも通りポートスキャンから試していきます。

console
TARGET=10.10.10.48 && expose TARGET
nmap -sV -sC -T4 $TARGET| tee nmap1.txt

こちらのコマンドで、次のような出力が得られました。

image.png

80 番ポートが開いているので、とりあえずブラウザアクセスしてみます。

image.png

404 が返ってきたので、今度はこの WEB ページに対して探索を行います。
gobuster での探索を試みる前に、とりあえずありがちなファイルパスでアクセス可能か試してみました。

/robots.txt
/admin
/login

どうやら/adminでヒットしたようで、 Pi-hole というアプリケーションの管理コンソール画面が開きました。

image.png

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 のパスワードをリセットできることがわかりました。

bash
sudo 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 攻撃などに利用されたする場合があります。

また、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 を試みます。

bash
ssh pi@10.10.10.48 #パスワードに「raspberry」を入力

ログインできました!
やっぱり Rasberry-pi だったんだ!

確認してみると、次のような出力が取れました。

console
pi@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 ./

出力結果を見たところ、以下の出力が確認できました。

image.png

ガバガバ権限です。
sudo -l の結果が上記のような出力の場合、ユーザは sudo <コマンド> をパスワードなしで実行できます。
- sudo のパスワードを入力なしで使うには - Qiita

まさかと思って調べてみたところ、やっぱり Rasbian は初期設定で sudo にパスワードが設定されていないようです。
つまり、初期設定の Rasbian は、SSH 接続も権限昇格もし放題ってことですね。

もし Rasbian をサーバ用途で使う場合は注意が必要そうですね。
- RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita

権限昇格

というわけで、サクッと root 権限を取得できました。

bash
sudo 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 のデバイスマウントの仕組み

Linux(というか Unix 系) は接続されたデバイスをすべて「デバイスファイル」として抽象化して管理しています。
参考: デバイスファイル (device file)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

デバイスドライバは、Linux カーネルによって「デバイスファイル」として抽象化され、慣例的な名前(sda, sdbなど)を付けられたのちに/dev 配下に格納されます。
OS 上のアプリケーションは、この「デバイスファイル」を参照することで、ハードディスクや USB、マウスなどのデバイスを操作するわけです。

デバイスファイルは、主に「キャラクター型」と「ブロック型」に分類され、ハードディスクなどの固定長のデータは、「ブロック型」として保存されます。
参考:Linuxのファイルの種類 - Qiita

root フラグ取得

今回のターゲットの 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/usbsticksdb というデバイスファイルとして扱われていることがわかりました。
最後に、ここからデータを取り出していきます。

HackTheBox のフラグはテキストとして保存されているので、正直 strings /dev/sdb だけでも簡単に取得できます。
とはいえそれではあまりに面白くないので、 /dev/sdb の中身を見てみたいと思います。

lsblk の結果から、/dev/sdb のサイズは 10MB とわかっていますので、末尾のアドレスは0xa00000になります。
hexdump で出力してあげます。

bash
root@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 は学んだことの整理に有益なのでまた書きたいですね。
それでは。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プロセス(群)のCPU使用率を制御する (cgroup使用)

フルコードは以下。
cgroup によって、プロセス(群)のCPU使用率を制御するBashプログラム - sun610.web.fc2.com

ポイントは

  • プロセス群にも対応できる(総体としてのCPU使用率制御が可能)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

行末コード(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

指摘箇所修正しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[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の学習もそれなりに早いですよ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 file

3.-i

ファイルの削除前に確認する

rm -i file

5.mvコマンド

ファイルの移動、ファイル名を変更するコマンド

#具体例
mkdir dir   //dirディレクトリ作成
touch file  //空のファイルを作成

##ファイル名変更
mv file file1

##ファイルを移動
mv file1 dir/   //file1をdirディレクトリのなかに移動

*選択するものがファイルかディレクトリかで挙動が変わってくる

オプション

-i

上書きする前に確認

mv -i file file1

6.cpコマンド

ファイル・ディレクトリをコピーするコマンド

cp [オプション]<コピー元>...<コピー先>

##具体例
#ファイルをコピー
cp file new file
#ファイルをディレクトリないにコピー
cp file dir

注意:コピー先のファイルがすでにあると上書きするので気をつけよう

オプション

1.-i

上書きする前に確認

cp -i file new_file

2.-r

ディレクトリをコピーする

cp -r dir new_dir

7.findコマンド

ファイルを検索するコマンド

find <検索開始ディレクトリ><検索条件><検索アクション>

#具体例
find . -name README.md -print
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

半年前の自分に教えたい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 ls
NAME
       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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む