20200322のLinuxに関する記事は8件です。

Linuxのファイルとディレクトリのパーミッションについて

Linux上でのファイルとディレクトリの権限ごとの挙動を忘れがちなのでざっと説明用にまとめてみる。
chmod で変更するやつ

権限のみかた

$ ls -l

で、カレントディレクトリにあるファイルやディレクトリの権限を見れる

drwxrwxrwx. 2 core core 4096 Mar 22 11:02 dir
-rwxrwxrwx. 1 core core    0 Mar 22 11:02 file

一番ひだりの d がディレクトリか否かを表してて、
その後ろの rwx は3文字で1セット。
左から順番に、
所有権のあるユーザの権限、所有権のあるグループに所属するグループの権限、その他のユーザの権限
を表している。

r は読み
w は書き
x は実行
の権限で

-rw-r--r--. 1 core core 0 Mar 22 11:05 foo

上記のようになっている場合は
foo というファイルに対しては
core というユーザが rw (読み書き)の権限があって、
それ以外のユーザは r (読み)の権限しかないことを表す。
なお、rootユーザは問答無用ですべての権限を持つ。

ファイル

特定のユーザ(グループ)以外には読ませたくないようなファイルや、特定のユーザ(グループ)からしか更新できないようなファイルを作りたいときに使用することが多い。

デフォルトの権限

ターミナルでファイルを作成すると 0644 の権限になる

core@dev ~/work $ touch file
core@dev ~/work $ ls -l
total 4
-rw-r--r--. 1 core core 0 Mar 22 11:08 file

書き込み権限

core@dev ~/work $ chmod 444 ./file
core@dev ~/work $ ls -l
total 4
-r--r--r--. 1 core core 0 Mar 22 11:08 file
core@dev ~/work $ echo "hogehoge" > file
-bash: file: Permission denied

特定のユーザ以外に書き込みをさせたくないファイルを扱うときに使う。
下手に書き込むと壊れるようなファイルとか。
書き込み権限がないファイルを削除しようとすると警告がでる。

core@dev ~/work $ touch file
core@dev ~/work $ chmod 400 file
core@dev ~/work $ ls -l
total 4
-r--------. 1 core core 0 Mar 22 11:20 file
core@dev ~/work $ rm file
rm: remove write-protected regular empty file 'file'?

読み込み権限

core@dev ~/work $ chmod 000 ./file
core@dev ~/work $ ls -l
total 4
----------. 1 core core 0 Mar 22 11:08 file
core@dev ~/work $ cat file
cat: file: Permission denied

特定にユーザ以外に読み込みさせたくないファイルを扱うときに使う。
秘匿情報を含む情報を扱うときとか。

実行権限

ファイルを実行する権限
スクリプトとかバイナリに使う

実行できないようなただのテキストファイルに付与しても意味ない

core@dev ~/work $ echo "hogehoge" > file
core@dev ~/work $ chmod 700 ./file
core@dev ~/work $ ls -l
total 8
-rwx------. 1 core core 9 Mar 22 11:22 file
core@dev ~/work $ ./file
./file: line 1: hogehoge: command not found

bashで実行した場合

core@dev ~/work $ echo "echo hogehoge" > file
core@dev ~/work $ chmod 700 ./file
core@dev ~/work $ ls -l
total 8
-rwx------. 1 core core 14 Mar 22 11:22 file
core@dev ~/work $ ./file
hogehoge

ターミナルやプロセスとして実行できるように付与することがほとんど

ディレクトリ

デフォルトの権限

core@dev ~/work $ mkdir foo
core@dev ~/work $ ls -l
total 8
drwxr-xr-x. 2 core core 4096 Mar 22 11:25 foo

デフォルトはファイルと違って先頭を除くと
rwxr-xr-x になるので、ディレクトリの場合は
所有権のあるユーザは rwx の権限で
それ以外のユーザは r-x の権限になる

書き込み権限

core@dev ~/work $ mkdir foo
core@dev ~/work $ ls -l
total 8
drwxr-xr-x. 2 core core 4096 Mar 22 11:38 foo
core@dev ~/work $ chmod 500 ./foo/
core@dev ~/work $ ls -l
total 8
dr-x------. 2 core core 4096 Mar 22 11:38 foo
core@dev ~/work $ touch foo/test
touch: cannot touch 'foo/test': Permission denied

書き込み権限がない場合はディレクトリ以下にファイルを配置できなくなる
ファイル単位ではなくディレクトリ単位で保護したいときに使う。

読み込み権限

core@dev ~/work $ mkdir foo
core@dev ~/work $ chmod 000 ./foo/
core@dev ~/work $ ls -l foo/
ls: cannot open directory 'foo/': Permission denied

ディレクトリにアクセスできないので ls などで参照できなくなる

実行権限

core@dev ~/work $ mkdir foo
core@dev ~/work $ touch foo/bar
core@dev ~/work $ chmod 600 ./foo/
core@dev ~/work $ ls -l foo/
ls: cannot access 'foo/bar': Permission denied
total 0
-????????? ? ? ? ?            ? bar

ディレクトリに実行権限がない場合は、配下のファイルへのアクセス権がなくなる。
そのためファイルの情報自体にアクセスができなくなる。
ファイルの情報にアクセスできず権限が不明なため、読み書きもできなくなる。
ディレクトリへの読み書きの権限はあるので、 chmod でディレクトリの権限を書き換えることはできる。

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

direnv(linux)

はじめまして

みなさんはじめまして。本日やっと問題解決し、雄叫びをあげましたkyonです。
備忘録として初投稿いたします。
どうぞよろしくお願いいたします。

環境

CentOS Linux release 8.1.1911 (Core)
mysql Ver 8.0.17 for Linux on x86_64 (Source distribution)
Visual Studio Code バージョン: 1.43.1

タイトルにもありますとおりlinuxでdirenvを使いたく、以下URLを参考とさせていただき、
参考URL Linuxでdirenvを使う
.envrcファイルを作成し、Railsプロジェクトの /binディレクトリにパスを通すところまですんなりとできましたが、その後ずっとコイツと戦っておりました。

Access denied for user 'ENV['MYSQL_DATABASE']'@'localhost' (using password: YES)

多分一週間くらい戦ったと思います。
調べれば直接パスワードをdatabase.ymlへ記述すればいいことは知っていましたが、先々のことを考えた結果direnvを使うことにしました。
が、しかしどうしても分からず。。

.envrc
export 'DATABASE_USERNAME'="root"
export 'DATABASE_PASSWORD'="password" ←mysqlのパスワード

。。。。。?

database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  username: ENV['DATABASE_USERNAME']
  password: ENV['DATABASE_PASSW0RD']

。。。。。。。。??

ただ調べていくうちに.envrcファイルは合ってそうだな、と思っていてdatabase.ymlのusernameとpasswordの書き方がずっと不明でした。

今日ふとdatabase.yml の管理方法いろいろ
こちらのURLに辿り着き、問題解決したと言うことです。

問題解決

database.yml には <%= ... %> で Ruby コードを埋め込むことができます。

そしてdatabase.ymlを以下のように記述しました。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DATABASE_USERNAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>

埋め込んでなかったんですね。
お恥ずかしい。

駄文ですが最後まで読んでいただき、ありがとうございました。
これを機に投稿していきたいと思います。
kyonでした。

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

Docker/Kubernetesなど コマンド一覧

仕事および趣味で利用した、Docker/Kubernetesのコマンドの備忘。
ついでに使わないとすぐ忘れるLinuxなどその他色々コマンドの情報のせます。。

Docker

コマンド 概説
docker ps 稼働コンテナの一覧表示 実行中:docker ps
終了状態含む:docker ps -a
docker images ローカルで保持しているイメージリストを表示
docker rmi [id名] ローカルのイメージを削除 削除できない場合は、 docker rmi [id名] -f で実行する
-f:強制的に削除
docker build [-t リポジトリタグ] Dockerfileからイメージのビルド
docker pull [コンテナイメージ] コンテナイメージのダウンロード
docker run [コンテナイメージ] コンテナイメージを指定して起動
docker run -it [image名] shell コンテナを起動して対話型シェルを実行 docker run -it centos bash
docker logs [Container ID] ログ表示
docker hisotry [images ID] イメージへの履歴
docker tag ローカルイメージ名:タグ リモートリポジトリ:タグ名 ローカルリポジトリのイメージをリモートリポジトリ名にタグ付け
docker push タグ付けしたリモートリポジトリ名 リモートリポジトリへの登録
docker commit containerID image:tag コンテナイメージの登録
docker start containerID コンテナの開始
docker stop containerID コンテナの停止
docker stop $(docker ps -q) 稼働中の全コンテナの停止
docker network ls コンテナネットワークをリスト表示
docker network inspect [networkID] コンテナネットワークの詳細設定を表示
docker network create [ネットワーク名] コンテナネットワークを新規作成 docker network create mynet1
docker built -t イメージ名:tag名 DockerfileのPATH名 Dockerイメージの作成 docker build --tag mydaemon:0.1 ./Dockerfile

Kubernetes

コマンド 概説
docker ps 稼働コンテナの一覧表示
TD TD
TD TD

Linux

ほぼCent0Sの例です。

Cent0S

コマンド 概説
systemctl list-unit-files -t service サービス一覧と自動起動設定の確認 (旧 chkconfig --list)
cat /etc/redhat-release バージョン確認
yum list installed yumでインストールされた一覧の確認
nslookup dns(ip) DNSサーバーへの名前解決問い合わせ

参考

Docker reference
https://docs.docker.com/engine/reference/commandline/build/

Docker コマンドチートシート
https://qiita.com/wMETAw/items/34ba5c980e2a38e548db

awkコマンド
https://www.atmarkit.co.jp/ait/articles/1706/08/news015.html

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

【Linux】遺伝統計ソフトPLINKでeQTL解析

はじめに

最近、遺伝統計ソフトのPLINKを使い始めた。
この本を参考にPLINKの使い方を勉強。

ゼロから実践する 遺伝統計学セミナー

この本はWindows用に書かれているので、Macでのやり方を備忘録的に書いていく。
今回は、PLINKでeQTL解析をやってみた。

参考

PLINKの基本的な使い方、GWAS解析方法は以前に投稿済み
【Linux】遺伝統計ソフトPLINKを使ってみた
【Linux】遺伝統計ソフトPLINKでGWAS

使うデータ

bed|bim|fam形式ファイル

  • SNP_QC.bed
  • SNP_QC.bim
  • SNP_QC.fam

SNPをフィルタリング済みのファイル

表現型ファイル

  • Exp_BLK.txt

BLK遺伝子の発現量データ

eQTL解析

eQTL解析では、遺伝子発現量という量的形質に対して解析するため、線形解析を行う。
使うコマンド一覧。
--pheno:GWASに使う表現型ファイル(今回はExp_BLK.txt)を入力
--linear:線形回帰を実施
--ci 0.95:95%信頼区間を出力

GWAS(線形解析)
$ ./plink --bfile SNP_QC --out SNP_QC_Exp_BLK --pheno Exp_BLK.txt --linear --ci 0.95

作業ディレクトリにSNP_QC_Exp_BLK.assoc.linearという名前のファイルが出力されているのを確認して、テキストエディタで開く。
1列目が染色体番号、2列目がSNP ID、3列目が染色体位置、12列目がp値となっている。

AWKによる要素の抽出

GWAS結果から、AWKコマンドで「染色体番号」、「SNP ID」、「染色体位置」、「p値」の列を取り出す。
AWKコマンドで、入力ファイルをSNP_QC_Exp_BLK.assoc.linear、出力ファイルをテキストファイルとしたSNP_QC_Exp_BLK.assoc.linear.P.txtとする。
AWKでは' 'で区切って、この中にコマンドを書いて実行する。
{print $2"\t"$1"\t"$3"\t"$12}によって、
「2列目[SNP ID] 1列目[染色体番号] 3列目[染色体位置] 4列目[p値]」というデータフレームになる。
"\t"はタブで区切るというコマンド。
>によって指定したテキストファイルとして出力する。

AWKコマンドでGWAS結果から要素を抽出し、テキストファイルを出力
$ awk '{print $2"\t"$1"\t"$3"\t"$12}' SNP_QC_Exp_BLK.assoc.linear > SNP_QC_Exp_BLK.assoc.linear.P.txt

このGWAS結果を使ってマンハッタンプロットを描く。

マンハッタンプロットの描画

マンハッタンプロットを描いてみたらこうなった。
1KG_EUR_QC_Exp_BLK.assoc.linear.P_position_P_15.png

SNPの特定

eQTL効果を示したSNPを抜き出してみる。

AWKでSNPを抽出
awk '$4<=10^-12 {print $0}' 1KG_EUR_QC_Exp_BLK.assoc.linear.P.txt

出力

rs13255193  8   11309192    4.539e-13
rs13257831  8   11332964    6.545e-13
rs2736345   8   11352485    1.707e-14
rs1478898   8   11395079    6.882e-16
rs2244894   8   11448659    1.497e-13
rs2244648   8   11450422    2.068e-14
rs13273172  8   11461111    1.188e-14

p値が最小のSNPはrs1478898であった。

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

CentOS Linux 8 でネットワークインターフェースの IPv6 を無効にする

概要

  • NetworkManager のコマンドラインツール nmcli でネットワークインターフェースの IPv6 を無効にする

今回の環境

  • CentOS Linux 8
# cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core) 

設定前の状態を確認する

現在は IPv6 が有効な状態。
ifconfig コマンドで inet6 エントリーが表示されている場合は、デバイスで IPv6 が有効になっている。

# nmcli connection show
NAME  UUID                                  TYPE      DEVICE
eth0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  eth0
# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask XXX.XXX.XXX.XXX  broadcast XXX.XXX.XXX.XXX
        inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x0<global>
        inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        RX packets 1856709  bytes 121862479 (116.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 53733  bytes 8848173 (8.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

IPv6 を無効にする

nmcli connection modify コマンドでネットワークインターフェース eth0 の IPv6 を無効にする。
ipv6.method に disabled を指定。
ipv6.addresses と ipv6.gateway に無効な値を指定。

# nmcli connection modify eth0 ipv6.method "disabled" ipv6.addresses "" ipv6.gateway ""

nmcli connection show コマンドで設定値を確認する。

# nmcli connection show eth0 | grep ipv6
ipv6.method:                            disabled
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.routing-rules:                     --
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       0 (disabled)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-duid:                         --
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --

nmcli connection up コマンドでネットワーク接続を再起動して設定を反映する。

# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

ipv6.addresses と ipv6.gateway を指定しない場合はエラーが発生

Red Hat Enterprise Linux 8 の公式ドキュメントには ipv6.method だけの指定方法が書かれていたが、今回の環境では ipv6.addresses と ipv6.gateway の値を設定しない場合は以下のようなエラーが発生していた。

# nmcli connection modify eth0 ipv6.method "disabled"
Error: Failed to modify connection 'eth0': ipv6.addresses: this property is not allowed for 'method=disabled'

# nmcli connection modify eth0 ipv6.method "disabled" ipv6.addresses ""
Error: Failed to modify connection 'eth0': ipv6.gateway: gateway cannot be set if there are no addresses configured

設定後の状態を確認する

ifconfig コマンドで inet6 エントリーが表示されない場合は、このネットワークインターフェースで IPv6 が無効になっている。

# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask XXX.XXX.XXX.XXX  broadcast XXX.XXX.XXX.XXX
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        RX packets 1885535  bytes 123804373 (118.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 56110  bytes 9257206 (8.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

disable_ipv6 ファイルに 1 が書き込まれている場合は、このネットワークインターフェースで IPv6 が無効になっている。

# cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6
1

参考資料

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

【Linux】遺伝統計ソフトPLINKでGWAS

はじめに

最近、遺伝統計ソフトのPLINKを使い始めた。
この本を参考にPLINKの使い方を勉強。

ゼロから実践する 遺伝統計学セミナー

この本はWindows用に書かれているので、Macでのやり方を備忘録的に書いていく。
今回は、PLINKでゲノムワイド関連解析(GWAS)を行う。

参考

PLINKの基本的な使い方は以前に投稿済み
【Linux】遺伝統計ソフトPLINKを使ってみた

使うデータ

bed|bim|fam形式ファイル

  • SNP.bed
  • SNP.bim
  • SNP.fam

表現型ファイル

  • phenotype1.txt

このファイルは、ケースコントロールのデータファイルで、ケースは2、コントロールは1となっていて、それぞれにファミリーID、サンプルIDが割り当てられていて、SNP.famファイルのファミリーID、サンプルIDと紐付いている。

これらのファイルを作業ディレクトリに格納する。

PLINKを起動

作業ディレクトリを指定して、

作業ディレクトリの指定
$ cd /作業ディレクトリのパス/

PLINK(PLINK実行ファイル)を作業ディレクトリに移動して起動する。

PLINK起動
$ ./plink

SNPのフィルタリング

--bfileで、SNPファイル(bed|bim|fam形式)を読み込んで、--make-bedでフィルタリング後のデータを新しいbed|bim|fam形式ファイルとして作成。
--outで出力するファイルの名前をSNP_QCに指定する。

今回は以下の条件のSNPを除外する。
--maf 0.05:マイナーアレル頻度が5%以下(通常のGWASでは1%あるいは0.5%以下が一般的)
--hwe 0.000001:ハーディー・ワインベルグ平衡の検定でp値が10^-6以下
--indep-pairwise 100 5 0.8:連鎖平衡係数r2値が0.8以上

SNPの除去
$ ./plink --bfile SNP --out SNP_QC --maf 0.05 --hwe 0.000001 --indep-pairwise 100 5 0.8 --make-bed
実行結果
PLINK v1.90b6.16 64-bit (19 Feb 2020)          www.cog-genomics.org/plink/1.9/
(C) 2005-2020 Shaun Purcell, Christopher Chang   GNU General Public License v3
Logging to SNP_QC.log.
Options in effect:
  --bfile SNP
  --hwe 0.000001
  --indep-pairwise 100 5 0.8
  --maf 0.05
  --make-bed
  --out SNP_QC

16384 MB RAM detected; reserving 8192 MB for main workspace.
8830185 variants loaded from .bim file.
381 people (178 males, 203 females) loaded from .fam.
381 phenotype values loaded from .fam.
Using 1 thread (no multithreaded calculations invoked).
Before main variant filters, 381 founders and 0 nonfounders present.
Calculating allele frequencies... done.
--hwe: 14399 variants removed due to Hardy-Weinberg exact test.
2692226 variants removed due to minor allele threshold(s)
(--maf/--max-maf/--mac/--max-mac).
6123560 variants and 381 people pass filters and QC.
Among remaining phenotypes, 0 are cases and 381 are controls.
--make-bed to SNP_QC.bed + SNP_QC.bim + SNP_QC.fam ... done.
Pruned 366094 variants from chromosome 1, leaving 103214.
Pruned 403320 variants from chromosome 2, leaving 106161.
Pruned 339719 variants from chromosome 3, leaving 85861.
Pruned 353504 variants from chromosome 4, leaving 86916.
Pruned 310443 variants from chromosome 5, leaving 79003.
Pruned 322217 variants from chromosome 6, leaving 81854.
Pruned 285601 variants from chromosome 7, leaving 83237.
Pruned 264127 variants from chromosome 8, leaving 71155.
Pruned 208275 variants from chromosome 9, leaving 76275.
Pruned 245016 variants from chromosome 10, leaving 67270.
Pruned 241219 variants from chromosome 11, leaving 63223.
Pruned 226971 variants from chromosome 12, leaving 62436.
Pruned 177571 variants from chromosome 13, leaving 45339.
Pruned 154730 variants from chromosome 14, leaving 44160.
Pruned 134104 variants from chromosome 15, leaving 45299.
Pruned 142197 variants from chromosome 16, leaving 50213.
Pruned 124358 variants from chromosome 17, leaving 41954.
Pruned 134574 variants from chromosome 18, leaving 38435.
Pruned 105678 variants from chromosome 19, leaving 37131.
Pruned 102672 variants from chromosome 20, leaving 31013.
Pruned 68848 variants from chromosome 21, leaving 23361.
Pruned 63204 variants from chromosome 22, leaving 25608.
Pruning complete.  4774442 of 6123560 variants removed.
Marker lists written to SNP_QC.prune.in and SNP_QC.prune.out .

作業ディレクトリに以下のファイルが出力されているのを確認する。

  • SNP_QC.bed
  • SNP_QC.bim
  • SNP_QC.fam

ゲノムワイド関連解析(GWAS)

以下のコマンドを使ってGWAS解析を行う。
--pheno:GWASに使う表現型ファイル(今回はphenotype1.txt)を入力
--logistic:ロジスティック回帰を実施
--ci 0.95:95%信頼区間を出力

GWAS(ロジスティック回帰分析)
$ ./plink --bfile SNP_QC --out SNP_QC_Pheno1 --pheno phenotype1.txt --logistic --ci 0.95
GWASの実行結果
PLINK v1.90b6.16 64-bit (19 Feb 2020)          www.cog-genomics.org/plink/1.9/
(C) 2005-2020 Shaun Purcell, Christopher Chang   GNU General Public License v3
Logging to SNP_QC_Pheno1.log.
Options in effect:
  --bfile SNP_QC
  --ci 0.95
  --logistic
  --out SNP_QC_Pheno1
  --pheno phenotype1.txt

16384 MB RAM detected; reserving 8192 MB for main workspace.
6123560 variants loaded from .bim file.
381 people (178 males, 203 females) loaded from .fam.
381 phenotype values present after --pheno.
Using 1 thread (no multithreaded calculations invoked).
Before main variant filters, 381 founders and 0 nonfounders present.
Calculating allele frequencies... done.
6123560 variants and 381 people pass filters and QC.
Among remaining phenotypes, 188 are cases and 193 are controls.
Writing logistic model association results to SNP_QC_Pheno1.assoc.logistic ...
done.

作業ディレクトリにSNP_QC_Pheno1.assoc.logisticという名前のファイルが出力されているのを確認して、テキストエディタで開く。
1列目が染色体番号、2列目がSNP ID、3列目が染色体位置、12列目がp値となっている。

AWKによる要素の抽出

GWAS結果から、AWKコマンドで「染色体番号」、「SNP ID」、「染色体位置」、「p値」の列を取り出す。
AWKコマンドで、入力ファイルをSNP_QC_Pheno1.assoc.logistic、出力ファイルをテキストファイルとしたSNP_QC_Pheno1.assoc.logistic.P.txtとする。
AWKでは' 'で区切って、この中にコマンドを書いて実行する。
{print $2"\t"$1"\t"$3"\t"$12}によって、
「2列目[SNP ID] 1列目[染色体番号] 3列目[染色体位置] 4列目[p値]」というデータフレームになる。
"\t"はタブで区切るというコマンド。
>によって指定したテキストファイルとして出力する。

AWKコマンドでGWAS結果から要素を抽出し、テキストファイルを出力
$ awk '{print $2"\t"$1"\t"$3"\t"$12}' SNP_QC_Pheno1.assoc.logistic > SNP_QC_Pheno1.assoc.logistic.P.txt

出力ファイルをCSVファイルにすることもできる。

AWKコマンドでGWAS結果から要素を抽出し、CSVファイルを出力
$ awk '{print $2"\t"$1"\t"$3"\t"$12}' SNP_QC_Pheno1.assoc.logistic > SNP_QC_Pheno1.assoc.logistic.P.csv

このGWAS結果を使ってマンハッタンプロットを描く。
マンハッタンプロットの書き方は以前に投稿済みのため、今回は省略。

参考

Rでのマンハッタンプロットの書き方も以前に投稿済み
【R】GWAS結果でマンハッタンプロットを描いてみた
【R】GWAS結果でマンハッタンプロットを描いてみた2

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

CentOS Linux のバージョンを調べるコマンドやファイル

概要

  • CentOS Linux や Linux カーネルのバージョンをコマンドやファイルの中身を確認して調べる

/etc/centos-release

$ cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)

/etc/centos-release-upstream

$ cat /etc/centos-release-upstream
Derived from Red Hat Enterprise Linux 8.1 (Source)

/etc/os-release

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

/etc/system-release-cpe

$ cat /etc/system-release-cpe
cpe:/o:centos:centos:8

/etc/ 以下に release が付くファイル

このあたりのファイルにバージョン情報が載っている。シンボリックリンクされているのも多い。

$ ls -l /etc/ | grep release
-rw-r--r--   1 root root       38  3月 13 04:15 centos-release
-rw-r--r--   1 root root       51  3月 13 04:15 centos-release-upstream
lrwxrwxrwx   1 root root       21  3月 13 04:15 os-release -> ../usr/lib/os-release
lrwxrwxrwx   1 root root       14  3月 13 04:15 redhat-release -> centos-release
lrwxrwxrwx   1 root root       14  3月 13 04:15 system-release -> centos-release
-rw-r--r--.  1 root root       23  3月 13 04:15 system-release-cpe

uname: カーネル情報

$ uname -m
x86_64

$ uname -o
GNU/Linux

$ uname -r
4.18.0-147.5.1.el8_1.x86_64

$ uname -s
Linux

$ uname -v
#1 SMP Wed Feb 5 02:00:39 UTC 2020

$ uname -morsv
Linux 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64 GNU/Linux

$ uname -a
Linux foo.example.com 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

lsb_release: LSB (Linux Standard Base) 情報

$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 8.1.1911 (Core) 
Release:    8.1.1911
Codename:   Core

lsb_release コマンドは redhat-lsb-core パッケージに入っているので必要に応じて dnf install redhat-lsb-core などでインストールする。

hostnamectl

$ hostnamectl
   Static hostname: foo.example.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 11112222333344445555666677778888
           Boot ID: ffffeeeeddddccccbbbbaaaa00009999
    Virtualization: kvm
  Operating System: CentOS Linux 8 (Core)
       CPE OS Name: cpe:/o:centos:centos:8
            Kernel: Linux 4.18.0-147.5.1.el8_1.x86_64
      Architecture: x86-64

参考資料

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

Docker を AWS にインストール

200321

注意点
なぜか動かない、という状況は AWS のセキュリティグループの設定が原因かもしれない。

AWS の準備

EC2 をたてるまでの手順は、ここでは説明しない。注意が必要なのはセキュリティグループの設定で、デフォルトでは SSH 以外はすべてブロックされる。

AWS に docker をインストール

sudo yum update
sudo yum install -y docker

正常にインストールできたか確認できる。バージョンは 1.21.5 のようだ。
docker info

sudo がなくてもいいようにする

sudo service docker start
sudo usermod -a -G docker ec2-user

docker-compose インストール

docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

パーミッション変更が必要
'sudo chmod +x /usr/local/bin/docker-compose'
'docker-compose --version'

Django のデプロイ

Docker を使った本番デプロイ

AWS 上でディレクトリ構造などを作ったりする必要はない。そんなことをやっていると手間ばかりかかってミスも連発する。ローカルの開発環境にも Docker を入れて、ここで完成したものをそのまま丸ごとコピーするのが正しい。

セキュリティグループの追加

EC2 のインスタンスを普通に立てただけでは SSH しかできない設定となってる。セキュリティグループに、HTTP プロトコル(ポート 80 または 8000)を通す設定をしておかないと絶対につながらず、時間を溶かすので注意が必要。

ローカルで開発したプロジェクトのデプロイ

ローカル環境で動作確認した django プロジェクトは、ディレクトリごと zip にしてホストに転送する。配置したい場所で unzip すると、そのままファイルができるので、あとは docker-comopose up すれば立ち上がる。

おわり

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