Linux 操作のメモ

2024 年 8 月 26 日 改訂

Linux の操作をメモしています。


コマンド

df -h

マウントされているディスクの消費容量。-Th にすると、ファイルシステムの情報が表示される。

lsblk

List block devices。現在利用できるブロックデバイスをツリー状に一覧表示する。ストレージの構成やデバイス番号を確認できる。

grep ^@ <fastqファイル名> | wc -l

fastq ファイル内部のリード数をカウントします.@ で始まる行数を調べています.

grep ^\> <fastaファイル名> | wc -l

fasta ファイル内部のレコード数をカウントします.> で始まる行数を調べています.
注意: > の前にバックスラッシュを入れることでエスケープします.これをしないと,> がファイルを作成するなどリダイレクションと判断され,インファイル内部の情報が消えてしまいます.


ソースからコンパイルしてソフトウェアをインストール

オープンソースとして公開されている LINUX (UNIX) 用ソフトウェアをインストールする方法を紹介します。大津 (2010) の 5.2 節 (P233〜) を参照しました。

Configure スクリプトが用意されている場合の、ソースの取得からインストールまでの基本的な流れは、次のようになります。

(1) 圧縮されたソースファイル (.tar.gz ファイル) をダウンロードして展開

(2) configure スクリプトを実行して Makefile を作成

「./configure」のように、カレントディレクトリをつけて実行。configure スクリプトには、通常、インストール先などの環境を設定するオプションが用意されている。--help でオプションが表示される。例えば、「--prefix」は、インストール先を指定するオプション。

(3) make でコンパイル

Makefile を利用したコンパイルを行う。make コマンドを引数なしで実行すると、カレントディレクトリに保存されている Makefile に記述された手順にしたがってコンパイル& リンクが行われ、オブジェクト (bin ディレクトリなどの内部) が作成される。
 make のターゲットには、make install などのように、実在しない「擬似ターゲット」を指定できる。all: 全てのオプジェクトを作成。clean: オプジェクトを消去 (make をやり直す場合に使用)。install: 完成したプログラムをインストール。

(4) make install でインストール

インストール先が、スーパーユーザの書き込み権現が必要なディレクトリ (/usr/local ディレクトリ以下など) の場合は、sudo コマンドが必要。

configure スクリプト:コンパイルまでの手順を簡略化するシェルスクリプト。これを使うと、使っている OS によってコンパイラやライブラリが異なるので、環境の相違を吸収して、ソースファイルを修正することなくコンパイルからインストールまでの作業が行える。実行すると、Makefile を作成する。

Makefile:分割されたソースプログラムをコンパイルしたり、インストールするなどに使われる。必要なライブラリの場所や依存関係など、様々な情報が記述されている。

Mac OSX UNIX 活用大全」(P233〜) を参照しました。
(2021 年 3 月)

 

CentOS のインストール

CentOS のインストール

Mac で BOOTABLE USEB を作成する

最後の sudo dd .... を入力した後、Password:と表示されたまま、二時間近く待たされました。動いているか確認するには、他のターミナルから

sudo killall -INFO dd

を入力します。すると、進行状況が表示されます(参考) 。

[inouejun:Downloads]$ sudo dd if=/Users/inouejun/Downloads/CentOS-7-x86_64-DVD-2003.iso.img.dmg of=/dev/disk2 bs=1m
Password:
3044+0 records in
3043+0 records out
3190816768 bytes transferred in 4699.560445 secs (678961 bytes/sec)
3057+0 records in
3056+0 records out
3204448256 bytes transferred in 4719.991381 secs (678910 bytes/sec)

(2020 年 5 月)

 

Ubuntu のインストール

パーティションを分割する

シェルスクリプトマガジン。Ubuntu Server で実施。

Ubuntu 24.04 のインストール
2024 年 4 月

福山大学。

 

sudoer の追加

スーパーユーザーとしてサーバーで sudoer を追加する手順です。あらかじめ、新たに sudoer となるユーザーから、利用する PC の公開鍵ファイルと希望ユーザー名を受け取っておく必要があります。

sudoer の追加

Ubuntu の場合、新規ユーザーの作成はこちら、ユーザーパスワードの設定はこちら(ただし、他のユーザーからなので、sudo passwd)、をそれぞれ参照しました。SSH 設定は以下を参照してください。

以下、CentOS の場合です。
サーバーに terminal から入ります。root ユーザーに切り替えます。

$ su -

useradd コマンドで、新規ユーザーを追加します。
-m オプション: ユーザーのホームディレクトリが存在しない場合、作成する

# useradd -m xxx

ls コマンドで、ホームディレクトリができたことを確認します。

# ls /home

sudoer ではない、普通のユーザーを追加するだけなら、ここまでです。sudoer を加えるなら、以下の作業が必要です。

usermod コマンドで、wheel グループに xxx を追加します。このコマンドを使うと、ユーザーのホームディレクトリやグループ、パスワードなどを変更できます。
wheel
:スーパーユーザー (root) 特権を得られるユーザーの属するグループの名称。
-aG:セカンダリグループに xxx を追加。

# usermod -aG wheel xxx

xxx が sudoer になったことを確認します。getent コマンドは、ユーザーやグループの一覧を表示します。

# getent group wheel

passwd コマンドで、xxx のパスワードのロックを解除します。
-u:ロックアウトされているアカウントのロックを解除する。
-f:強行。

# passwd -uf xxx

パスワードアンロックの確認をします。

# less /etc/shadow

 

SSH 接続の設定

.ssh ディレクトリと秘密鍵の権限については、こちらを参照してください。

サーバーに入ります。その後、su コマンドで、スーパーユーザーから一般ユーザーである xxx になります。

# su - xxx

mkdir コマンドで、.ssh ディレクトリを作成します。

$ mkdir .ssh

chmod コマンドで、.ssh ディレクトリにのパーミッションとアクセス権を設定します。.ssh ディレクトリの権限については、こちらを参照してください。

$ chmod 700 .ssh

以下のコマンドで、ディレクトリのパーミッションを確認します。

$ ls -la

以下のようになっているはずです。

drwx------ 27 xxx staff 864 12 20 10:43 .ssh

.ssh ディレクトリに入ります。

$ cd .ssh

emacs などのエディタで authorized_keys ファイルを作成し、id_rsa.pub にある公開鍵 (クライアントである自分の PC で作成した情報)を書き込みます。ssh-keygen コマンドによる公開鍵の作成はこちら (1,2) を参照してください。

$ emacs authorized_keys

chmod コマンドで、authorized_keys ファイルのパーミッションを変更します。 。

chmod 600 authorized_keys

以前は 644 と書いていましたが、600 の方が良いそうです。こちらを参照してください。この操作をやらなかったら、ssh で入る際にパスワードが必要でした。

ls コマンドで、公開鍵ファイルのパーミッションを確認します。

$ ls -l
total 4
-rw------- 1 xxxx xxxx 589 12月 1 11:32 authorized_keys

上記の設定を完了すると、新たなユーザーは以下のコマンドでログインできます。

ssh -p 23456 xxx@155.55.555.555

以上です。WI さんに伺いました。ありがとうございました (2020 年 12 月)。

 

外付け HD のマウント
2TB 以上の外付けハードディスクを認識させる

こちらを参照。2TB 以上の HDD を認識させるために、parted というユーティリティを利用する (2020 年 5 月)。

lsblk

現在利用できるブロックデバイスをツリー状に一覧表示する。

sudo parted -l

確認

sudo parted /dev/sdg

詳細は、こちらを参照。

sudo mkfs.xfs -f /dev/sdg

CentOS7 デフォルトのファイルシステムである XFS (こちらを参照) でフォーマット。

sudo mount /dev/sdg /mnt/newhome

マウント


Linux machine に常時認識させる

USB につないだ外付けのメーカーを調べる.

[root@T7600 /]# dmesg | egrep "^(scsi [0-9]*:[0-9]*:[0-9]*:[0-9]*|sd [0-9]*:[0-9]*:[0-9]*:[0-9]*)" | less
....
scsi 8:0:0:0: Direct-Access I-O DATA HDEL-UT 0008 PQ: 0 ANSI: 6
scsi 9:0:0:0: Direct-Access LaCie d2 Quadra v3C 051E PQ: 0 ANSI: 6
sd 8:0:0:0: [sdc] Very big device. Trying to use READ CAPACITY(16).
sd 8:0:0:0: [sdc] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
.....
sd 9:0:0:0: [sdd] Very big device. Trying to use READ CAPACITY(16).
sd 9:0:0:0: [sdd] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)

fstab に詳細を記入する.

[root@T7600 /]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Jun 9 16:59:30 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=ed23c81d-8000-4997-af1a-8fba78df2423 / ext4 defaults 1 1
UUID=fc8b074a-8982-4f97-bd07-115ba559851f /boot ext2 defaults 1 2
UUID=ac162ab3-8c8f-4e2f-8ada-84dfba8b1dff swap swap defaults 0 0
UUID=c21e02cd-cd44-4b2b-82e7-f6568a5a97e8 /mnt/lacie ext4 noauto,exec,user,rw,nodiratime 1 2
UUID=040f6cab-8f8b-4a0c-ad8f-799bf3cdbdf5 /mnt/iodata ext4 noauto,exec,user,rw,nodiratime 1 2
UUID=fdbdd971-f6c1-42ad-8a90-321b479480df /data ext4 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

UUID を出力する.

[root@T7600 /]# blkid
/dev/sdb3: UUID="ed23c81d-8000-4997-af1a-8fba78df2423" TYPE="ext4"
/dev/sdd: UUID="c21e02cd-cd44-4b2b-82e7-f6568a5a97e8" TYPE="ext4"
/dev/sda1: LABEL="/data" UUID="fdbdd971-f6c1-42ad-8a90-321b479480df" TYPE="ext4"
/dev/sdb1: UUID="fc8b074a-8982-4f97-bd07-115ba559851f" TYPE="ext2"
/dev/sdb2: UUID="ac162ab3-8c8f-4e2f-8ada-84dfba8b1dff" TYPE="swap"
/dev/sdc: UUID="040f6cab-8f8b-4a0c-ad8f-799bf3cdbdf5" TYPE="ext4"




Mac の外付け HDD と共有

HDD を、Mac で Mac OS 拡張 (ジャーナリング) で初期化して、Linux で読み込む、のが良いです。mac OS 拡張は HFS+ という名前のファイルシステムに相当します。HFS+ だと2TB 以上のフォーマットが可能です。さらに、一つのファイルが、4.5GB (?) 以上でも保存できます。ファイルシステムによっては、ファイルサイズが大きすぎると、保存できない場合があります (2020 年 6 月)。

すぐには認識されない:
Buffalo の外付け HD を USB でつなげたところ,GUI 上に表示はされるのですがダブルクリックすると,マウントできませんでした.

Unable to mount location
Error mounting: mount: unknown filesystem type 'hfsplus'

この外付け HD は Mac でフォーマットしていたため問題が生じたようです.そこで、 Mac で format した HD を Linux で認識させます。

Mac でハードディスクを初期化:
こちらにを参考にしました。ありがとうございました (2020 年 5 月)。

Mac > ディスクユーティリティ > Mac OS 拡張で初期化。

mac OS 拡張は HFS+ という名前のファイルシステムに相当します。Mac にはジャーナリングという信頼性を高める仕組みが備わっている。ジャーナリングがあると、Linux から読み書きができない。そこで、ジャーナリングをオフにする。まず、df コマンドで、Macで認識されているディスク名を確認する。ターミナルに以下を入力:

(base) [inouejun:Volumes]$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
....
/dev/disk2s2 5.5Ti 1.3Gi 5.5Ti 1% 78 4294967201 0% /Volumes/2
(base) [inouejun:Volumes]$

そして、ジャーナリングをオフにする。ターミナルから入力:

(base) [inouejun:Volumes]$ diskutil disableJournal /dev/disk2s2
Journaling has been disabled for volume 2 on disk2s2

その後、パーミッションを変更:

chmod 777 /Volumes/2

Linux で読み込み
外付け HD を Mac から取り外して、Linux machine に繋いでマウントすれば良いです (QuiitaCeommunity ENTerprise Operating System を参照しました)。RHEL 系の CentOS で HFS+ をマウントするには、kmod-hfsplus をインストールする必要があります。

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# yum install kmod-hfsplus

HFS+ パーティションをマウントします。partedでパーティションを確認。

# parted -l

その後、マウントします。

# mount -t hfsplus -o ro /dev/sdb2 /media/hfsHD
(# mount /dev/sdb2 /media/hfsHD でもマウントできました [CentOS7])



容量の大きいディレクトリを調べる

# du -m /home | sort -nr | head -10

こちらを参考にしました。


CentOS 7 のネットワーク設定

CentOS 7 でネットワーク設定を行う

 

ssh ポートの変更 (Ubuntu 24.04 LTS:)

Qiita: Ubuntu23 で SSH を設定する際の注意点
(2024/1/1)

/etc/ssh/sshd_config に Port XXXX を記述し、/lib/systemd/system/ssh.socket の以下を記述。

[Socket]
ListenStream=
ListenStream=XXXX

以下も参考にしました (2-24 年 8 月)。

Qiita: 【2024年04月版】Ubuntu24.04 で sshdの待ち受けポートの変更【ssh, sshd】
(2024/4/28)

How to change the SSH server port on Ubuntu?
(2024/5/24)

Ubuntu 16.04 のネットワーク設定

The network manager in Ubuntu 16.04 is broken. To fix it, you'll need to manually edit a few config files. Please follow the steps below to see if you are able to connect to the network.

1. cd /etc/NetworkManager/system-connections/

2. sudo vim (name of wired connection usually "wired connection 1")
tip: hit tab to flesh out filename as the filename spaces need to be escaped.

Look for this stanza and ensure it is the same (have the user add credentials):

[802-1x]
altsubject-matches=
ca-cert=/etc/ssl/certs/ca-certificates.crt
eap=peap;
identity=TIDA_USERNAME
password=TIDA_PASSWORD
phase2-altsubject-matches=
phase2-auth=mschapv2

3. Reboot or restart both network manager and the network stack.
sudo service networking restart
sudo service network-manager restart

4. In the GUI (upper right hand side) enable the connection.
- It should connect in 15-30 seconds.


CentOS7 に Python3 をインストール

以下を参照しました (2020 年 5 月)。
https://usado.jp/spdsk/2017/11/16/post-2672/

yum でインストールできれば良いのですが、yum インストールで必要な IUS リポジトリが yum からインストールできません (こちらなど)。そこで、ソースコードから Python3 をインストールしました。


ベーシック認証設定方法

ベーシック認証とは、サイトのアクセス時にアクセスを制限を行うために、IDとPasswordを用いた認証のことです。

Nginx

Nginxにてベーシック(Basic)認証を有効にする手順を参照しました。

 


Apache

apacheベーシック認証設定方法
https://pointsandlines.jp/server-infra/basic-authorize

CentOS6.3 で書かれていますが、CentOS7.5 でもできました。httpd.conf に書き込むやり方が簡単でした。

1. パスワードを作成し、ファイルに保存。ここではユーザー名を htuser としています。

$ sudo htpasswd -c /etc/httpd/conf/.htpasswd htuser

設定するパスワードを聞かれるので答えます。

2. httpd.conf ファイルの最後に以下のコメントを記入。ここでは FILENAME というディレクトリに認証設定を行っています。

<Directory "/var/www/html/FILENAME">
AuthType Basic
AuthName "Please Enter ID and pass"
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</Directory>

3. 設定ファイルを再度読み込みます。

$ sudo systemctl reload httpd.service

(2022 年 7 月)

 

SSL 証明書の導入 - Ubuntu

基礎知識

SSL 証明書 (サーバ証明書) とは、 hppts 通信によって安全な通信を行うための電子証明書です (参照)。 以下 2 つの役割があります:
・認証局 (CA) が、SSL 証明書の発行を要求してきたサーバーが実在し信頼できることを証明する
・SSL 証明書発行時に作成される公開鍵と秘密鍵によって、クライアント-サーバー間の通信内容の暗号化を行う。

Let's encrypt と cerbot のガイド

SSL 証明書はどのように Web を保護しますか?

# SSL 証明書はどのように実装されますか?
1) 証明書署名要求を生成。2) CSR を送信して SSL 証明書を受け取る。3) SSL 証明書をインストールする。4) 中間証明書をインストールする。

# CSR (Certificate Signing Request: 公開鍵と秘密鍵) の作成
SSL 証明書を取得する最初のステップは、サーバー上で証明書署名リクエスト (CSR) を作成することです。

Let's Encrypt を利用

jinoue@E73F3: sudo apt -y install certbot
sudo ertbot certonly --webroot -w /var/www/html yurai.aori.u-tokyo.ac.jp
sudo certbot certonly --webroot -w /var/www/html -d yurai.aori.u-tokyo.ac.jp
sudo certbot --force-renewal renew
sudo systemctl status certbot.timer
sudo systemctl list-timers certbot.timer --no-pager
sudo systemctl cat certbot.timer
sudo systemctl cat certbot.service
cd /etc/apache2/sites-available/
sudo cp default-ssl.conf default-ssl_original.conf
sudo vim default-ssl.conf
vim default-ssl.conf
sudo vim default-ssl.conf
cd
sudo a2ensite default-ssl
sudo a2enmod ssl
sudo systemctl restart apache2
sudo vim /etc/apache2/sites-available/default-ssl.conf
vim /var/www/html/.htaccess
sudo a2enmod rewrite
sudo systemctl restart apache2
(2024 年 8 月)

[Sever World] Apache2: SSL/TLS の設定
2024/5/17

以下、SSL 証明書を取得した後に設定。/etc/apache2/sites-availabl/default-ssl.conf を操作。以下、「Linux でサーバー構築」では、/etc/apache2/sites-availabl/hoge.com-ssl.conf を作成

[Server World] SSL 証明書を取得する (Let's Encrypt)
2024/4/29

「ただし、Certbot パッケージにはタイマーが付属しているため、通常は手動での更新実行は必要ありません。」

[Linux でサーバー構築] Ubuntu22.04 Server : Let's Encrypt , Apache SSL化
2023/12/31

上記 Sever World と違い、/var/www/html 以下に FQDN (Fully Qualified Domain Name, ここでは hoge.com) を設定。このため、Apache2 に SSL/TLS を設定する説明も、Sever World と少し異なる。

DigitalOcean: Ubuntu 20.04でLet’s Encryptを使用してApacheを保護する方法
(2020/10/27)

Ubuntu 20.04 初期サーバーセットアップも説明。

Qiita: 【Ubuntu+Nginx】Let's EncryptでSSL証明書を発行してhttps通信を行う
(2022/5/29)

サーバーはさくら VPS を使用。
# Ubuntu 20.04
# Nginx と cerbot(Let's encruypt) をインストール
# certbot がサーバーにアクセスできるように設定
# certbot によって SSL 証明書を発行
# SSL 証明書の自動更新

 

SSL 証明書の導入 - CentOS7

Let's Encrypt ではなく、有料 SSL 証明書を利用

Qiita: CentOS7 + Apache + mod_ssl証明書設定

# 以下のサイトを参考にしている。

# 先方からメールで送られてきたサーバー証明書をインストール
・証明書ディレクトリ (/etc/httpd/conf/ssl.crt/) を作成し、ここに証明書ファイル (xxxxcrt) を作成し、証明書を貼り付ける。
・中間証明書 (INTERMEDIASTE CA) ファイル (xxxx.cst) を作成し、証明書を貼り付ける。
# ssl.conf の設定 (/etc/httpd/conf.d/ssl.conf)。
# ディレクトリ所有者の変更
# Apache 再起動

Apache + OpenSSL による CSR の作成と SSL 証明書インストール

上記サイトの参考サイト。さくら VPS を利用。CentOS5+Apache2。証明書は、RapidSSL (有料 SSL 証明書) で、apacheとOpenSSLはインストールしてある状態。

# CSR 作成の途中で入力する項目について詳しい。

# サーバー証明書のインストール
・証明書用ディレクトリ (/etc/httpd/conf/ssl.crt/) を作成し、ここに証明書ファイル (samplejp.2011.crt) を作成して証明書を貼り付ける。
・おそらく同じディレクトリに、中間証明書ファイル (samplejp.2011.cst) を作成する。これで全てのファイルが揃ったことになる。
# mod_ssl インストールの確認。
# ssl.conf の編集
通常は、/etc/httpd/conf.d フォルダに ssl.conf というファイルがあるはず。このファイルを編集。

CentOS7 の Apache で SSL 証明書を作成する方法

説明が充実。自己署名 SSL 証明書をセットアップする手順。ただし、このじこ証明 SSL 証明書は、Web ブラウザに含まれる、信頼できる認証局によって署名されていない。ユーザーは、証明書を使用してサーバー ID を自動的に検証できない。その結果、ユーザーがサイトにアクセスすると、セキュリティ・エラーが表示される。このため、自己証明証明書は、公開されている運用環境には適していない。

SSL 証明書を Apache サーバー (CentOS) に手動でインストールする

ほとんど説明がない。

CentOS7 に SSL 証明書を入れて HTTPS でアクセスできるようにする

ドメイン名を購入。CSR は自分で作成。


Let's Encrypt の自動更新

Qiita: Let's Encrypt の取得&自動更新設定

CentOS7.1&Apache2.4.6

証明書の動作確認など、非常に詳しい。

# 証明書の場所
[root@example ~]# ls -l /etc/letsencrypt/archive/example.com/
-rw-r--r-- 1 root root 1789 12月 5 16:12 cert1.pem
-rw-r--r-- 1 root root 1647 12月 5 16:12 chain1.pem
-rw-r--r-- 1 root root 3436 12月 5 16:12 fullchain1.pem -rw-r--r-- 1 root root 1704 12月 5 16:12 privkey1.pem

# cron による証明書の自動更新
cron.d以下に vim などでスクリプトを書いておけば、実行してくれる。以下は、毎月 7 日 4 時に実行される。

[root@example ~]# cat /etc/cron.d/letsencrypt 00 04 07 * * root /bin/certbot renew --force-renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

[Server World] Apache httpd: SSL/TLS の設定

 

Firewall

CentOS7 で SSH のポートー番号を変更する

SSH のポート番号を変更

ネコでもわかるシリーズ 2, 7,

ファイアウォール iptables を簡単解説 (さくらのナレッジ)

UNIX (Linux) 入門

農林水産研究情報総合センター。7 章ぐらいまで目を通せば、ファイルの中身をみたり、ファイルを消す、などがわかる。

CetnOS7 の Apache 最新版アップデート