search
LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Linux勉強会 第1回:仮想コンソールとファイル操作

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はカーネルみたいですね、間違えてたらご指摘下さい)

で、仮想コンソールで何ができるのか

  • tty1tty2で同一のユーザにログインし、片方でman(マニュアル)を表示しながら片方で作業
  • tty1tty2でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業
  • tty1でフリーズした際にtty2でログインしフリーズしたアプリケーションをkillする
  • tty1&をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2でコマンドをkillし、再度&をつけて実行する
  • tty1で一般ユーザ、tty2でrootユーザでそれぞれログインし、アクセス権を使い分ける

などなど
普段は意識せず別ウィンドウでコンソール立ち上げて行う作業ですね(まさにそれが仮想コンソールなのですが)

ttyを指定して出力

$ echo hoge
hoge

echoは通常は自分の端末に返ってきますが

$ echo hoge > /dev/tty2

とすると、tty2にechoが出力されます
手元のコンソールではこんな感じになりました↓
スクリーンショット 2020-02-11 14.56.47.png
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チョットデキル(本当の意味で)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1