2月3日、株式会社Ancarで社内勉強会を行いました、この記事はその勉強会トピックのおさらいです
「Linuxの基礎からやるぞ!!!」という内容ですので、基礎的な内容であることをご承知おき下さい
各コマンドの実行はmacOSの標準ターミナルを使用しています
おしながき
仮想コンソール
通常、一台の端末に複数の接続を行うことができますが、その際それぞれに仮想コンソール
というものが割り当てられます
それぞれの仮想コンソールにはtty?番
という風に名前が付きます
ttyはTeleTYpewriter(テレタイプライター)
に由来する言葉で、入出力装置を指すようです
ttyを切り替えることで端末内で別画面に切り替えたような動作が実現できます
(現在は複数のコンソール画面が立ち上げられるため、切り替え操作は割愛します)
実際にtty
コマンドを使用して現在使用中の仮想コンソールを確認してみます
$ tty
/dev/ttys000
tty000
を使用していました
今度は別ウィンドウでコンソールを立ち上げtty
を打ってみます
$ tty
/dev/ttys001
それぞれのコンソールに別のttyが割り振られています、なるほど
who
コマンドで見てみます
$ who
yungo console Feb 9 22:56
yungo ttys000 Feb 10 10:16
yungo ttys001 Feb 11 13:46
yungo ttys002 Feb 11 13:47
yungo ttys004 Feb 10 20:01
yungo ttys005 Feb 10 21:14
現在ユーザ名yungo
で5つコンソールを立ち上げていたのですがそれぞれにttyが割り振られていました、なるほどなるほど
(一つ目のconsole
はカーネルみたいですね、間違えてたらご指摘下さい)
で、仮想コンソールで何ができるのか
-
tty1
とtty2
で同一のユーザにログインし、片方でman(マニュアル)
を表示しながら片方で作業 -
tty1
とtty2
でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業 -
tty1
でフリーズした際にtty2
でログインしフリーズしたアプリケーションをkillする -
tty1
で&
をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2
でコマンドをkillし、再度&
をつけて実行する -
tty1
で一般ユーザ、tty2
でrootユーザでそれぞれログインし、アクセス権を使い分ける
などなど
普段は意識せず別ウィンドウでコンソール立ち上げて行う作業ですね(まさにそれが仮想コンソールなのですが)
ttyを指定して出力
$ echo hoge
hoge
echoは通常は自分の端末に返ってきますが
$ echo hoge > /dev/tty2
とすると、tty2
にechoが出力されます
手元のコンソールではこんな感じになりました↓
tty000で入力したechoがtty001のカーソル位置に出力されました
お話変わって、ここからは第二部、ファイル操作編です
ファイル操作
ファイルの簡易作成方法
エディターを起動せずファイルを簡易的に作成する方法がいくつかあります
1:echo
とリダイレクト
# 1行ファイルの作成
$ echo hogehogehogehoge > file1.txt
# 中身を確認してみます
$ cat file1.txt
hogehogehogehoge
# リダイレクトだと上書き
$ echo hoge > file1.txt
$ cat file1.txt
hoge
# 追加リダイレクトだと追記
$ echo hoge >> file1.txt
$ cat file1.txt
hoge
hoge
2:cat
とリダイレクト
cat
って中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった
# [ctrl]+[d]で終了
$ cat > file2.txt
hoge
ho
hoge
[ctrl]+[d]
# 中身を見てみます
$ cat file2.txt
hoge
ho
hoge
3:touch
中身のない0バイトのファイルを作成できます
本来touch
コマンドはファイルの更新日時を更新するためのコマンドらしいですね…知らなかった…
# ディレクトリを確認
$ ls
file1.txt file2.txt
# 作成
$ touch file3.txt
# ディレクトリを確認
$ ls
file1.txt file2.txt file3.txt
ファイル名の指定方法
先程からcat file1.txt
のようにファイル名を指定していますが、これにもいくつか方法があります
ワイルドカード
記号 | 説明 |
---|---|
* |
任意の文字列。空文字でもよい |
? |
任意の1文字 |
[...] |
[ ] 内に含まれる任意の1文字 ( - 記号で範囲指定できる ) |
[!...] |
[ ] 内の . . . に含まれない任意の1文字 |
{ ~ }
|
{ } 内に含まれる任意の文字列 ( カンマで区切る ) |
(追記){ ~ }
はワイルドカードには含まれないみたいです
*
等のワイルドカードはパス名展開、{~}
はブレース展開となっていて、挙動も異なります
(教えていただいた@angel_p_57さん、本当に感謝です!)
先程のディレクトリで試してみます
# 任意の文字列(*以降は何でも該当)
$ ls file*
file1.txt file2.txt file3.txt
# 2か3に該当するもの
$ ls file[23].txt
file2.txt file3.txt
# 範囲指定もできます
$ ls file[1-3].txt
file1.txt file2.txt file3.txt
# 単語がマッチするもの
$ ls {file,filo}1.txt
file1.txt filo1.txt
おおよそ正規表現っぽく使えるみたいですね
今回はここまでです!!
さいごに
基礎的な内容が多めですが、いつも使っているコマンドにも知らなかった小技が多いなという印象です
いつも作業時は沢山ウィンドウを開くことになりますが、ttyの概念も念頭に置く必要がありますね
加筆修正、大歓迎ですのでぜひコメントにお願いします!
LINUXチョットデキル(本当の意味で)