ためすう

unix のln について調べた

2018-09-22

目的

unix で ln をいまいち理解できていないので、調べてみました。

リンクについて

まず、リンクには2種類あります。

  • ハードリンク
  • シンボリックリンク

ハードリンクとは

(以下 man コマンドより引用)

     By default, ln makes hard links.  A hard link to a file is indistinguishable from the original direc-
     tory entry; any changes to a file are effectively independent of the name used to reference the file.
     Hard links may not normally refer to directories and may not span file systems.

シンボリックリンクとは

(以下 man コマンドより引用)

     A symbolic link contains the name of the file to which it is linked.  The referenced file is used when
     an open(2) operation is performed on the link.  A stat(2) on a symbolic link will return the linked-to
     file; an lstat(2) must be done to obtain information about the link.  The readlink(2) call may be used
     to read the contents of a symbolic link.  Symbolic links may span file systems and may refer to direc-
     tories.

使ってみる

ハードリンク

$ ln test1.txt test1_to_hard.txt
$ ls -l
-rw-r--r--  2 xxxxx  staff     4 10  4 20:14 test1.txt
-rw-r--r--  2 xxxxx  staff     4 10  4 20:14 test1_to_hard.txt

シンボリックリンク

$ ln -s test2.txt test2_to_symbolic.txt
$ ls -l
-rw-r--r--  1 xxxxx  staff     5 10  4 20:14 test2.txt
lrwxr-xr-x  1 xxxxx  staff     9 10  4 22:55 test2_to_symbolic.txt -> test2.txt

リンクを消す方法は下記です

$ unlink test1_to_hard.txt
$ unlink test2_to_symbolic.txt

unix のコマンド履歴を見て、実行する方法

2018-09-22

目的

unix のコマンドの履歴を一覧で見て、それを実行します。

方法

$ history
502  ls
503  git diff

history の結果が上記のとき

$ !502

とすると、 ls を実行することができます。

おまけ

シェルが bash のとき、履歴の保存数は下記に設定されています。

$ echo $HISTSIZE

JavaScript の object

2018-09-09

目的

JavaScript の object についての説明です

やってみる

オブジェクトは、名前のついたプロパティの集まり、つまりキーと値の組のリスト(他の言語でいう連想配列とほぼ同じ)にすぎません。

var book = {
    title: 'book_title',
    getTitle: function () {
        return this.title;
    }
};
console.log(book.title);
console.log(book.getTitle());

// 結果
book_title
book_title

unix で os の時間を設定する

2018-08-19

目的

os の時間設定ををします。

Cent OS で時刻設定する

$ sudo cp /etc/localtime /etc/localtime.org
$ sudo ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

$ sudo vi /etc/sysconfig/clock
[変更前]
UTC=false

[変更後]
ZONE="Asia/Tokyo"
UTC=false
ARC=false

補足

UTC について

引用 > UTCとは、全世界で時刻を記録する際に使われる公式な時刻。天体観測を元に定めるGMT(グリニッジ標準時)とほぼ同じ

ARC について

引用 > true 又は yes — ARC コンソールの42年の時間オフセットが有効になっています。このセッティングは、ARC- 又は AlphaBIOS ベースの Alpha システム のみの為のものです。この値は、通常の UNIX エポックが使用中という意味です。

参考URL

サイトの URL を変更するときにやること

2018-08-19

目的

運営しているブログの URL を変更するときにやることをまとめました。

やること

1. Google の検索インデックスから削除する

Google の Search Console から既にインデックスされている URL を削除します。 下記から削除したい URL を登録します。

2. 変更する前の URL にアクセスされた場合、リダイレクトする

既にリンクを貼ってもらった URL の可能性があるので、

301 Moved Permanently(恒久的な移転)リダイレクトするようにします。

参考

Python で CSV ファイルを読み込むときに発生したエラー「UnicodeDecodeError」を解決する

2018-08-12

目的

Python から CSV ファイルを読み込むとしたら下記のエラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

このエラーの解決していきたいと思います。

ファイルを utf-8 で読み込むようにする

import csv

with open('data.csv', 'r', encoding="utf_8") as file:
    reader = csv.reader(file)

    for row in reader:
        print(row)

※ data.csv は自分が読み込みたいファイルに変更してください。

しかし、エラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

ファイルを utf-8 に変換する

ここで nkf 「Network Kanji Filter」を使い文字コードを変換します。

まず nkf コマンドをインストールします。

(すでにインストールしている人はスキップしてください)

$ brew install nkf

文字コードを変換していきます。

# 現在の文字コードの確認
$ nkf -g hogehoge.csv
Shift_JIS

# 文字コードを UTF-8 に変換します
$ nkf -w --overwrite hogehoge.csv

# 変更後の文字コードの確認
$ nkf -g hogehoge.csv
UTF-8

文字コードが変わったあと、下記のコードを実行すると読み込むことができました。

import csv

f = open('hogehoge.csv', 'r')
dataReader = csv.reader(f)
for row in dataReader:
	print(row)
f.close()

参考

Anaconda 環境に pip コマンドでインストールする

2018-08-12

目的

Anaconda を利用している時、 conda コマンドでインストールできないライブラリがありました。

pip コマンドでインストールした時のメモになります。

方法

Anaconda 環境の確認

$ conda info -e
# conda environments:
#
base                  *  /anaconda3
hogehoge               /anaconda3/envs/styletrans

任意の Anaconda 環境を activate する

今回は base 環境にインストールしたいので、

$ source activate base

とします。

pip コマンドでインストールする

(base) $ pip install hogehoge

※ hogehoge はインストールしたいライブラリに変更してください

これで無事にインストールすることができました。

参考

静的サイトのホスティング先を Github Pages から Netlify へ移行する

2018-08-05

目的

静的サイトを Github Pages で運用していたのですが、 Netlify へ移行することにしました。

理由としては、 jekyll でサイトを構築しており、利用したいプラグインが使えなかったためです。

Github 側でビルドするときに --safe オプションが true になるため、利用できないプラグインがあります。 (自作のプラグインも不可)

ローカルでビルドしてから、Github に push するという手もありましたが、

Netlify という良さそうなホスティングサービスを見つけたので

思い切って移行することにしました。

大まかな手順を記します。

手順

Github Pages で利用しているリポジトリをコピーする

Github のリポジトリで1度、Github Pages の設定をしてしまうと、

Github Pages ではないようにするには

  • ブランチ削除
  • リポジトリ削除

しかないようでした。

Github Pages で初期に発行されるデフォルトのドメインが残るのが嫌だったので、

Github のリポジトリをコピーします。

Netlify でアカウントを作成して、リポジトリを指定

次に Netlify に先ほど作った、リポジトリを指定してあげます。

Netlify についてはこちら

Netlify: All-in-one platform for automating modern web projects.

設定するのは数分で出来ました。

すると、ビルド、デプロイと実行されていきます。

Netlify が付与してくれた新しいドメインでサイトが閲覧できるようになるまでも、数分でした。

Netlify に独自ドメインを設定する

自分が持っているドメインに Netlify のネームサーバーを指定します。

ネームサーバーの設定変更が浸透するまで待ちます。

※ 自分は手順を間違えてサイトが閲覧できなくなる状態が数時間続いてしまいました。

Github Pages のドメイン設定を外して、リポジトリの削除

Netlify のネームサーバーが浸透したら、以前使っていた Github Pages のリポジトリに設定してある

自分が所有しているドメインを削除します。

問題ないことが確認できたら、リポジトリを削除します。

(注意) Goolge Analytics について

Google Analytics で計測されなくなるという問題がありました。

Github Pages では下記の設定をすれば、Goolge Analytics で計測できるようになります。

_config.yml

google_analytics: UA-XXXXXXX

今回、Netlify に移行したので計測できなくなっていました。

トラッキングコードを Netlify の

Settings > Build & deploy > Snippet injection

に埋め込みます。

どのサーバーでも計測できるように、トラッキングコードをソースコードに記載するのも良いかもしれません。

参考

Anaconda をインストールする

2018-08-05

目的

Anaconda をインストールします。

Anaconda は、データサイエンスに特化したプラットフォームを提供します。

導入

インストーラーをダウンロード

下記からインストーラーをダウンロードして、インストールしていきます。

インストール後、少し使ってみる

現在使用している環境は下記で見ることができます。

$ conda info -e
# conda environments:
#
base                  *  /anaconda3

xgboost、plotly をインストールする

Kaggle というサイトで、チュートリアルコンペティションに参加してみました。

ここで、チュートリアルを進めて行くと、xgboost plotly をインストールする必要が出てきました。

xgboost をインストールします。

$ conda install -c conda-forge xgboost

plotly をインストールします。

$ conda install -c plotly plotly

参考

vagrant で共有フォルダのマウントに失敗するので、解決を試みる

2018-08-05

目的

Vagrant で仮想マシンは起動できるのですが、共有フォルダのマウントに失敗しています。

発生しているエラー

    default: /vagrant => [動かしている環境]
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=500,gid=500 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

対応手順

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.15.1)'!
$ vagrant vbguest --status
[default] GuestAdditions versions on your host (5.2.6) and guest (4.3.8) do not match.

guest が古いので、vbguest プラグインで更新します。

$ vagrant vbguest
[default] GuestAdditions versions on your host (5.2.6) and guest (4.3.8) do not match.
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * remi-safe: mirrors.thzhost.com
 * updates: ftp.jaist.ac.jp
No package kernel-devel-2.6.32-573.7.1.el6.x86_64 available.
Package gcc-4.4.7-18.el6.x86_64 already installed and latest version
Package binutils-2.20.51.0.2-5.47.el6_9.1.x86_64 already installed and latest version
Package 1:make-3.81-23.el6.x86_64 already installed and latest version
Package 4:perl-5.10.1-144.el6.x86_64 already installed and latest version
Package bzip2-1.0.5-7.el6_0.x86_64 already installed and latest version
Nothing to do
Copy iso file /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
Mounting Virtualbox Guest Additions ISO to: /mnt
Installing Virtualbox Guest Additions 5.2.6 - guest version is 4.3.8
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.6 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 5.2.6 of VirtualBox Guest Additions...
You may need to restart your guest system to finish removing the guest drivers.
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-2.6.32-573.7.1.el6.x86_64
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-2.6.32-573.7.1.el6.x86_64
An error occurred during installation of VirtualBox Guest Additions 5.2.6. Some functionality may not work as intended.
In most cases it is OK that the "Window System drivers" installation failed.
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-2.6.32-573.7.1.el6.x86_64
groupadd: group 'vboxadd' already exists
modprobe vboxguest failed
The log file /var/log/vboxadd-setup.log may contain further information.

ゲスト側の /var/log/vboxadd-setup.log は下記が残っていました。

Building the main Guest Additions module.
/tmp/vbox.0/Makefile.include.header:141: *** Error: unable to find the headers of the Linux kernel to build against. Specify KERN_VER=<version> (currently 2.6.32-573.7.1.el6.x86_64) and run Make again.  Stop.
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
modprobe vboxguest failed

ここでエラーを追うのはストップしようと思い Vagrant を再起動すると、共有フォルダがマウントされるようになりました。

$ vagrant halt
$ vagrant up

※注意: 根本解決はしていません

参考URL