So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

Ubuntuでnvenc久しぶりにやった [Linux]

新しいマシンでNVENCをやるやる言っときながら全然やっていなかったので、コンパイル通って動くところまではやる。つまったところの再度メモ書きなど。

SDKとかはここで落としてくる。前にやった時は最新バージョンが使えなかった。
https://developer.nvidia.com/nvidia-video-codec-sdk


nvidia-384-devとか、nvidia-cuda-toolkitとか、nvidia-cuda-devとかは入れた状態にしてある。あと他も入れた気がしたんだけど分かんね、忘れた。Video Codec SDK 8.0を解凍してmakeしてみると以下のエラーが出た。

/usr/bin/ld: cannot find -lGLU
/usr/bin/ld: cannot find -lXmu
/usr/bin/ld: cannot find -lglut


これは以下のインストールで解消する。多分直接は足りてないけど依存性で入れてもらえる。

sudo apt install freeglut3-dev libxmu-dev


依然、以下のエラーは残る。

/usr/bin/ld: cannot find -lnvidia-encode


nvidiaのドライバを入れたのでライブラリも入ってるはずなのだが、探してみて確かめる。

$ ldconfig -p | grep nvidia-encode
	libnvidia-encode.so.1 (libc6,x86-64) => /usr/lib/nvidia-384/libnvidia-encode.so.1
	libnvidia-encode.so.1 (libc6) => /usr/lib32/nvidia-384/libnvidia-encode.so.1
	libnvidia-encode.so (libc6,x86-64) => /usr/lib/nvidia-384/libnvidia-encode.so
	libnvidia-encode.so (libc6) => /usr/lib32/nvidia-384/libnvidia-encode.so

と出ていてパスが通ってそうに見えるんだが、実際はうまく行かない。
LD_LIBRARY_PATHに /usr/lib/nvidia-384 を設定してもできない。

解凍したVideo_Codec_SDK_8.0.14/Samples/NvEncoder/Makefileなどに

LDFLAGS += -L/usr/lib64 -lnvidia-encode -ldl

とあるんだが、
LDFLAGS += -L/usr/lib/nvidia-384 -lnvidia-encode -ldl

としてみたらコンパイルが通った。

前にこんなことしたっけ? どちらにしても/usr/lib64 なんてディレクトリはUbuntuにはありゃせん。
とりあえず/usr/lib/nvidia-384 の部分は各自入れたドライバによるので読み替えてください。


これからはNvEncoderに限って見る。どうせ使うのこれだけだろうし。
できたファイルはmp4なのでVLCを入れておく。デフォルトのアプリでも見られるのかもしれないけど、プラグインが上手く入らなかったりめんどうなので。

sudo apt install vlc


これでmp4ファイルは見られるようになる。拡張子の関連づけとかはしないとだけども。

あとYUVのファイルをmp4にするので、元になる動画ファイルとffmpegを入れておく。そして動画ファイルをYUVのファイルに変換して、mp4にNvEncoderの実行ファイルにてまたエンコーディングする。音はなくなるし、なんかバカやっているみたいだけど検証には仕方がない。

YUVのファイルはでかくなるので、Webから落としてくるってわけにも行かない。前には添付されていた気がしたが、変換がうまく行かなかった覚えがある。手持ちのファイルからYUVを作っちゃったほうが早い。

sudo apt install ffmpeg


これで既存のビデオファイルをYUV形式に変換することができる。

$ ffmpeg -i source.m4v out.yuv
$ ./NvEncoder -i out.yuv -o test.m4v -size 674 440 -codec 1
Encoding input           : "out.yuv"
         output          : "test.m4v"
         codec           : "HEVC"
         size            : 674x440
         bitrate         : 5000000 bits/sec
         vbvMaxBitrate   : 0 bits/sec
         vbvSize         : 0 bits
         fps             : 30 frames/sec
         rcMode          : CONSTQP
         goplength       : INFINITE GOP 
         B frames        : 0 
         QP              : 28 
       Input Format      : YUV 420
         preset          : DEFAULT
  Picture Structure      : Frame Mode
         devicetype      : CUDA

Input Filesize: 4438613520 bytes
NvEncoder.cpp line 971: nvEncoder.exe Warning: -endf 2147483647 exceeds total video frame 9978, using 9978 instead
Encoded 9978 frames in 4367.54ms
Avergage Encode Time :   0.44ms

ファイルができているものの、VLCでは開けない。そういやVLCで開けない問題があったのを思い出した。

http://miff.blog.so-net.ne.jp/2017-07-01-1

MP4のコンテナに乗ってない(たぶん)問題であった。上のリンクにあるようにVLCではダメだが、もともと入っている「ビデオ」アプリにプラグインみたいなのを入れると見られる。なので、普通に使えるようにするにはmp4boxあたりからソースを取ってきて、mp4コンテナに入れてあげないとダメなんだろう。大したことやっていないのだろうけど、そこのところのフォーマットってのはきっちりできているのでこういう時には困ったものだ。

この現象はNvTranscoderにも出てくる。要するにビットストリームでしか出力しないよんという立場で作っている。確かにmpeg4の形式にするか、matroskaにするかってのは自分で選べないと後々面倒だろうしな。というわけで、そこまで作り込んでくれていない。


そんなこんなで、SDKのサンプルをコンパイルできて動作も確認できた。一度やったことなので、このブログを検索すれば断片は確認することはできたのだよね。さて、今度はHandBrakeのソースを見て、主にMakefileなどと格闘することになる。それとNVENCのSDKのAPIの説明文章を英語で読まなくてはならない。面倒臭いな…。

タグ:NVENC
コメント(0) 
共通テーマ:パソコン・インターネット

Windows Subsystem for Linuxのnet-tools関係が部分的に動かない [Linux]

WSL(Ubuntu)を使ってLinux入門のさわりをしてきましたが、使っていて気になったところを書いておきます。やっぱりいくつか普通のLinuxとは違う動きをするところもあるようなので。

一つはarpコマンドがあんまりうまく動いてないこと。
$ arp
/proc/net/arp: そのようなファイルやディレクトリはありません

こんな感じ。エラーメッセージが何を示しているのかは不明。

Windowsのarpは
arp -a

で普通に動いていたし、sshで他のマシンにつないでarpを何もつけないで動かすときちんとテーブルが表示される。やっぱりWSLでは上手く動いていないんでしょう。パラメータを付ければ動くかもしれないけど、そういう面倒な事はしたくありません。というか全体のテーブルが出てこないんだから、個別に指定したところでどうにもならないんじゃないかと。

他のネットワーク系のコマンドを打ってみようとしましたが、tracerouteがIPv6版のtraceroute6しか元から入っていないようなので、
sudo apt install traceroute

で入れてみました。ダメでした。IPv6かどうかの問題じゃない。

同じローカルアドレスのマシンでうまくいっているのに、なんでうまくいかないのかなぁと。もしかしたらpingさえもローカルで通らないんじゃないかと思ってやってみました。

ん?pingは普通に通るな。むーん、Windowsのファイヤーウォールとかの問題じゃないっぽい。やっぱWSLの問題なんだろう。rebootとかshutdownが使えないのはともかくとして、ネットワーク系のコマンドが使えないというのは由々しき問題かもしれない。考えられるのは

・WSLの対応が腐っている
・環境の設定が足りていない

くらいのことかもしれない。


音を上げてググったら
http://d.hatena.ne.jp/labunix/20121028

/dev/route
/etc/ethers
がないと動かないようなので、WSLの中を探してみてもどちらもなかった。普通に動くUbuntu内を探してみると、/dev/routeはなく、/etc/ethersが/etc/ethertypesになっている模様。

/etc/ethertypesをWSLに持ってきたり、名前をethersに変えてみたものの変化はなし。そもそも/proc/net/arpがないと言っているので、素直に見に行ってみると素直にありませんでしたw。コマンドがなけりゃ動かないよな。ただ、インストールされているとしてるのに実態がないというのはどういう事なんだろう。

arpを入れ直してみようと思ったら単独パッケージは存在していなくてnet-toolsというものでした。
$ sudo apt show net-tools
Package: net-tools
Version: 1.60-26ubuntu1
Priority: important
Section: net
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: net-tools Team 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 725 kB
Depends: libc6 (>= 2.14)
Conflicts: ja-trans (<= 0.8-2)
Replaces: ja-trans (<= 0.8-2), netbase (<< 4.00)
Homepage: http://net-tools.berlios.de/
Task: minimal
Supported: 5y
Download-Size: 175 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: NET-3 networking toolkit
 本パッケージには Linux カーネルのネットワークサブシステムを制御するための 重要なツールが含まれます。それらには、arp, ifconfig,
 netstat, rarp, nameif そして route が含まれます。さらに、本パッケージには特定のネットワーク
 ハードウェアに関連するユーティリティ (plipconfig, slattach, mii-tool) および IP
 設定の先進部門に関連するユーティリティ (iptunnel, ipmaddr) が含まれます。
 .
 上流パッケージでは、'hostname' とその相棒も含まれていますが、独自の "hostname*.deb"
 が存在するので、本パッケージでは、それらはインストール されません。

とあったのですが、そもそもすでに入っていると言われるし。そのくせifconfigは普通に動くという訳の分からなさ。たぶん、泥縄式に作っているのでしょうね。まぁここまでの完成度を見せた時点でMSとしては奇跡な気がするし、しばらくの間は目をつぶらないといけないのかもしれません。


そんなこんなで、WSL自体は普通に使えないどころか、ビギナーにも不向きなんじゃないかと思われます。ディストリビューションは多くのツールが動くという状態を維持してディストリビューション足るものなのでしょうから、正直この状態は寸足らずと言っていいと思います。入門にお勧めしておいてなんだけど、ユーザーランド以外のものなどを少し使おうとするとダメだねこりゃ。プログラミング環境としてもどこまで使えるものなのかよく分からない。わけわからんのでtracerouteも放置w。


《後記》
tailみたいな簡単なコマンドでも動かないという報告が他で見られたので、ユーザーランド全体が腐っている可能性は高い。MSを信じた自分に腹が立つw。

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 7 [Linux]

前にLinux初心者用の本を勧めようとしてなかったのですが、よくよく考えてみるとLinux初心者に良い本がありました。このブログと重なるところも多いのですが、通読するとかなりの事を覚えられると思います。ただリファレンスとしてはそんなに便利ではないですが、それはWebで一覧表などを見れば済む話です。なわけでご紹介。


まんがでわかるLinux シス管系女子 (日経BPパソコンベストムック)

まんがでわかるLinux シス管系女子 (日経BPパソコンベストムック)

  • 作者: Piro(結城洋志)
  • 出版社/メーカー: 日経BP社
  • 発売日: 2015/02/18
  • メディア: 単行本



まんがでわかるLinux シス管系女子(日経BP Next ICT選書)

まんがでわかるLinux シス管系女子(日経BP Next ICT選書)

  • 出版社/メーカー: 日経BP社
  • 発売日: 2015/02/18
  • メディア: Kindle版



まんがでわかるLinux シス管系女子2(日経BPパソコンベストムック)

まんがでわかるLinux シス管系女子2(日経BPパソコンベストムック)

  • 作者: Piro(結城洋志)
  • 出版社/メーカー: 日経BP社
  • 発売日: 2015/12/09
  • メディア: 単行本



まんがでわかるLinux シス管系女子 2(日経BP Next ICT選書)

まんがでわかるLinux シス管系女子 2(日経BP Next ICT選書)

  • 出版社/メーカー: 日経BP社
  • 発売日: 2015/12/09
  • メディア: Kindle版


日経Linuxかなんかで連載していましたが、一番まともで硬派な連載だったと思います。というか日経Linux自体が軸がぶれまくっている雑誌で、唯一ブレてない連載がこの本の元の連載でした。

女の子が主人公なのに硬派かよと言われるかもしれませんが、内容はわりと質実剛健です。日経Linuxで買った時に読んだだけで全部読んだわけじゃないですけど、図示して分かりやすくしているだけで中身は技術書そのものです。

ただシス管系と銘打たれているだけあって、システム管理でどちらかというと開発というより運用やネットワーク系に近いところを扱っている気がしました。なので開発バリバリやりたいぜという人にとってはちょっと知らなくてもいいこともあるかもなぁというところがあるかもしれません。とはいえ、知っていて損はないので通読をお勧めします。マンガだから比較的しんどくないし。


開発系の情報はわりとWebに転がっているので、ググれば済むことも多いですが、なんか一冊通しで何かをしている本は持っていると入りやすいですね。何とかを作るとか、最終目的がはっきりしていて興味が持てそうなものが良いと思います。ただあまりハードルが高すぎない事が重要でしょう。

いきなりディープラーニングがなんちゃらとかもいいと思いますが、ディープラーニングの本質とプログラミングの内容が絡んできてしまうと、どっちが引っかかっても先に進めなくなるので、Webで何とかとか自分が使ったことのあるサービスの縮小版を作ったりするのが良いでしょう。

それよりか自分に有益なものを作ってみた方が良い気はしますね。とはいえ、初めは思いついてもできないとか、できる事が思いつかないとかあると思うので、一通り本をなぞってみるのが良いと思います。そこから改造したりして勉強するのがセオリーかもしれません。





今回は前回で確認したWebサーバの使い方をやっていきたいと思います。前回Apacheを入れたのでそれをそのまま使っていきます。とはいえ前回入れていない人はいると思うので初めからやっていきます。

Bash on Windowsに入ってApache2を入れてデーモンを立ち上げます。コマンドは二つで済みます。

sudo apt install apache2
sudo service apache2 start


前は
sudo /etc/init.d/ apache2 start
で起動していたのになぜ違う、と思う人もいるかと思います。

違う理由は以下にあるのですが、指定された方法があればそっちを使った方が良いでしょう。
https://www.mk-mode.com/octopress/2014/04/08/linux-difference-of-service-start/

プロセスを見るとapache2のデーモンが立ち上がっているのが分かります。
$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /init
    2 tty1     Ss     0:01 -bash
  342 ?        Ss     0:00 /usr/sbin/apache2 -k start
  345 ?        Sl     0:00 /usr/sbin/apache2 -k start
  346 ?        Sl     0:00 /usr/sbin/apache2 -k start
  409 tty1     R      0:00 ps ax


以下のURLでIEやFirefoxなどのブラウザでサンプルページがすでに見えます。
 http://localhost
もう立ち上がってはいるものの自分が示したいものは示せていません。

Linuxの設定ファイルは大抵/etcディレクトリにあります。それをエディタで編集して挙動を変えるわけですね。/etc/apache2 に各種設定ファイルがあります。公開されるディレクトリは/var/www/html にあるのですが、その設定は/etc/apache2/sites-available/000-default.conf に書いてあります。

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

色々書いてありますが、DocumentRootのところが公開されるディレクトリであることが分かります。ここの部分を変更すれば、指定のディレクトリを公開できるわけです。少し変えてみましょう。

sudo vi /etc/apache2/sites-available/000-default.conf

で編集をかけます。

DocumentRoot /var/www/html

DocumentRoot /var/www/html/test
に変更して保存します。

この場合、この行をコピペして元の行の行頭を#でコメントアウトして、コピーした行を編集するという方法を採ると、後々元に戻したい場合に非常に便利です。書く量の多さという点でもコピペした分楽できます。

更に今設定したディレクトリに新しいページを作ります。
cd /var/www/html/
sudo mkdir test
cd test
sudo vi index.html

適当にHTMLのページを書いて保存します。ただ日本語で「ほげほげ」と書いただけのファイルでもとりあえずは問題ありません。
sudo service apache2 restart

でデーモンを再起動してあげると、公開されるディレクトリも変わって、http://localhost を見ると上で作ったHTMLファイルが差し替えられて表示されます。「ほげほげ」と普通に出てくるかもしれませんし、ブラウザによっては文字化けして日本語が上手く出てこないかもしれません。

このようにして設定を変えて、その設定に沿ってリソースを用意するという操作がLinuxの基本操作になってくると思います。そのためには/etc のファイルとエディタと仲良くなっておく必要があります。とはいえ設定をいちいち覚えておくことは頻繁にやらない限りは現実的に無理なので、何かを見ながら設定という事になりますね。

次はBoWで作ったテキストファイルをWindowsエディタで開いたり、WindowsでLinux用のテキストファイルを作ったりしたいと思います。

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 6 [Linux]

Linux初心者のためのお勉強で前回はシェルの事を書きました。
 http://miff.blog.so-net.ne.jp/2018-02-25-1
まだ書き足りてない部分はあるのですが、出てきた時に順次説明していきます。


基本的なところを改めて見ていくと自分も探求心に目覚めてしまいがちです。Linuxはある程度できる実力はあるものの、知らないことはいくらでもあるものです。というか、自分が知っておくべきレイヤーを知っていればいいというのがコンピュータ的には正しいのでしょうが、何でこれがこう動くんだろうという事を考えだすと気になってしまうところはあります。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

  • 作者: 武内 覚
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/02/23
  • メディア: 単行本(ソフトカバー)


最近出たらしいのでこれなんか読んでみようかなと思ったり。

ただ、この本はBoWでLinuxを始めようという初心者向きではありません。もっと実際の動作に近いところの挙動を知っておいた方が良いのは確かです。最近フィジカルな本屋さんに出向かないので、初心者によい本がどんなものなのかを知ることがあまりできないのですが、個人的な意見として何かを目的としたものが割と身に着くんじゃないかと思ったりもします。

というのも、自分が読んできた本で一番役に立った本が玄箱のLinux化の本だったからです。玄箱というのはNASなのですが、そこに無理矢理Linuxを突っ込んで動かしていろいろしてしまおう、というものでした。ハードウェア的にも製品上の違いは皆無と言えたし、DynamicDNSを使って固定のドメインでWebサーバを立てるというお題が設定されていたので分かりやすかった。

それまでLinuxのインストールブームが来て、ある程度の操作はわかったつもりでも、実際に何をするという時点になると大して何もできない、という状態になっていました。結局何ができるという事が見えてこなかった。オペレーションとしてコマンドを扱うことができても、サービス一つ作り出すことができないというのが実際でした。

手詰まりの状態から実際に使える所まで持っていってくれたのが、玄箱のハックだったりしました。構成が色々になりがちで例外が出がちなLinuxですが、コマンドをきちんと打ち込めば間違いなく動くという点については大変助かりました。ただPowerPCであるがために、aptのバイナリなどが限られていたので、深く突っ込もうとすると自分でコンパイルしないといけなくなるところは結構鍛えられたと思います。

今は./configure && make && make install なんてしなくていいし、依存性もAPTやYUMなどのパッケージマネージャを使っていれば問題ないけど、一度はマイナーなソフトや新しいnightly buildを使ってみるというのも悪くないとは思います。結局、今お気楽に使えているのは、きちんとコンパイルしてくれているメンテナの人などの苦労があっての話でしょうし。まぁそれをするのもいろいろ慣れてからの方がはまりにくくて済むし、結局最後まで遂行できてなんぼなので、それまでそれなりの修行を積んだ方が良いとは思います。





そんなところで、今お勧めの本はよく分かりません。ただ、インターネットで調べられる情報は往々にして散逸してしまっているので、一つの事を調べるのに向いていても体系的に知識を身に着けるのには向いていません。だから、自分が読んでしっくりする本は何冊か買っておいた方が良い気はします。

良いと思うのは、VirtualBoxなどの仮想化を扱った本があれば、それを買うのもいいと思います。良い本があるかどうかは別にして、仮想化でハードウェア部分が固定されるので、そこいらへんで変なはまり方をしないで済むという事はあります。あまりハードウェアが新しすぎてNICのドライバが追い付いてないとかあっても、自分でネットワークから引っ張ってきて入れるとか面倒ですしね。最近はそんなにないのかもしれないけど、WindowsはきちんとマザーボードにDVDが付いているというのに。

何にしてもOracleが有料にしない限りはVirtualBoxはタダですからね。お金がかからないというのは、初期の学習者にとって強い味方ですよね。正直、ライセンスとか買わないといけないといけなくなると、仕事でやるようになってからでいいかと思ってしまうのが落ちです。

https://www.virtualbox.org/wiki/Downloads

ハードウェア系の事も気にしているのなら、一時期やたらとLinux系の雑誌に載っていたRaspberry Piなんかもいいかもしれません。基板自体持ってないから使ったことないですが、書籍も出揃っているとは思いますしホビー的に入るのも悪くないでしょう。


Linuxにかかわらず初期の学習としては、何をしているのかわかることと、やった結果が安定していることは大事だと思います。裏で何しているかわからない上に、直接何やってるのかわからないのは不幸としか言いようがありません。特に初心者は自分で原因を調べるという事自体が困難すぎるので、基盤が安定しているというのはなくてはならないものだと思います。

話の流れとしては、VirtualBoxを入れるんだなと思っている人もいるかもしれませんが、まだまだBoWでじっくりやるべきこともあるので、UbuntuをVirtualBoxに入れるのは先の話とします。結局入れ方までやらないかもしれませんが、事前にBoWでできる事はやっておいた方が良いと思います。ステップアップする方法としては悪い方法ではないでしょう。





今回は実験としてSSHが外部からつなげるか、という事を確かめておきたいと思います。というのも、サーバ目的に使うとすれば、外から接続して設定したりサービスを提供してもらったりするのが常となってくるので、外部と通信するために立ち上げっぱなしのプログラムが必要となってきます。ずっと常駐しているソフトをデーモンといったりしますが、今回はSSHデーモンがBoWで動くかどうかを確かめてみたいと思います。これができればWindowsの外部にWebサーバなどを見せたりできますし、BoWをWindows内の出来事だけで終わらせることなくLinuxを使うことができるのです。


説明が後先になってしまいますが、sshdを正常動作させるのには失敗するので、これからの操作はする必要は特にありません。そこから動く状態にもっていくのは初心者にはしんどいでしょう。というか自分も最後までできていないし。

まずSSHDを入れます。SSHクライアントは元から入っていて、他のサーバにはつなげにはいけましたが、他のマシンからつなぐという事は確認していません。そして何もしていない状況ではデーモンは立ち上がっていません。それはps axコマンドで見られます。その見方は後にしてとりあえず、フルセットのSSHのパッケージをaptで入れます。

sudo apt install ssh


自分のパスワードを入れてインストールします。これだけではデーモンは立ち上がっていないので、別途立ち上げる作業を必要とします。

sudo /etc/init.d/ssh start


ちょっと古臭いコマンドかもしれませんがこれでも立ち上がるのでいいとして、実際にSSHデーモンが立ち上がっているかどうか確かめます。

$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /init
    2 tty1     Ss     0:01 -bash
  157 ?        Ss     0:00 /usr/sbin/sshd
  160 tty1     R      0:00 ps ax


psというコマンドは現在動いているプロセスを見るためのコマンドです。sshdというプロセスが動いているので問題ありませんね。まぁここまでは動くとは思っていました。ここから先です。まずはBoWから自分につなぎに行きます。

$ ssh hoge@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
《中略》
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied (publickey).

自分から自分につなぎに行くのは、なんだかうまくいっていないみたいですね。
.ssh/authorized_keys っていうのができていないっぽいですね。
そもそも自分から自分へというのがいけないのかもしれないけど、普通のLinuxだとできていたし。

色々やってみたもののうまくいかないのは同じでした。何の設定が悪いのかな。普通のLinuxだとデフォルト状態でつなぎに行けていたのに。そもそもデーモンも勝手に立ち上げてくれたりしていたので、普通にLinuxをAPTで使っているのとは違うみたいですね。


代わりにWebサーバを立ち上げてみたらうまくいきました。デーモンを外から見ることはできるみたいですね。そういう意味では普通のLinuxサーバの開発検証環境として使えそうです。一応やったことを書いておきますね。

sudo apt install apache2
sudo /etc/init.d/apache2 start

んでBoWを使っているそのままのマシンで、Webブラウザからhttp://localhostを見る。
そうすると以下のような画面が出てくるはず。
apache2.png
WebサーバApache2が立ち上がっていました。別にWindowsのセキュリティが邪魔したりとかしていませんね。SSHDは設定が足りないとかしてないとかそういうもので、BoWでは動かないという訳じゃなさそうです(わからないけど)。

そんなわけでBoWでも外に晒すことにおいても大丈夫そうです。これは大事な事かな。正直いろいろな事が邪魔して外と交信するサーバ関係がだめかもしれないと思っていたけれど、特にWindows側で何の設定もすることなく使えそうです。これはいい傾向。できる事が制限されないのって素敵です。

今回は検証の回になってしまいあまり覚える事がなかったですが、BoWで色々できる事はわかりました。特に実際のLinuxを使わなくても何とかなることが多いってわかっただけでも収穫なのです。次回はもう少しみんなの勉強になることをしたいですね~。

http://miff.blog.so-net.ne.jp/2018-03-11

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 5 [Linux]

今まで
・WindowsにBash on Windowsを入れ
・コマンドの入力をし
・ファイルの編集をおこない
・パッケージマネージャでプログラムを入れて、プログラミングのまねごと
をしました。

LinuxをWindowsで始めるという名目でやってきましたが、正直WindowsでやっていかなければならないところというのはBoWを入れるところぐらいで、実際シェルの中に入ってしまえば大してLinuxと変わるところはないというのは正直なところでした。結局、単なるLinux入門になってしまいましたが、それはそれでBoWの完成度が高いという事なんでしょう。

とりあえずはコマンドを入力できてテキストファイルを編集できるところまでくれば、後は各自でやっていく他ないんですが、あまり手放しが良すぎるのも無責任だろうと思っています。Linuxのシステム的なところも知っておくべきなんですが、それよりもBoWで操作に慣れて実際に何かできるようになった方が良いし、理論的なところは後でも全然遅くない気はします。BoWでカプセル化されて見えなくなっている部分まで追おうとすると厳しい気もしますし。



今回はシェルとtmuxを取り上げます。tmuxもシェルの一つらしいですが、普通のシェルとはちょっと違った感じなので、少し分けて話したいと思います。

現在のシェルを知るには
$ echo $SHELL
/bin/bash

で基本bashです。Linuxのシェルは大体はbashだと思います。例外はあるかもしれませんが、基本的に最新のディストリビューションではbashを使っていると思います。シェルのキーバインド(ショートカットキーみたいなもの)などで気になるところが出てきたら、それはそれで使いこなしている証拠なのでしょう。

ただ他のOSを使わない限りはシェルが変わることはないので、まずはbashを使いこなすところからいけばいいと思います。そしてbashで不十分か不都合な点があれば他のシェルに乗り換えればいいのです。自分の場合は、そこまでシェルを使いこなしてはいないのと、そもそも必要性がないので惰性的にbashを使い続けています。

chshというコマンドがあるのだけれども、BoWではいまいち効いてこない気がしますし。というかtmux以外使おうと思ったことないので、chsh自体使ったことがなかったのですが、ログインするときのシェルを変えるものなので、普通にbashとかtcshとか打てば変えられたんでした。


シェルというものはOSとのやり取りをするためのインターフェイスで、コマンドを打ったりして入出力をやり取りします。ただ、シェルによってできる事が変わってきていて、それによって便利になったりしています。

簡単なところからいくと、コマンドの履歴があります。lsやらcdやらいろいろ入力した後に、カーソルキーの上を押すと順に前に入力したコマンドが出てきます。その履歴は/bin/shでは使えません。これは後から足された機能という事になります。とはいえ、大体のシェルは履歴機能を含んでいると思うので、普通気にすることはないところなのかもしれません。

ただ、同じ長いコマンドや以前とは少し違うだけの長いコマンドを打つ場合は履歴がないときついですね。そして自分がやってきたことを見直すという意味でも使えないと厄介です。なおこの履歴はパスで言うと~/.bash_historyというファイルに収められています。

内容を見るには下記コマンドで。
less ~/.bash_history


~/ という表記は自分のホームディレクトリで、名前がhogeなら/home/hoge/というディレクトリを示します。ただ、一回普通にログアウトしないとファイルとして保存はされずに次のセッションには使えなかったりします。普通のログアウトはexitで終わったりするわけですが、普通じゃないログアウトとはいきなりコマンドプロンプトのウィンドウを×マークで消してしまうなどの事です。正常な終了をしないと書き込まれないわけですね。ただセッションが続いているうちは、履歴はメモリの中に残っているので、その場でのコマンドの再利用は普通にできます。


あとbashだとCtrl+aで行頭へ飛び、Ctrl+eで行末に飛ぶ、くらいは便利かもしれない。網羅的に知りたい場合は下記などへ

http://hogem.hatenablog.com/entry/20090411/1239451878

シェルの機能じゃないらしいけど、Ctrl+cでコマンドの実行停止とか、Ctrl+zでコマンドの中断とかは良く使いますね。emacsのキーバインドと関係しているみたいだけど、lessの操作がviと似ているとかどこぞから持ってきた仕組みって割合と多いのかも。まぁ何でも慣れですけど。


そして、シェルに組み込まれている文法もあります。if文やfor文がそれですが、プログラミングじみた事ができます。それらコマンドをファイルに書き込んでシェルスクリプトにすることもあります。それらをまじめにやろうとすると一冊の本になるくらいなので割愛しますが、既存のコマンドを組み合わせてできる事はプログラミングと同等に可塑性のあるものです。というか、プログラミングと言っていいのかな。


前に書いたコマンドの補完機能もbashの拡張機能なのでTabを押しても/bin/shではTab文字が入力されるだけです。色々見ていくとbashによって実現されていることって多いんだなと実感できますね。同じように他のシェルで別の事が実現できていることというのも多いのでしょう。

あとパイプとかリダイレクトとか基本技がありますが、それは必要になってきたらそのうちやる予定です。





地味にコマンドライン環境を便利にしているシェルですが、bashの他にtmuxをお勧めします。似たものでGNUのscreenがあるのですが(そしてBoWにも入っているのですが)、tmuxの方が普通に使われているっぽいです。僕としてはどっちを使ってもいいんじゃないかと思ったりはしましたが、自分が使い始めたころには縦に分割するのが普通にできたのがtmuxの方だったので、最終的にはtmuxを選びました。

tmuxの優れたところは
・画面分割ができる
・端末の接続がブチ切れてもセッションを続けてくれる
ところにあると思います。

他にも利点があるとは思いますが、自分がはっきりと認識しているところはそこのところですね。BoWでは後者はあんまり意味がないですが、画面分割ができるというのはメリットが大きいです。別に端末を複数開けばいいじゃないかという人もいるかもしれませんが、それはあまり推奨された行為ではないみたいです。特にSSHで外部から接続している場合は、接続をたくさん作るのはあんまりかっこよくないですし。正直、お作法的にあんまり端末をたくさん開くのはきれいじゃないという理由ぐらいしか見つからないのですが、もしかすると直接的なデメリットがあるのかもしれません。


僭越ながら自分のやり方を見せますと、ウインドウを全画面表示して、Ctrl+b, % で縦に分割して、横に二つの表示領域を並べています。

何かを参照しながら、ファイルを書いたり、
ファイルを開き編集しながら、コマンドで作業をしつつ、みたいな使い方をしています。
プログラミング的に切り替えが使いやすいというのはあると思います。

tmux.png

Ctrl+bとカーソルキーで細かく分割したペイン間を移動できます。

もっと分割もできるのですが、現実的に2ペインぐらいが一番使いやすいんじゃないかと思ったりします。Shift+2で横分割もできたりするので、色々自分の使いやすい使い方を探してみてください。

シェルの内容的にはbashが動いていますので、ペインの操作以外はbashと同じと考えてよいと思います。恐らくキーバインドが重なっている部分があるとしたらtmuxの方が優先されるんじゃないかとは予想されるんですが実際はどうなんでしょう。検証してないので分かりません。前に出たscreenというシェルはemacsのキーバインドと重なるとかなんかで敬遠されているのかもしれなかったような(てきとう)。


細かい使い方とかは他のブログにゆずります。
 http://kanjuku-tomato.blogspot.jp/2014/02/tmux.html
やたらQiitaのエントリーばかり引っかかるのですが、Qiitaは玉石混淆で記事の精度も低めで放置気味で、あんまり好きじゃないので他のサイトにしてみました。そもそも同じサイトで同じような記事があるのなんて冗長すぎるではないか。なんか頭悪さを露呈しているような気がするんだよね。集合知というより船頭多くして、という感じ。


一番のメリットはやっぱり先に挙げた後者の、SSHなどの接続が切れたとしても、長い時間かかる処理の実行が終わらないところでしょうか。外からつなぐと直接端末のコンソールを叩いているのとは違い、いつ切れてもおかしくないという前提でやった方が良いですから、予防措置的に使うのは精神衛生上とてもいいです。tmux attachで再接続できるのは安心です。

なので、BoWで使う事自体はそれほどメリットがないものの、使っていると後々得をする部分は大きいのではないのでしょうか。

次はデーモンがマシンの外から見えるのか検証します。それで後々の計画を考えたいと思います。
 http://miff.blog.so-net.ne.jp/2018-03-02-1

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 4 [Linux]

コマンドを発行してファイルを編集してきました。Linuxの基本的な操作はそれ以上でもそれ以下でもありません。
http://miff.blog.so-net.ne.jp/2018-01-13
http://miff.blog.so-net.ne.jp/2018-02-13-1
http://miff.blog.so-net.ne.jp/2018-02-18-1

ただ知っておいた方が良いことはまだまだあるのでまだまだ続きます。ネタが尽きるまでは書きます。ただ、やればやるほど一般性がなくなる可能性はありますが。

ともあれ、しばらくはBoWでやるのでライトな感覚でやっていきたいと思います。今回はGolangのコンパイル環境を入れて使ってみたいと思います。なんでGolangと聞かれたら言語仕様が小さいからコストが少ないと答えるしかないでしょう。細かい愚痴は後に書きます。


まずは
apt update

と入力してみてください。エラーが出ると思います。自分ところではこんな感じで出ています。人によってはちょっと違うかもしれませんが。
$ apt update
パッケージリストを読み込んでいます... 完了
W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: 許可されていない操作です)
E: ロックファイル /var/lib/apt/lists/lock をオープンできません - open (13: 許可がありません)
E: ディレクトリ /var/lib/apt/lists/ をロックできません
W: ファイル /var/cache/apt/pkgcache.bin の削除中に問題が発生しました - RemoveCaches (13: 許可がありません)
W: ファイル /var/cache/apt/srcpkgcache.bin の削除中に問題が発生しました - RemoveCaches (13: 許可がありません)

これはパッケージマネージャaptが管理者権限で基本的に動くので、管理者権限で動かしてください。aptにかかわらず、インストール作業というものは普通に管理者権限が必要であるのです。システムに近い作業をするほど管理者権限が必要になってきます。それと今後は$などのコマンドプロンプトは基本書きません。複数行をコピペで動かすのに支障が出るからです。

管理者権限で動かすには、コマンドの前にsudoを付けます
sudo apt update
sudo apt upgrade

面倒な場合は、二行をコピーしてコマンドプロンプトのウィンドウを右クリックしてください。コピペされて二行が実行されます。

これらは何度も打つことになると思うので、入力に慣れておいた方が良いのでキーボードから入力することをお勧めします。ただ、手間を惜しむことはできて、sudo apt updまで打ち込んでTabキーを押してみてください。あとのateが補完されます。同じようにsudo apt upgまで打ち込んでTabキーを押すとradeが補完されて入力直前までもっていってくれます。長めのコマンドは補完される仕組みがあるのです。

同じようにコマンドそのものも補完できたりします。一文字だけでも補完できますが、選択肢がたくさん出てくるので一発補完はできません。覚えがあいまいな場合は、頭の数文字だけ打って選択肢から選ぶという方法もあるのでチートシート的に使えなくもないです。

この補完はbash-completionというものを入れると使えるようになるのですが、Ubuntuにはもともと入っていたのでした。この設定をいじると自分で作ったコマンドの補完もできるようになります。ただ、コマンド引数を補完するような大掛かりなツールというのは現実的に作ることはあまりないと思うので、標準で組み入れられていないツールについての補完は作ってみることは現実的ではあります。実際に作るのはそんなに難しくないし、有志がGitHubなどに上げていることもあるので探してみると頻繁に使う場合は楽ができるかもしれません。


sudoで実行しようとすると、自分のパスワードを聞かれます。普通は/etc/sudoersに設定しないと、sudoで実行できないのですが、BoWでは初めから実行できるようになっています。普通にUbuntuを入れた時はそこまでしてくれなかった気がするのですが、本当であればsudoersを編集して練習としたかったのですが残念ですね。

これらを実行する場合は時間がかかることを覚悟してください。Windowsで言うとWindows Updateをやっているようなものなので、OSの中身が新しくない場合はアップグレードをかける部分が多くなるという訳です。ただWindowsと同じようにいくらかバグやセキュリティの問題が解決しているので、定期的にやっておくのがいいと思います。




と環境が新しくなった後に、Golangを入れていきます。

ちなみにGolangというのは何だかというと、プログラミング言語です。コンパイル型の言語で、現在台頭しているインタプリタ型のスクリプトではありません。はじめは同じコンパイルをしないといけないC言語の環境を入れようと思ったのですが、今更C言語でHello Worldもないだろうと思ってやめました。まぁやることは大して変わらないのですが、やりたい人は自分でやると思うので止めはしません。カーネルでもなんでもいじってください。

とプログラミングへの布石を打とうとしているわけですが、プログラミング環境を入れる事自体は難しいことはなく、コマンド一発で入ってしまいます。
sudo apt install golang

先のTabでの入力補完がinstallのiで、それとgolangのgolaでそれぞれ補完できます。golangはともかくinstallはiの一文字で補完できるので楽しましょう。


インストールが終わるとすぐにプログラミング環境を使えます。色々設定はあるのですが、今はあんまり関係ないのでやりません。今から簡単なプログラミングをしますが、ソースファイル作成→ソースファイルのコンパイル→コンパイルされたファイルの実行、とやっていきます。

viを開きます。
vi start.go

iを押して文字入力をできるようにしておきます。

下のソースをブラウザからコピーして、右クリックでコマンドプロンプトに貼り付けます。
package main

import "fmt"

func main() {
	fmt.Println("なんでGolangやねんw")
}

viに文字列を挿入できたら、:wq で保存。

start.goというファイルができていると思うので、それをコンパイル。
go build start.go


エラーが出なければstartというファイルができるはずなので、それを実行。
$ ./start
なんでGolangやねんw

「なんでGolangやねんw」と出力に出てくれば成功という訳です。オペミスがなければ大丈夫だと思いますが、失敗するのも経験です。

./start

というコマンドで、コンパイルされたファイルを実行しているのですが、ただstart単体では実行されません。それはパスが通っていない場所にある実行ファイルだからです。既存のツールのような実行ファイルはパスが通っているディレクトリに置いてあるわけです。だから./を付けて現在位置を知らせなくても実行できるようになっています。

でも、そうではないわけですからstartというファイルの前に明示的にカレントディレクトリ(現在いるディレクトリ)を示してあげる必要があるわけです。しかも都合の悪いことに既存のstartコマンドと名前がバッティングしているせいもあり、./の指定は必然なわけです。

なお実行できるパスを表示させるには
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files (x86)/PuTTY:/mnt/c/Users/ユーザー名/AppData/Local/Microsoft/WindowsApps

とすれば出てきます。このそれぞれのパスに存在する実行可能ファイルはファイル名だけで実行できるようになっています。なのでどこにいても絶対パスも相対パスも示すことなく、コマンド名だけで実行できてしまうわけですね。




最後になんでGolangなんかいな、という話。Golangの良くない噂を聞いたことがあるからやりたくないよ、そう思うかもしれません。結構多くGolangをディスる人たちがいます。思いのほかに人気になってしまっているから叩いているのですが、叩きどころが違う人が多いです。叩く意味も分かります。でもやっぱり人気が出てしまっているからそれを憂いて叩いているとしか思えないのです。

Golangでググったらわかると思いますが、有名なgolangとNimと言われるマイナー言語を比較して、Golangをディスっているサイトがあります。言いたいことはわかるんだけど、やっぱマイナーなものはマイナーなままつぶれるのが大体の運命なんだよね。NimをKotlinよりもサイコーとか言ってるけど、誰も使わなきゃ放置されんだろw。

それに彼が崇め奉ってるPlan 9だって今までの成果は、そのOSの概念と実質UTF-8のみと言っていいでしょう。
 http://www.atmarkit.co.jp/news/analysis/200902/09/future.html
もう終わっているものに期待をしている人って何よって話で。BSD各OSよりもさらに死んでるだろってw。まぁFree BSDにはmacOSの礎となったらしいから感謝はしているけれども。同じくどんなに優れていようとも使われなかったらそれは単なる文字列と変わらないわけですよね。脳内オナニーのひけらかしはやめてくれと。

70年代の言語と大して変わらないという指摘は当たっていると思います。でも、より良いC言語として存在するには言語仕様が巨大にならないことがマストであったのだと思います。そして覚えることが少ないというのは、使える人が多くなるという事にもつながるし、自分のメイン言語ではなくサイド的な使い方をすることも可能になってくるのでしょう。そして多少手荒く扱っても言語の罠にはまらないというのは実際的に効いてくると思います。

Golangをディスる人の多くが現在のスクリプト言語を元にして言っているのですが、GolangはC++のより良い改良ではなくて、C言語の改良版であることを前提としていない。そんなものC言語でやればいいじゃないかと言って、コンパイル言語を放置してきた結果が今なわけで、オブジェクト指向が普通な現代的なインタプリタ言語の変わりは別に必要なのが分からないのかな。

というわけで、オブジェクト指向を取り入れていないあえて抑えた言語と、使う見た目上シンプルになったオブジェクト指向言語を比べる事自体愚かしいと思うのだけれど。すげーはえーとF1の絵を声高に掲げているよりも、少々遅くても実際にある原チャリで近くにお出かけした方が良いと思いません?

次はシェルなどをやっていきます。

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 3 [Linux]

これまでにBoWを入れ、コマンドを入力して基本的なところを見てきました。

http://miff.blog.so-net.ne.jp/2018-01-13
http://miff.blog.so-net.ne.jp/2018-02-13-1

Linuxの作業としてコマンドとテキストの編集がほとんどと書きましたが、次はテキストを書いていきます。エディタはviを使います。viをフルに使おうとすると厳しいです。というか、初めて使うエディタとしてはラインエディタ並みにお勧めできません。

なのにどうしてviを使うか。それはどの環境にも必ずと言っていいほど入っているからです。どうせならつぶしの利く技術を身につけたいところです。他に代替ツールもあります。ですが、やっぱりお作法としてviの使い方を知っておいた方が良いような気がするのです。そして、他のエディタは初見でもある程度使えるのに対して、viはある程度経験がないとつらいこともあります。なのでviを断行しますw。

ここで先ほどの代替案を見ていきましょう。


・emacs

かつてviとemacsのどっちを使うのかで宗教論争がありましたが、本来使いたいものを使えばいいのです。emacsは拡張性が高く自由にカスタマイズできます。動作が重いと言われていましたが、ハードウェアが進化した今となっては気になることもないでしょう。ただ設定ファイルを少し変更するくらいではあまりにも大げさすぎるきらいはあるのは否めません。そして、viのようにどの環境にもデフォルトで入っているものでもありません。これからガッツリLinuxを使うつもりであれば止めるつもりはありませんし、むしろ喜ぶべき事なのかもしれません。もちろんパッケージマネージャで後から簡単にインストールすることができます。Ubuntuだとsudo apt install emacsで入れられると思います。


・nano

たぶん名前の通りに動作が軽いのでしょうし、操作感としては一般的なエディタに近いものがあります。なので軽い設定ファイルの編集などはこれを使うのもいいと思いますが、今までの実績がとてもあると思えないのです。visudoというコマンドは/etc/sudoersを編集するコマンドですが、viと名前を冠しているくせにUbuntuではnanoで立ち上がります。意味が分かりませんw。ただviが直感的なものではないから、GNU nanoにしようという事になったのでしょうけど、ディストリビューションによって必ず入っているわけではありません(たぶん)が、後から入れるのは問題ないでしょう。


とviのメリットってどこにでも入っているだけじゃん、という結果になってしまいましたが、いざすんなり使えないとすごい困るのでやっておいて損はないでしょう。


まじめに覚えようとすると下のようなお決まりがあります。

https://docs.oracle.com/cd/E19253-01/816-3946/6ma6m5bnf/index.html

あまり分かりやすい説明ではないので、読むのも少ししんどいですね。かといって下のように掻い摘まれても、実際の作業時に情報が足りないかもなぁと思ったりもします。

http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/command/vi.html

必要十分な情報はあるのは問題ないのですが、やっぱり試行錯誤しないとつらいところはあるので、そこのところは十分遊びがてらに適当なテキストファイルを作って挙動を見ることが大事です。



捨ててもいいように前回のtestdirでやりたい放題やりましょう。まず
$ vi test

でtestというファイルで始めます。Linuxでは意識的に拡張子をつけても付けなくてもいいのですが、後でWindowsで開くことを考えるとtest.txtでもいいかもしれません。

空のファイルを開くことができるのですが、このままでは文字の入力さえできません。エディタなのにいきなり開いて文字入力ができないとは何事だと思うのもやむを得ませんが、viにはコマンドモードと入力モードがあるので、初めはコマンドモードになっていて入力できないという訳です。

insertのiを打つとそのあとアルファベットが打てます。これでやっとエディタらしいことができましたね。上のリンクでは、aとかiとかoとかありますが、どれか一つでも覚えておけば今は大丈夫です。昔はAじゃないとカーソル操作では行末に行けなかったりしましたが、今は改善されてそんなことはなくなっているようです。自分が使い良いように使うのがいいと思います。

そういえば、昔は上下左右のカーソルキーでは、入力モードでは変な文字が入力されて動かないという状態の時もありました。でも今はそんなことはありませんし、わざわざコマンドモードに変更してh, j, k, lのキーを押さなくてもカーソルキーを直接使ってカーソルを移動できます。ただvi系の操作を使えるlessコマンドではスクリーンのスクロールはjとkで上下させたりするので、そのキーバインドは覚えても損はないとは思います。

恐らく純粋なviの時代の話なんだと思いますが、今のviはvimなので少しづつ改良はされているみたいです。とはいえ、あまり大きな変更は今後もないとは思いますが。



色々打ってもらってそのファイルを保存したいと思います。まずはEscキーを押してコマンドモードにします。それから
:wq

と打つと保存して終了します。WriteしてQuitというコマンドですね。書き込んだ後保存しないで終了したい場合は、
:q!

Quitを強制的に発動という意味です。強制的というのはファイルの変更の保存をしていないからワーニングが出るため、強制的に終わらせるという明示的な命令が必要なわけです。なのでファイルの変更を加えない場合にはいらないのですが、私はいちいち判断する前に強制的に終わらせてしまった方が良い場合が多いので!はほとんどいつも付けています。

変更しないで終わるというのは意味のない事なんですが、/etcなどの設定ファイルをいじっていると元に戻したいなと思うときがあったりするので、全リセットするにはいい方法だと思います。逆に途中で保存したい場合には:wで保存できます。WindowsなどのエディタでCtrl+Sするのと同じですね。


testというファイルができていると思うので、lsコマンドで確認してみましょう。無事に保存できていればファイルが見つけられると思います。

作ったファイルを見るコマンドは
less test

でいけます。終わるときにはqを入力します。





色々コマンドがある中で普段使っているのは、コピペ(ヤンク)と検索ぐらいですね。
あと行削除ddくらいですかね。

行のヤンクはyyかYで文字列をコピーします。
ペーストは貼りたいところでpを打てば貼れます。
特に難しいところはないですね。
設定ファイルでは元の行をコメントアウトしておいて、コピペして部分的に変更というようなことを日常的にするので、割と使う操作だと思います。


次に検索ですが/の後に検索ワードを入れます。次に同じワードで検索を続けるときはnを打ちます(nextのnと覚える?)。Nを打つと逆方向に検索をかけてくれます。これもlessコマンドなどでも応用できるので覚えておいて損はありません。


その他にいろいろとやれることはあるのでしょうけど、vi自体最低限の事しかしていないので、偉そうに教えられるのはこれくらいです。emacsにしてもviにしても使いこなそうとするときりがないので、便利なもの以外はほとんど使っていないです。さくっと設定してコマンドを動かしたいじゃないですか。だから変なところで知識をため込むよりか覚えることは山ほどあると思うんですよね。まぁつぶしの利く技術ではありますけれども。

とにかくviは良く使ってすんなりいくようにするのがいいと思います。そうすれば、Linux自体の操作が速く終わることになるし、間違いも少なくなるだろうし、間違っても修正も苦にならないと思います。Linuxはさくっと設定して後は動かしたまんま(デーモンなど)とか、コマンド終了を待って終わりということも多いのでさくっと手軽に終わらせたいところです。


これで一通りのLinuxの作業はしました。テキストファイルを編集して、コマンドを発行する。それでほとんどの事はできます。あとはその時々に必要なコマンドと知識を使ってやっていけばいいのです。ともあれ、Linuxの知識はOSSのツールも含めると膨大ですから、知らないといけないことは多いです。ただ、Windowsの上で動いているので、やらないで済むことは多いので初心者には楽ができていいのではないかと思います。


次にはaptパッケージマネージャでツールを入れて、それを使っていきたいと思います。今は依存性でこんがらがることも少ないので、すんなり終われるでしょう。


タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める 2 [Linux]

前回はLinuxをWindowsで始めるために、Bash on Windows(以下BoW)でやろうとしました。何にしてもアプリケーションを導入するようにお手軽なので、この方法を選択しました。

ここで知っておくことべきなんですが、Linuxを操作することは具体的にどういう事なんでしょうか。

極論すれば二つの事だけだけです。

それは、

・テキストを編集する
・コマンドを実行する

この二つです。恐らくそれ以上でもそれ以下でもありません。この二つができればほとんどの事ができます。さらに極論すればテキストを編集するのもviやemacsコマンドを使うので、最終的にはコマンドだけでなんとかなる世界ではあります。ただ厄介なことに、GUIではなくコマンドラインで行う事が基本となっています。確かにデスクトップなLinuxでGUIで操作することも可能です。

しかし、今回はCUIなBoWですし、Linuxを使うにおいてコマンドラインで作業ができる事に慣れておくのが肝要かと思われます。そしてGUIの作業はそもそもWindowsで可能なので、あえてLinuxを使うにおいてGUIでやる必要性はないのです。コマンドラインで慣れておく事は非常につぶしが利くので初めからやっておきましょう。


■ コマンドを打ってみる

Windowsでもコマンドプロンプトから簡単なコマンドを打ったことがあると思います。例えば、ネットワーク状況を調べるipconfigだとかpingだとかはやる機会も多いものでしょう。ただ普通にWindowsを使っていく上で、mkdirでわざわざフォルダを作ったりすることは少ないと思うし、cdでディレクトリの移動をすることもあまりないと思います。それらはGUIのマウスオペレーションでできてしまう事だからです。

しかし、コマンドで作業を行う事が基本的なLinuxですから、多くの事はコマンドを扱って作業を行っていかなければなりません。面倒ですよね。ただ、文字列の受け渡ししか受け付けない環境では、コマンド作業というのは非常に重要となってきます。例えば、遠く離れたサーバへのネットワーク経由の接続や、入出力がプアな組み込み機器など、文字列でやり取りしかできない、または現実的にGUIでやるのにコストがかかりすぎる状態というのは意外とあるものです。

そのため基本的なディレクトリ操作は何を見なくてもある程度できていたほうが事がスムーズに進みます。ただ、コマンドのすべてを隅々まで覚えておくことは不可能だと思うので、よく使うものや便利なものをピックアップして覚えていき、その他のものは必要になった時点で調べていけばいいと思います。


まず、Windowsと同じコマンドでディレクトリを作っていきたいと思います。コマンドはmkdirです。

$ mkdir testdir

$というのは実際に打ち込まないでください。一般的にプロンプトは$で示されていますので入力する必要はありません。同じ名前のディレクトリがなければ普通にtestdirというディレクトリ(フォルダ)が生成されます。これについてはWindowsでも同じなので特に何の疑いもないとは思います。

ただ、コマンドの中身がすべて一緒だという訳ではありません。やはりWindowsとLinuxのコマンドには違いが当然あって、名前が同じだからといって細かい仕様までは一緒ではありません。

コマンドプロンプトからbashに入らず、Windowsのコマンドのヘルプを見てみると
<mkdir /?
ディレクトリを作成します。

MKDIR [ドライブ:]パス
MD [ドライブ:]パス

コマンド拡張機能を有効にすると、MKDIR は次のように変更されます:

MKDIR は、必要に応じてパスの中間ディレクトリを作成します。
たとえば、\a が存在しない場合、

    mkdir \a\b\c\d

は、次と同じです:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

拡張機能が無効な場合は、上のように入力します。

なんて出てきます。

LinuxであるBoWのmanを見てみると、下のようにコマンドを打ちます。
$ man mkdir



MKDIR(1)                                            User Commands                                            MKDIR(1)

NAME
       mkdir - make directories

SYNOPSIS
       mkdir [OPTION]... DIRECTORY...

DESCRIPTION
       Create the DIRECTORY(ies), if they do not already exist.

       Mandatory arguments to long options are mandatory for short options too.

       -m, --mode=MODE
              set file mode (as in chmod), not a=rwx - umask

       -p, --parents
              no error if existing, make parent directories as needed

       -v, --verbose
              print a message for each created directory

       -Z     set SELinux security context of each created directory to the default type

       --context[=CTX]
              like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX

       --help display this help and exit

 Manual page mkdir(1) line 1 (press h for help or q to quit)

画面が切り替わって以上のような画面になると思います。画面を元に戻したい場合は、「q」ボタンを押すとプロンプトの入力待ち状態に戻ります。

とこのようにヘルプを見ても違いが判ると思います。同じ名前のコマンドであっても似て非なるものだと認識してください。ただ基本的な使い方は同じなので、コマンド以降の文字列の入力方法が違うだけだと思っていてもいいと思います。

ここで気付くとは思うのですが、Linuxのヘルプであるmanコマンドの中身は英語で記されています。もちろん日本語に翻訳されたものもあるんですが、いちいち入れるほどのもんかと言われるとそうでもないし、そもそもmanの英語はそんなに難しいわけでもないですし、正直あまり見やすいものでもありません。


ですからググるとよく分かるんですが、Linuxコマンドの詳細が示されたサイトが複数見つかると思います。分かりやすく更に日本語で書かれてあったりするものですから、自分としてもそっちを利用することも多いです。本当にこのパラメータであってたかなとか確認程度でしかmanは使っていません。

と、ここでパラメータという言葉が出てきましたね。パラメータを日本語で示すと引数だと思うんですが、要するにコマンドに引き渡す情報の事です。それがファイル名だったり、特定の動作をさせるためのスイッチみたいなものだったりします。

manの方で言うと
-m
-p
-v
という文字列がパラメータにあたります。ハイフンとアルファベットの後に別途文字列を必要とするものもあったりします。それはおいおい見ていくことにしましょう。ここではコマンドを意図的に動かすための情報を与えてあげると理解しておきましょう。

コマンドはある程度、英語から類推できるものになっています。mkdirはmake directoryの略と思われます。先ほどのmanもmanualのmanかと思われますし、これから行うcdコマンドもchange directoryやcurrent directoryの略かと思われます。ちなみにパラメータもある程度、頭文字などを取って類推しやすくはなっていて、丸暗記しなくてもそこそこいけます。


それではcdコマンドでディレクトリを移動してみましょう。
$ cd testdir

これで先ほど作ったtestdirに移動できます。普通ディレクトリを作った後は中身は何も入っていませんよね。それを確かめてみます。現在のディレクトリの内容を確認するにはlsコマンドを使います。

これは何かの頭文字の語呂合わせではたぶんないです(LiStかも…)。ただホームポジションからキーが打ちやすいと聞いた覚えがあります。それだけ良く打つコマンドではあります。

Windowsのエクスプローラから見れば一目瞭然ですが、コマンド操作だといちいち操作が必要となります。lsと打っても何も出ないと思います。そこで詳細表示を出してみることにします。
$ ls -la
合計 0
drwxrwxrwx 0 root root 4096  1月 14 17:50 .
drwxrwxrwx 0 root root 4096  1月 14 17:50 ..


「-la」というのは先ほどのパラメータで「ls -a -l」とも分かち書きできますが、いちいちそう書くのは面倒なので通例はいっぺんに並べて書きます。コマンド作業では何度も同じことをするので、できるだけ簡略化をした操作が好まれる傾向にあるのです。

-aというパラメータはすべての情報を出し、-lというパラメータは内容をリスト形式にして詳細表示にするというものです。「-a」はall、「-l」はlistという意味なんでしょう。違う意味かもしれませんが、実際の挙動が把握できれば問題ありません。

.と..という表示がありますね。lsコマンド単体では出てきませんでしたが、-aパラメータで出てくるようになります。それがすべてという意味です。

「.」は現在のフォルダを示します。実際の使われ方として、相対パスで示す場合に「./hoge/foo/bar」などと書きます。この場合、今いる地点からhogeフォルダの中のfooフォルダの中のbarフォルダを指定するディレクトリの表現となります。

「..」は現在のフォルダが入っている上位のフォルダを示すディレクトリの表現です。これはWindowsでも同じかと思います。「cd ..」とすると上のディレクトリに戻れるというわけです。どんどん上に戻りたい場合は「cd ../../..」という風につなげていくといっぺんに移動できます。


さてリスト形式にして色々と情報が出てきました。

drwxrwxrwx 0 root root 4096 1月 14 17:50 .
drwxrwxrwx 0 root root 4096 1月 14 17:50 ..

なんじゃこりゃですよね。ここにはそこにあるファイルの使用権限やら、権限を持っているユーザーやグループ、ファイルの大きさや作成された時刻などが書いてあります。一番最後は先に見た現在位置のフォルダとその上に位置するフォルダの意味でした。

細かく説明すると他のコマンドの説明などを行わないといけないので、その時に説明するとして初めの文字の羅列ぐらいは書いておきます。

d: ディレクトリ(directory)
r: 読み取り権限(read)
w: 書き込み権限(write)
x: 実行権限(execute)

初めのdがディレクトリかどうかを示していて、
次の三文字がそのファイルの持ち主の権限を
その次の三文字がそのファイルのグループの権限を
最後の三文字がそれ以外のユーザーの権限を示しています。

仮にdrwxrwxrwxの部分が、drwxrw-r--だとすると

そのファイルのユーザーは、読めて書けて実行でき、
グループに属するユーザーは読めて書けるけど実行はできなくて、
それ以外のユーザーは読むことしかできない、となっています。


drwxrwxrwxの後ろは、ユーザーとグループになっています。上の例だとどちらもrootユーザーとrootグループになっていますが、/mnt/cなどのWindowsのディレクトリでフォルダを作成すると自分のユーザーではなくrootで作成されるみたいです。ちなみに/home/ユーザ名/などのディレクトリだと普通に自分のユーザー名で作成されるんですけどね。普通はそれが平常な動作です。

ファイルを所有するユーザーとグループを変更するには、それぞれchown, chgrpコマンドで変える事ができます。先の読み書きのパーミッションはchmodですね。chmodはともかくchown, chgrpは言うほど使わないので変えられるという事ぐらいは覚えておけばいいと思います。

ユーザーとグループの次の数字はファイルの大きさですね。ディレクトリはファイルシステムのブロックサイズが影響して4096bytesになっているようです。Linuxに限らずコンピュータは理詰めで、そうである理由が分かることが多いのがいいですね。

最後の日付と時間はタイムスタンプとなっていますが、たぶん作成した時間か更新した時間だと思います。しっかり調べたわけではないのであやふやですが、普通に考えればそうなんでしょう。


と一般的なlsコマンドの内容を説明するだけでこれですから、他のものを考えると面倒だなと思うでしょう。中にはわかりにくいものもあるけれども、これほど説明が必要なのに素っ気ない表示のものもそれほどは多くはないので気にする必要はないとは思います。ただこうすれば欲しい情報が出てくるという事は知っておくべきで、それを実際にやってみるというのは非常に大事だと思います。

コマンド作業は今後もやっていくので逐次勉強していくとして、もう一つの重要な作業であるテキストファイルの編集の仕方をやっていきたいと思います。

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

LinuxをWindowsで始める1 [Linux]

この記事はLinuxを始めたいけど何していいかわからない、程度の人をターゲットにしています。できれば多少なりともWindowsでプログラミング経験があればいいけど、なくても大丈夫だと思います。説明をする本人にしても、使おうとしたところしか使えないところがあるので、とりあえず使えるという事を前提に必要な事をできるだけ平易に使えていきたいと思います。

続きを読む


タグ:Linux入門
コメント(0) 
共通テーマ:資格・学び

エディタとSystemdが使いやすくてうれしかった。 [Linux]

Markdownがすんなり読めるようにAtomを入れてみたんだけど、なんか動作がもっさりしているというか、インストールが異様に時間がかかってちょっと辟易。Atomが流行ってた頃には手を全く付けなかったんだけど、メリットってどんなものなのかなぁ。最近、Sakura EditorとviとIDEのものしか使っていないので、正直あんまり頓着はないので何でもいいんだけどね。

何でもいいと言いながらGREPに近い検索ができた方がいいし、正規表現ができた方が何かと役に立つ。IDEだとデバッガと連動しているから、やっぱり開発には使った方が楽ができるよね。ただメモリ消費量が多くて重いけど、それさえ気にしなければエディタとコンパイラだけを使っているよりかは効率的ではある。というかデバッガって単体で使ったことがほとんどない。

Markdownを調べようとしたんだけど、正直亜種が多すぎて覚える気にはならなかあった。そういう意味でMarkdownエディタとかはお手軽なのかなと思う。ただプレビューを見せるだけのものが多くて、インラインで編集できるのってそんなになさそうな気がした。そこまでするほど重いものを望んでいるわけではないし、wikiにしてもmarkdownにしても自分で拡張した部分が多すぎるような気がしてならない。かといってHTMLゴリゴリ書く気にはならないからブログを使っているわけだが、Markdownでさえマークアップが面倒とさえ思えてきてしまう。まぁ一部HTMLのタグの簡易的な記法みたいなものだが、思ったよりも楽しめなかったのが残念でした。


Systemdを使って自分のアプリをデーモン化したのだが案外簡単だった。スクリプト書いて、二三のコマンドだけで立ち上がるようになった。/etc/init.d/に特殊なシェルスクリプトみたいなのを書くよりも、設定ファイルを書くだけのファイル操作を考えるとSystemdに移行する意味もあろうというものだ。しかし、なんで少なくない人がSystemdに反対していたのか理由がよく分からんな。使いやすくなって速くなって多くのディストロが取り入れた意味が分かろうものだが、この先進的なLinuxのシステムにおいても新興勢力をいいと思わない人がいるんだという事だ。

http://postd.cc/why-i-dislike-systemd/

正直、問題としている理由がそんなに重いものだとは思えない。というか、Linuxが技術偏重の人間が使い続ける事自体の方が問題があるのではと思う。どこかでダーティーな処理を受け持たないといけないという話であれば、集約できる作業ならそうしてしまった方がいい。今更aptやyumがない依存性解決を全部自分でやれという世界に戻れるか?それといっしょだろう。

コンピュータ言語でもそうだけど、複雑な処理は隠ぺいした方が本来の作業に集中できるのだ。OSを使うのを好きな人はいいかもしれないけど、ほとんどの人はそれを動かして何をするかが問題となってくるのであって、学ばなくていいという事ではないが、別に学ぶことがごまんとあるのが分からないとは言わせない。

それにしてもデーモン化する前までは、tmuxで立ち上げたままにしていたので、その分tmuxが使いづらくなっていた。Systemdは面倒なことを覚えなくて楽ができていい。手続きを簡単にしてできることを増やした方が断然いい。技術系の人間は俺はできるからいいけど、って奴が多すぎて反吐が出る。そんなことでは世の中は発展しない。パワステもオートマもない車の世界がないように、GEEKだけが台頭するような世界ではなくなっている。そもそも今どきカーネルを自分でコンパイルしないとできない事とかほとんどないしな。多くの人がブートできない状態にしてしまうのが関の山だろう。

と僕が言わなくても、ほとんどのディストリビューションがSystemdを取り入れていることから正常進化と考えるのが普通の人間なんじゃないかな。歴史も大切かもしれないけど、実際に現在使う人間の事を考えるのが世の中の常である。基本的にマッチョな世界ってのは嫌なんだよ。外に出ると使えないスキルでタコツボの中で鼻高々な奴らは見ていて辟易する。

コメント(0) 
共通テーマ:パソコン・インターネット