相手の知らないLinuxコマンドを打つとビックリされる
自分の中では普通の知識になってたけど、その知識が無い人が自分がコマンド打つのを見ると
「え、そのコマンド達はどこで覚えたん?」
とか
「その知識はいつ習得したん?」
ってビックリされながら言われる.もはやお約束レベルで言われる.
自分の常用するPCにUbuntu突っ込んで使っていたり、
VPSサーバーとか契約して色々試している時に分からないから調べて、何回か使う内に覚えた程度の事だけど
世間一般ではサーバーを建てる方が少数派で、こういうコマンドとか知識はあまり無いのが一般的なんだろな.
ましてやLinuxをメインのPCとして使うのもマレなんだろう.まぁMacも使ってはいるけど.
つまりは...
自分があたり前と思っていても、普通は基本知らない
って時も往々にしてある.って事だ.
そして多分Qiitaのユーザーでも「へぇ〜、そういうコマンドがあるんか!」と言う人は少なくないと思う.
...Qiitaを使う人の中で、どれだけの人がLinuxのコマンドや知識を持ってるのやか...気になる...
Qiitaだけでなく、GitHubを使っている人は、どれだけLinuxのコマンドやツールの知識があるのだろう...
話が逸れた.
何が言いたいかと言うと
ビックリされたコマンドを公開していけば結構色々な人の助けになるかも?
って事.
なんで色々とメモしていきます
まぁどんどん増えていくだろうから、増えたらどんどん別の記事として書いていこうかな.
大体1つの記事に10〜15コマンドを目安として考えてます.
あと,ここでは「詳しい使い方」というよりはビックリされたツールやコマンドのオプションとかについてツラツラと書いていくつもりなので,詳しい説明はまた別の機会に.
何か「これ説明してくれ!」とかあったらコメントお願いします.
ちなみに "Bash" ベースの話です
tcsh とか zsh を使ってるとまたちょっと違うかも
ってことで ビックリメモその1
man
man コマンドは Linux コマンドに関する使い方を表示してくれるコマンド.
これは学校の授業で学んだ.Google先生に頼る事も多いけど、基本的なコマンドの確認ならmanコマンドもよく使う.
(とか書いた後に調べたら 6 回しか使ってなかった...)
似たようなコマンドに "info" ってコマンドもあったりするけど、 "man" コマンドの方
ちなみに man は "MANual" の略.読み方は普通に 「マン」.
何も考えずに「マンコマンド」って言ったら「マンコマンドってwww おまww あぶないなww」って言われたけど、
やましい気持は一切ありませんはい.そんなのやましいとか言うやつがやm...いえ、なんでも無いですはい.
使い方は簡単で、例えば man コマンドの man を見たければ
$ man man
MAN(1) Manual pager utils MAN(1)
NAME
man - an interface to the on-line reference manuals
SYNOPSIS
man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-m system[,...]] [-M path] [-S list] [-e extension]
[-i|-I] [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation]
[--no-justification] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ...
man -k [apropos options] regexp ...
man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
man -f [whatis options] page ...
man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string]
[-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ...
man -w|-W [-C file] [-d] [-D] page ...
man -c [-C file] [-d] [-D] page ...
man [-?V]
DESCRIPTION
man is the system's manual pager. Each page argument given to man is normally the name of a program, utility or function. The manual
page associated with each of these arguments is then found and displayed. A section, if provided, will direct man to look only in
that section of the manual. The default action is to search in all of the available sections following a pre-defined order ("1 n l 8
3 2 3posix 3pm 3perl 5 4 9 6 7" by default, unless overridden by the SECTION directive in /etc/manpath.config), and to show only the
first page found, even if page exists in several sections.
みたいな感じで説明文が表示される.この後に Option の説明とかが来る.
説明文が詳しく書いてあるか否かは「開発者がどこまで man コマンドを丁寧に書いてくれているか」によるので、あまり為になる情報が無い場合もあるけど,昔からあるコマンドに関しては結構丁寧に書いてあるので、一度覗くと言いかも.
ちなみにこのサンプルは英語だけど、環境設定によっては日本語で表示される.
-a option
コメントを頂いたので引用
manコマンドについては-aオプションも便利ですね。
環境に依存せず、全てのマニュアルページを表示(それこそ和英からPOSIXベースまで)してくれます。
との事.
全てのマニュアルページと言われてもピンと来ないかもしれないけど,man には「セクション」という考え方があり,同じ名前で複数のマニュアルが存在する場合がある.その全てが表示されるという事だ. "-a" は "all" という意味だと思う.
ネックとしては閉じたい時にq連打しないといけないことでしょうか。
これについても綺麗な抜け方を知ってる人が居るかもしれませんけど。
と書かれていたけど,自分のPCで試したところ,
da0shi@qiita [~]$ man -a man
--Man-- 次は: man(1) [ 閲覧 (return) | スキップ (Ctrl-D) | 終了 (Ctrl-C) ]
--Man-- 次は: man(7) [ 閲覧 (return) | スキップ (Ctrl-D) | 終了 (Ctrl-C) ]
<Ctrl-C>
da0shi@qiita [~]$
と丁寧な誘導が出てきた.
man のバージョンやOS (MacOSX と Linux系 では結構違う事がある) によって違うのかもしれない.
あとでMacでも試してみます.
ちなみにバージョンとOSの情報は以下の通り
da0shi@qiita [~]$ man --version
man 2.6.7.1
da0shi@qiita [~]$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
scp
scp ってのは
The SCP Foundation
Secure, Contain, Protect
という団体によって保護、管理、研究されている所謂 UMA の総称.
団体のホームページ: http://www.scp-wiki.net
...ってのがGoogle検索のトップに来たけど、それとは全く関係無くて
「リモート上のコンピューターとのファイルのやりとり」を行なうためのコマンド.
man コマンドで確認すると名前の所に
$ man scp
...略...
NAME
scp — secure copy (remote file copy program)
...略...
とある."ssh" と呼ばれる通信方式を採用する事によって、セキュリティ的に強化されているので "Secure" と名前が付いているとの事.
Wikipedia曰く
「元々は rcp (Remote CoPy) と呼ばれるコマンドをセキュリティ的に強化したバージョンのツールで、使い方は rcp とほぼ同様」
との事.まぁ rcp 自体今ではあまり見かけないのでピンと来ないと思う.自分は "cp" コマンドと大体同じ感覚で使っている.
基本的な使い方は cp コマンドと同じように
$ scp {コピー元} {コピー先}
とする事でファイルのやりとりをする.
ただし、リモートのサーバーとファイルをやり取りする際には指定されたフォーマットに沿って書かないとやりとりができない.
そのフォーマットは以下の通り.
# リモートにアップロードする場合
$ scp {コピーする元のファイル} {リモートのユーザー名}@{リモートのホスト名}:{コピーする先のフォルダ}
# リモートからダウンロードする場合
$ scp {リモートのユーザー名}@{リモートのホスト名}:{コピーする元のファイル} {コピーする先のフォルダ}
この ":" が以外と重要で、忘れるとただの "cp" コマンドと何ら変わらなくなるので注意.
screen
コメント頂いたので追記.
下のコメントから引用させてもらうと
サーバー上に仮想端末を起動するので、クライアントからの接続が切れてもいつでもそのセッションに戻れる。
というものですが、意外と知らない人がいるのかもしれません。
役に立つ場面としては、
* 長い処理で接続が切れるのが不安な時(接続が切れても処理は続きます)
* 週末や、仕事時間外の空き時間に、重いデータファイルをダウンロードさせておきたい。
などでしょうか
というツール←
ただ,このツールはデフォルトでサーバーに入っているわけでは無い(入ってるサーバーもあるかも知れないけど,期待はできない)ので,自分でインストールする必要がある.
また,ただ仮想端末を起動するだけでなく,画面の分割やタブ機能等がついてたりする.
リモートサーバーに入った状態でタブ機能を使うと一々複数ターミナルを起動してそれぞれでログインといった事をしなくて済むので結構楽
最近では tmux
という screen
の進化系(?)のツールもある.
ls -h -F
これは一般的な ls
コマンドだけど,案外「あ,こんなのあるんか」みたいな事を言われたりするオプション.
-h はどうやら "human readable" の略らしい.使った時の挙動は下のを見てもらえれば大体検討はつくと思う.
da0shi@qiita [fuelphp] $ ls -l
-rw-rw-r-- da0shi 60258 CHANGELOG.md
-rw-rw-r-- da0shi 6526 CONTRIBUTING.md
-rw-rw-r-- da0shi 1069 LICENSE.md
-rw-r--r-- da0shi 67 README.md
-rw-rw-r-- da0shi 3243 TESTING.md
-rw-rw-r-- da0shi 1088 composer.json
-rw-r--r-- da0shi 5743 composer.lock
-rwxr-xr-x da0shi 963760 composer.phar
drwxr-xr-x da0shi 102 data
drwxrwxr-x da0shi 612 docs
drwxrwxr-x da0shi 272 fuel
-rw-rw-r-- da0shi 1451 oil
drwxrwxr-x da0shi 204 public
da0shi@qiita [fuelphp] $ ls -lh
-rw-rw-r-- da0shi 59K CHANGELOG.md
-rw-rw-r-- da0shi 6.4K CONTRIBUTING.md
-rw-rw-r-- da0shi 1.0K LICENSE.md
-rw-r--r-- da0shi 67B README.md
-rw-rw-r-- da0shi 3.2K TESTING.md
-rw-rw-r-- da0shi 1.1K composer.json
-rw-r--r-- da0shi 5.6K composer.lock
-rwxr-xr-x da0shi 941K composer.phar
drwxr-xr-x da0shi 102B data
drwxrwxr-x da0shi 612B docs
drwxrwxr-x da0shi 272B fuel
-rw-rw-r-- da0shi 1.4K oil
drwxrwxr-x da0shi 204B public
さらに -F オプションを加えると以下のようになる
da0shi@qiita [fuelphp] $ cat ls-lhF
-rw-rw-r-- da0shi 59K CHANGELOG.md
-rw-rw-r-- da0shi 6.4K CONTRIBUTING.md
-rw-rw-r-- da0shi 1.0K LICENSE.md
-rw-r--r-- da0shi 67B README.md
-rw-rw-r-- da0shi 3.2K TESTING.md
-rw-rw-r-- da0shi 1.1K composer.json
-rw-r--r-- da0shi 5.6K composer.lock
-rwxr-xr-x da0shi 941K composer.phar*
drwxr-xr-x da0shi 102B data/
drwxrwxr-x da0shi 612B docs/
drwxrwxr-x da0shi 272B fuel/
-rw-r--r-- da0shi 0B ls-lhF
-rw-rw-r-- da0shi 1.4K oil
drwxrwxr-x da0shi 204B public/
若干分かり辛いかもしれないけど,ファイルの種類によって末尾の記号が変わっている.
- 普通のファイルは何も無し
- 実行権限がある「ファイル」の末尾には *
- ディレクトリの末尾には /
- ここには無いけどシンボリックリンクの末尾には __@__
といった感じにそれぞれ付与される.
何故 "-F" なのかの説明は man では見当たらなかったけど多分 "File type" みたいな意味合いなんだろうなと思っている.
tar
結構使われる割にオプションに対する知識無しで形だけで覚えてそうなコマンド
準備中...
ps
準備中...
grep
準備中...
パイプ (|)
準備中...
リダイレクト (>)
準備中...
とりあえずこの辺で.