お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。
2025/08/21 15:10 OS::Linux::コマンド

基本

cp [OPTION]... [-T] SOURCE DEST

-Rを指定すると配下のディレクトリも再起コピーしてくれる。経験上小文字は問題が起きているので指定しない方がいい。

使用例

# ファイルのコピー
cp /path/to/hoge /path/to/

# フォルダのコピー
cp -R /path/to/hoge /path/to/

# ドットファイルを含まないフォルダ中身のコピー
cp -R /path/to/hoge/* /path/to/

# ドットファイルを含むフォルダ中身のコピー
cp -R /path/to/hoge/. /path/to/
2025/08/20 16:19 OS::Linux::コマンド

行の並び替えや行の内容を一意にするときに使える。

コマンドラインオプション

  • -r
    • リバース
  • -u
    • 一意

sort:ソートする

入力

cat <<EOF | sort
zzz
aaa
bbb
aaa
aaa
ccc
bbb
1
2
3
01
02
03
a1
a2
a3
EOF

出力

01
02
03
1
2
3
a1
a2
a3
aaa
aaa
aaa
bbb
bbb
ccc
zzz

sort -r:逆ソート

入力

cat <<EOF | sort -r
zzz
aaa
bbb
aaa
aaa
ccc
bbb
1
2
3
01
02
03
a1
a2
a3
EOF

出力

zzz
ccc
bbb
bbb
aaa
aaa
aaa
a3
a2
a1
3
2
1
03
02
01

sort -u:一意

入力

cat <<EOF | sort -u
aaa
bbb
aaa
aaa
ccc
bbb
EOF

出力

aaa
bbb
ccc

2025/04/01 18:31 OS::Linux::Ubuntu

Ubuntuでサービスを書く場合これが一番汎用性がある。

確認環境

Ubuntu 22.04.5 LTS

書き方

細かいことは書いていないので適当に解釈すること。

  1. /etc/init.dにパーミッション755でサービス名のファイルを作成
    sudo touch /etc/init.d/prometheus_node_exporter
    sudo chmod 755 /etc/init.d/prometheus_node_exporter
    
  2. 作成したファイルに以下のようなコードを書く

     #! /usr/bin/env bash
     ### BEGIN INIT INFO
     # Provides:          Prometheus Node exporter
     # Required-Start:    $remote_fs $network $syslog
     # Required-Stop:     $remote_fs $network $syslog
     # Default-Start:     2 3 4 5
     # Default-Stop:      0 1 6
     # Short-Description: Prometheus exporter for hardware and OS.
     # Description:       Prometheus exporter for hardware and OS metrics exposed.
     ### END INIT INFO
    
     # Do NOT "set -e"
    
     # PATH should only include /usr/* if it runs after the mountnfs.sh script
     PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
     DESC="Prometheus Node exporter - Prometheus exporter for hardware and OS metrics exposed"
    
     NAME=prometheus_node_exporter
     PIDFILE=/run/$NAME.pid
     SCRIPTNAME=/etc/init.d/$NAME
     WORKINGDIR=/var/lib/prometheus
     DAEMON=/usr/local/bin/node_exporter
     DAEMON_ARGS="--path.rootfs=/host --web.listen-address=[::]:9100"
     USER=prometheus
    
     # Exit if the package is not installed
     [ -x "$DAEMON" ] || exit 0
    
     do_start()
     {
         PRM_ENVS="USER=$USER HOME=$WORKINGDIR"
         PRM_EXEC="$DAEMON $DAEMON_ARGS"
         sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
             --background --chdir $WORKINGDIR --chuid $USER \\
             --exec /bin/bash -- -c '/usr/bin/env $PRM_ENVS $PRM_EXEC'"
     }
    
     do_stop()
     {
         start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME --oknodo
         rm -f $PIDFILE
     }
    
     do_status()
     {
         if [ -f $PIDFILE ]; then
             if kill -0 $(cat "$PIDFILE"); then
                 echo "$NAME is running, PID is $(cat $PIDFILE)"
             else
                 echo "$NAME process is dead, but pidfile exists"
             fi
         else
             echo "$NAME is not running"
         fi
     }
    
     case "$1" in
         start)
             echo "Starting $DESC" "$NAME"
             do_start
             ;;
         stop)
             echo "Stopping $DESC" "$NAME"
             do_stop
             ;;
         status)
             do_status
             ;;
         restart)
             echo "Restarting $DESC" "$NAME"
             do_stop
             do_start
             ;;
         *)
             echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
             exit 2
             ;;
     esac
    
     exit 0
    
  3. サービスに登録
    sudo update-rc.d prometheus_node_exporter defaults
    
  4. 後は条件分岐に書かれているコマンドに沿ってserviceを蹴れば動くようになる。止めたりするときはinit.dに定義したものを使う(init.dそのものは単にコマンド名で分岐処理しているだけ)
    sudo service prometheus_node_exporter start
    

消し方

update-rc.d prometheus_node_exporter remove

手順

前提としてSSDは端末に取り付けているものとする。

  1. 取り付けたディスクがあるかどうかを確認する
    sudo fdisk -l
    
    /dev/sdaとかになっているはずなので、あとは容量などのプロパティを見て確認
  2. パーティションを作る
    sudo fdisk /dev/sda
    
    1. pで確認
    2. nで新規パーティションを作成
    3. あとはエンター連打
  3. フォーマットする
    sudo mkfs.ext4 /dev/sda
    
  4. マウント先を作る
    sudo mkdir /mnt/sda1
    
  5. マウントする
    sudo mount /dev/sda /mnt/sda1
    
  6. 自動マウントの設定をする
    1. SSDのUUIDを取得
      sudo blkid
      
    2. fstabに定義を追加
      sudo nano /etc/fstab
      
      blkidで拾ったUUIDを記述し、以下の内容を追記する
      UUID=243a3867-xxxx-xxxx-xxxx-xxxxxxxx /mnt/sda1 ext4 defaults 0 0
  7. OSを再起動
  8. マウントされていることを確認
    df -T
    

おまけの増設シーン

サブ機にNAS機能を持たせたかったので、SSDを買って増設したシーン。

今回購入したのはSanDisk SATA III SDSSDA-2T00-J26だ。今時SATA?という感じだが、サブ機のNVMeスロットは既に埋まっているのだ。

サブ機は普段は部屋の片隅に棚の代わりに置いているのだが、久々に引き出したら埃まみれだった。

しかしフロントのフィルターが優秀で中にはそこまで埃が入っておらず掃除の手間は少なかった。

このPCケースはキューブ型で、全ての面が取り外せるようになっておりメンテナンス性がいい。

しかしここでSSDの固定にネジが必要なことに気づき、ヨドバシでネジを注文し、一回休み。

PCを戻すのが面倒だったのだが、そのままだとLAN線がルーターに届かなかったので応急処置でティッシュ箱を置いた。一時期袋ティッシュにしていたのだが簡易定規や孫の手の代わりにならないため箱に戻したのだが大正解だった。余談だがティッシュの空箱があると、部屋に入ってきたカメムシを捕まえて部屋の外に逃がすのにも便利だ。

翌日になりネジが届き再開。ヨドバシの商品写真だと2個入りに見えたので、今後も見据えて4つ買ったのだが、まさかの10個入だった…。

ネジを止めて完成。このケースはMiniITX用ケースなのだが2.5インチと3.5インチに両対応したドライブベイがあって便利だ。しかも、このベイも取り外せるためメンテナンス性がいい。

ティッシュ箱でどうにかしていたネットワーク機器群も無事に元の高さに戻り事なきを得た。

実はSSD増設前もNASとして使っており、メイン機からマウントしているのだが、オフラインの間はExplorerやファイル参照ダイアログ周りがしょっちゅうフリーズして不便だった。マイクロソフトはWindows 11にずっと存在するこの問題をいい加減何とかしてほしい。

あとがき

今はまだマウントしただけで権限設定とかをしておらず、NASとしてもアクセスできないため、また整備を続けていきたい。