20200330のLinuxに関する記事は5件です。

Linuxでclipboardに簡単にコピー

fileの中身などをclipboardにコピー

環境はUbuntu18.04でzshです。
ますはxclipをインストールします。

$ sudo apt install xclip

そして.zshrcの末尾に以下を追記します。
zshを使っていない場合は.bashrcに追記すればいいかと思います。

~/.zshrc
alias -g CC='| xclip -selection c'

zshを再起動したら完了です。
使い方は、

$ cat hoge.txt CC

これでファイルの中身をクリップボードへコピーできます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

新・中古PCに Acro linux をインストール

中古のPCを買いました、実に2年ぶり・・

新・中古PCは10年選手の
DELL Latitude E5510 Core i5 M560 DVD 無線 4G(金3000円
HDD欠だけど そんなの関係ねえ
早速、手持ちの320Gを突っ込んで

Arco linux (Archのフォーク) Install

何が良いって、裏パネルを外すだけで簡単アクセス!
CPU換装も実に簡単そうですが
i5 4コアに不満はないので、このまま使います。
dell-latitude-e5510-4go-160go-windows-7-pro-port-serie.jpg

ArcoLinux は日本語でインストールしましたが
日本語化には .Xprofile の新規追加が必要でした。
こちらの記事で紹介しております。
Archman Linux 日本語化 ←クリック(新窓)

ご参考になりますでしょうか?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS EC2】Amazon Linux2にMySQLのclientだけをインストールしてRDSに接続する方法

概要

  • AWS EC2(AMI: Amazon Linux 2)にMySQLのクライアントだけをインストールしてRDS上のMySQLに接続する

環境

  • AWS EC2
    • OS: Amazon Linux 2
    • AMI ID: amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2
  • RDS
    • engine: MySQL Community
    • version: 8.0.17

構築手順

1. すでにインストールされているmariadbを取り除く

  • Amazon Linux2にはMariaDBがデフォルトでインストールされている
  • 干渉したら困るので念のため削除しておく
$ yum list installed | grep mariadb
mariadb-libs.x86_64                   1:5.5.64-1.amzn2               installed
$ sudo yum remove mariadb-libs
Removed:
  mariadb-libs.x86_64 1:5.5.64-1.amzn2
Dependency Removed:
  postfix.x86_64 2:2.10.1-6.amzn2.0.3
Complete!

2. mysql8.0のリポジトリを追加する

  • yum infoでmysql8.0がインストールできるか確認する
  • インストールできないのでmysql8.0のリポジトリを追加する
$ yum info mysql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
31 packages excluded due to repository priority protections
Error: No matching Packages to list

$ sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
Installed:
  mysql80-community-release.noarch 0:el7-3

3. mysql8.0のリポジトリを有効化する

  • mysql80-community-release-el7-3.noarchの中にmysql5.7も入っている
  • 今回はmysql8.0をインストールしたい
    • mysql5.7のリポジトリを無効化し、mysql8.0のリポジトリを有効化する
$ sudo yum-config-manager --disable mysql57-community
$ sudo yum-config-manager --enable mysql80-community

4. mysql-community-clientをインストールする

$ sudo yum install -y mysql-community-client
Installed:
  mysql-community-client.x86_64 0:8.0.19-1.el7
Dependency Installed:
  mysql-community-common.x86_64 0:8.0.19-1.el7                               mysql-community-libs.x86_64 0:8.0.19-1.el7
  ncurses-compat-libs.x86_64 0:6.0-8.20170212.amzn2.1.3
Complete!

$ mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

5. RDSに接続する

  • EC2からRDSへの3306ポートの通信は許可してあるものとする
$ mysql -h hoge.rds.amazonaws.com -P 3306 -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.03 sec)

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux Mint でFolding@Homeして新型コロナウイルスの解析に貢献する

概要

Folding@Homeはウイルスのタンパク質解析などを行うために、個人が持っているPCの処理能力を使って解析しようというプロジェクトです。昔、UFOからの電波を解析する似たような考え方のプロジェクトがありましたね。

プログラムを実行するとFolding@Homeから解析するユニットを割り当てられ、それをダウンロードして解析処理を実行、終わったら結果をアップロードすることの繰り返しとなります。

Folding@Home自体は必ずしも新型コロナウイルス(COVID-19)に特化したものではなく、それ以前からあるようですが、現在は対象をデフォルトの Any に設定しておくと新型コロナウイルスを優先的に解析するようです。私も少しでもCOVID-19に早く終息してほしい、罹患しても薬で早く治って命を落とす人がいなくなればいいと思って自宅のLinuxPCで参加しています。

Windowsでやる方法は Folding@Home Setupに書いておられますので、そちらを参照。
ここではLinux MintやUbuntuで貢献する手順を記します。

インストール

必要なパッケージをダウンロード

$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-stable-64bit/v7.5/fahclient_7.5.1_amd64.deb
$ wget https://download.foldingathome.org/releases/public/release/fahcontrol/debian-stable-64bit/v7.5/fahcontrol_7.5.1-1_all.deb
$ wget https://download.foldingathome.org/releases/public/release/fahviewer/debian-stable-64bit/v7.5/fahviewer_7.5.1_amd64.deb
$ sudo dpkg -i --force-depends fahclient_7.5.1_amd64.deb
$ sudo dpkg -i --force-depends fahcontrol_7.5.1-1_all.deb
$ sudo dpkg -i --force-depends fahviewer_7.5.1_amd64.deb

自分はユーザー登録とかはせずに匿名で参加しました。
インストールが完了すると、デーモンモードで自動的に走ります。私はコマンドラインで行いたいのでサービスは止めておきます。

$ sudo systemctl stop FAHClient.service
$ sudo systemctl disable FAHClient.service

CPUで実行

私のマシンは6コア12スレッドであるため、以下のように実行します。

$ FAHClient --client-threads=12 --smp=true --cpus=12

ちなみにユーザー登録してpasskeyを取得済みの場合は以下のように実行

FAHClient --client-threads=12 --smp=true --cpus=12  --user=<username> --passkey=<passkey>

<username><passkey> には自分が登録したユーザー名と、そのときメールで送られてきたpasskeyを指定。

ほどなくして、folding@homeのサーバーからユニットをダウンロードして解析が始まります。
解析が終わると結果がfolding@homeにアップロードされ、自動的に次のユニットのダウンロードに入ります。私のマシン( 6コア / 12スレッド / 2.60GHz [ 最大4.50GHz ] / 12MBキャッシュ)では約1時間弱で1ユニット分の解析が終わります。

本当にちゃんとコアを使いこなしているか確認したいときはtopコマンドを見ればだいたいわかります。
左のターミナルで実行しているtopで FAHCore_a7 のCPU使用率がが1200%近い数値を出しているので間違いなさそうです。
Screenshot from 2020-03-29 12-34-46.png

止めたいときは Ctrl-C 、 走らせたいときは上記コマンドで走らせておけばいいです。
GPUで走らせるともっとは早いと思いますが、それには色々めんどくさそうなのでまた機会があれば。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

シェルスクリプトやってみようよ

Linux、コマンド、シェル、、、、そういう類の食わず嫌いを克服しました!!
この記事では、私が参考にさせていただいたサイトを紹介しながら、疑問点や解釈を補足していきます。
この記事が、「やってみよかな」「黒い画面こわい」と思っている方の一助になれば幸いです。

シェルスクリプトって何?

これはいろいろなところで解説されていますが、私の解釈でひとことで言うとPCへの命令をひとまとめにしたプログラムです。

たとえば、ファイル名を変更したいとき。
複数あるファイル名の「試験」と「テスト」の文言の揺らぎを統一したいときに、ファイルやディレクトリを指定して一気にリネームする。とか。

もうひとつ例、実行したコマンドのログのファイルを毎日作成したい(ロギング、というらしい)。とか。
・・・まって、それはバッチ処理のことじゃないの??と思い、調べました。
→ https://wa3.i-3-i.info/word11221.html
どうやらシェルスクリプトとバッチファイルは役割は同じで、ベースの世界が違うだけらしい。

スクリプト作成方法と実行方法

macOSの方は環境構築等なしでターミナルから実行できますが、Windowsの方は準備が必要です。「Windows Linux」等でググってみてください:bow_tone1:

以下のスクリプト作成方法と実行方法を参考にしました↓
https://udemy.benesse.co.jp/development/web/shellscript.html

エディタはVi(ヴィーアイ)を利用していますが、テキストエディタならだいたいなんでもいけるはず。
最近は、Viの進化版であるVim(ヴィム)が人気らしい。
ViやVimは設定すればコードの色分けができますが、今回は割愛します。
VS Codeだと自動で色分けしてくれて見やすいです。優しい。

シェルスクリプトの基本を叩き込む

以下をひととおり学習しました↓
http://motw.mods.jp/shellscript/tutorial.html

比較演算子の覚え方

-eqは分かるけど、-gtとか-leとかはパッと使いたいけど覚えにくい。。。
英語を知ると少しだけ覚えやすくなりますね!

演算子     英語 意味
eq equal x = y
ge greater than or equal to x >= y
gt greater than x > y
le less than or equal to x <= y
lt less than x < y
ne not equal x != y

実用的なスクリプト作ってみよう

その1:ファイル名を一括リネームする

以下のサイトを参考にしました
http://motw.mods.jp/shellscript/rename.html

その2:バックアップフォルダにファイルやフォルダをコピーする

こちらは自分で考えて作成してみました。

make_bk.sh
#!/bin/bash
read -p "バックアップをとりたいファイル名またはフォルダ名を入力してください:" ary
echo $ary

#入力値がない場合、エラーメッセージを表示し終了する
if [ -z $ary ];
then
  echo "バックアップを取りたいファイル名またはフォルダ名を入力してください"
  exit 1
fi

#バックアップフォルダを作成。-pオプションで、フォルダが存在しないときだけ新規作成される
bkdir=bk_$(date +%Y%m%d)
mkdir -p $bkdir

#入力されたファイルまたはフォルダをひとつづつ読み取る
for target in ${ary[@]}
do
  #コピーを作成し、バックアップフォルダに格納する
  [ -d $target ] && cp -r $target $bkdir/$target || cp $target $bkdir/$target
done

このスクリプトでは、ファイルやフォルダの数を限定していないので、入力を受け付けるときに配列を利用しました。
配列の使い方は、以下を参考にしました。
https://www.atmarkit.co.jp/ait/articles/1905/22/news004.html

以下の部分について。

[ -d $target ] && cp -r $target $bkdir/$target || cp $target $bkdir/$target

cpコマンドでは、フォルダ(=ディレクトリ)をコピーするときは「-rオプション」が必要なため、$targetがディレクトリかどうか判断してからcpコマンドを実行しています。
他に良い方法ありましたらご教示いただけると嬉しいです。

実行してみましょう

実行前のフォルダ構成
 tmp
  ├── make_bk.sh
  └── test.txt   //こいつをコピーします

実行します

$ bash make_bk.sh
バックアップを取りたいファイル名またはフォルダ名を入力してください:test.txt
test.txt
実行後のフォルダ構成
 tmp
  ├── bk_20200329   //新規作成されたフォルダ
  │   └── test.txt  //コピーされたファイル 
  ├── make_bk.sh
  └── test.txt

:blush:

次は、
フォルダごとコピー&バックアップフォルダが存在している場合は対象をコピーするだけ
を確認します。

実行前のフォルダ構成
 tmp
  ├── bk_20200329
  │   └── test.txt
  ├── make_bk.sh
  ├── test.txt
  └── test2   //こいつをコピーします
      └── test2.txt  //同時にコピーされるはず

実行します

$ bash make_bk.sh
バックアップを取りたいファイル名またはフォルダ名を入力してください:test2
test2
実行後のフォルダ構成
 tmp
  ├── bk_20200329
  │   ├── test.txt
  │   └── test2          //コピーされたフォルダ 
  │       └── test2.txt  //一緒にコピーされたファイル
  ├── make_bk.sh
  ├── test.txt
  └── test2
      └── test2.txt

:blush::blush::blush:

おまけ:便利なLinuxコマンド

学習していく中で「便利だな、使いそうだな」と思ったコマンドのメモです。
◆historyコマンド実行時に日時も表示させたい
 参考:https://linuxfan.info/add-datetime-to-history
◆作業ログを記録したい
 参考:https://dev.classmethod.jp/articles/scriptcommand/

おわりに

基本は掴めたはず!何事もやってみるもんですね。
今回の目的はスクリプトに慣れることだったので、作成したスクリプトの実用性を問われるとなんとも言えませんが、
これから作業していく中で「これ自動化したい」「このコマンドまとめられる!?」と思ったときに作れそうな気がするので、時が来るのを楽しみにします、、、
次の段階として、実行速度や再利用性などにも気を遣えるよう勉強していきます…!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む