ubuntuのアップデートができない。。。
ちょっとubuntuのアップデートをしとこうかなと思って、
以下のコマンドでアップデートを流しました。
$ sudo apt -y update
するとなんかエラーっぽいものが。。。
エラーの箇所だけ抜き出すとこんな感じです。
...
省略
...
*** Error in `appstreamcli': double free or corruption (fasttop): 0x000000000120ae70 ***
...
省略
...
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
E: Sub-process returned an error code
ついでにこんなエラーの画面まで。。。
エラーの内容的には標準で入っている様々なパッケージが古いと怒られてます。
そりゃ古いってのわかってるからアップデートしようとしてるんですけど。。。
文言や古いといわれているパッケージを見た感じだと恐らく「appstream」ってやつが悪さをしている。
これはこいつをアップデートしようとしてるのに古いこいつのせいでアップデートできないという詰み状態なのでは・・・。
ここで少し調査のためにググってみたところめちゃくちゃ記事がありました。
www.hiroom2.com
ここに記載されている通りに、
$ sudo killall -KILL apt.systemd.daily $ sudo mv /etc/apt/apt.conf.d/50appstream /etc/apt/apt.conf.d/50appstream.disable $ sudo apt update -y $ sudo apt upgrade -y $ sudo mv /etc/apt/apt.conf.d/50appstream.disable /etc/apt/apt.conf.d/50appstream $ sudo apt update -y
を実行したらうまくいきました。
ただ、「$ sudo killall -KILL apt.systemd.daily」についてはプロセスが見つからないと怒られていました。
いろいろ調査している中で2回くらい何かを実行したのでその中でこのプロセスが殺されてたのかな。。。
次からはもう少し注意深く操作します。
アップグレードにはすごく時間がかかり、今アップグレード待ちでこの記事を書いていますw
その間にちょっと今回実行したコマンドについて調べてみます。
killall
まず最初に出てきた「killall」
これはその名の通りプロセスを殺す(終了させる)コマンドです。
似たようなコマンドでkillコマンドがあるそうですが、違いはプロセスの指定の仕方で、
killallはプロセス名
killはプロセスID(PID)
となっているそうです。
同じプロセスが複数起動している場合の一つを殺したい場合は「kill」コマンドですかね。
ちなみにPIDを調査する方法としては「top」コマンドが有効ですね。
$ top
実行するとこんな感じです。
標準だとCPUの使用量の多い順で表示されるようです。ターミナルの表示を下に伸ばすとどんどん出てきます。
また、以下のショートカットキーでソートを変更できます。
CPU順 Shift + p
メモリー順 Shift + m
実行時間順 Shift + t
これは重宝するでしょうねー。
mv
続いて「mv」コマンド。
これはなんとなく想像できましたがファイルやディレクトリの移動・名前の変更をするコマンドです。
使い方は
$ mv 移動元 移動先 $ mv 元の名前 変更後の名前
また、同じ名前のままで移動したい場合は移動先を省略することができる
$ mv 移動元ファイル名 移動先ディレクトリ名
もちろん現在の位置からの相対パスか絶対パスを書いてやる必要がある。
現在の位置のみで移動を行う場合はファイル名やディレクトリ名だけでいいはず。
あとついでにすごく使いそうなコマンドが「ls」コマンド
これは今いるディレクトリに何がいるかを表示してくれるコマンド。
ubuntuの場合はユーザのディレクトリ配下はこうなってます。
Windowsのユーザプロファイル配下とそっくりですね。
GUIで確認するとこんな感じ
lsコマンドは引数にオプションとしてパスも渡せるので相対パスで色々覗いてみます。
$ ls .. $ ls ../..
まあWindowsのdirコマンドと一緒ですよね。
1行目は親ディレクトリの配下に何があるのか見ています。
ここで見ると親ディレクトリには現在の位置である「regpon」ディレクトリ(ユーザのディレクトリ)しかありません。
GUIで確認するとこんな感じ
それじゃつまらないのでさらに上には何があるのか、親の親ディレクトリを見てみました。
色が違いますね。
色で種別を分けてるのでしょうが、紺がディレクトリ、水色がファイルで緑は何ですかね?
GUIで確認した感じだとディレクトリかと思ってましたが・・・。
GUIで確認するとこんな感じ
こう見ると、やはりこういうのはGUIがあったほうが確認も早くて直観的に理解しやすいですよねー。
でもGUIがつくとその分コンピュータが本来の動き以外にリソースを割いてしまうので、Webアプリを作るのであればLinuxのシェルでの操作をしっかりと覚える必要がありますね。
apt updateとapt upgrade
前の記事で紹介した、apt-getとaptは同じようです。ただ、apt-getのほうが古いとかなんとか・・・。(参考URL後述)
なのでaptでいいはずです。
それで、LinuxのOSのアップデートはWindowsアップデートと同じで、
まず更新対象を洗い出してダウンロードしてきます。
その後、アップデート内容を確認したのち(内容の確認はまた別のコマンド※1)アップグレードさせてやります。
この二段階のために実行コマンドが2つあるわけです。
オプション引数の-yは問い合わせがあった場合はすべて「y」と答える意味です。
おそらくアップデートするパッケージによっては、「~ですがよろしいですか」みたいな問いがシェル上で返ってきて、これに答えてやらねば一生進まないんでしょうな。
※1のコマンド
$ sudo apt list --upgradable
参考URL
linuxfan.info
あ、あとこういう実行時間の長いコマンド実行する際にお気をつけていただきたいのが、コンソール上での[Ctrl]+[C]です。
コンソール上でこれをやってしまうと処理が中断されて、コマンド受付状態に戻ってしまいます。
アップグレード中にこの記事を書いているため、参考のためコンソール上の文字をコピーしようとしてついつい癖で
[Ctrl]+[C]を押してしまい、アップグレードが中断されて泣きそうになりました。
すかさずもう一度実行したら、さっき中断した進捗からの再開だったのでよかったです・・・。
Windowsのコマンドプロンプトとは違い、左クリックでドラッグするだけでコピーできるみたいです。
Windowsのコマンドプロンプトはメニューバーからコピーを選択しないとだめでしたからね。
ちなみにペーストはマウスホイールのクリックです。
なんか斬新ですねw 知らないと気付かないよこれはww
でも操作をCUIメインだからこそそういった操作には気を使ってくれてんのかなって感じますね。
とりあえず今日学んだコマンドについては以上ですね。
それにしてもubuntuのインストールより時間がかかりますね。。。
初期状態だから仕方がないか。これがいやだったらGUIのほとんどないサーバ版のubuntuを入れたらいい話ですしね。
私はデスクトップ版で一通り、CUIでやったことをGUIで確認しながら理解を深めていきたいのでしばらくはこのubuntu 16.04 デスクトップ版で勉強していきます。
と、そうこうしてたらようやく終わったようです。
ふぅー。もうこんな時間だよー。
アップデートし始めて淹れたコーヒーが冷め切ってまずくなっちゃいました。
アップデートしてる間にこんなに書けるとは。ブログのほうは捗ったので良しとしますw