ubuntu20小技

細々としたことをメモ

## ドライブの空き容量を調べる。
```
df -h --total
```

dockerコンテナの大きさを見る
```
docker system df
```
使っていないdockerコンテナを削除する。
docker system prune



## フォルダ名のスペース（全角と半角）をアンダーバーに変換する
バッチ操作する場合に嫌われる、スペースを削除する。

```
半角スペース用　depthはサーチするフォルダの深さ
find . -maxdepth 1 -type d | grep " " | sed -e 's/.*/"&"/; p; s/ /_/g' | xargs -n2 mv
全角スペース用
find . -maxdepth 1 -type d | grep "　" | sed -e 's/.*/"&"/; p; s/　/_/g' | xargs -n2 mv
２連続のアンダーバーを１つにする（複数回実行）
find . -maxdepth 2 -type d | grep "__" | sed -e 's/.*/"&"/; p; s/__/_/g' | xargs -n2 mv
```
以下を参考にした。

https://hydrocoast.jp/index.php?Linux/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%E3%81%AB%E3%81%82%E3%82%8B%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E7%BD%AE%E6%8F%9B

### フォルダ内のファイルをカウントする（スペースがあると作動しがたい）
```
for d in `find ./ -type d`; do echo $d,`ls "$d" | wc -l`; done
```
以下を参考にした
https://saneeeatsu.hatenablog.com/entry/show-file-num-on-terminal


## widnowsと共有しているデータドライブにアクセスすると書込禁止(ntfsはいろいろ面倒)
ファイラーから　＋別の場所　でデータ専用HDD(ntfs)が見えるがリードオンリー
右クリックでアンマウントした後、(ターミナルがhddに居ると失敗する)
sudo ntfsfix /dev/sda2
として再マウントすると書き込めるようになった。
参考：https://scienceboy.jp/88io/2019/09/read-only-file-system/

この時はうまく行ったが、また書けなくなる。
ntfsドライブの所有者がrootになっていて、sudo chmodで変更できない。
ここのページを参考にhttps://sekisuiseien.com/computer/11054/

```
sudo gedit /etc/fstab （マウントの設定が書かれたファイルマウントポイントもここに書かれている）
１３行目の以下記述をコメントアウト(バックアップ)して、
/dev/disk/by-uuid/844A8D0B4A8CFAE6 /mnt/DATA_drive auto nosuid,nodev,nofail,x-gvfs-show 0 0
 ntfs-3g と,users,permissionsを追加する。autoは削除する。
/dev/disk/by-uuid/844A8D0B4A8CFAE6 /mnt/DATA_drive ntfs-3g nosuid,nodev,nofail,x-gvfs-show,users,permissions 0 0
```
sudo umount /mnt/DATA_drive アンマウント
sudo mount /mnt/DATA_drive　再マウント
sudo chown -R user:user /mnt/DATA_drive　所有者変更user:userは自分の名前とグループ Rオプションで下のフォルダも変更

#### Windowsと共有していると、以下のエラーが出ることがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/8a7832cf-5fe7-ac07-785a-b2f3b6edc663.png)

windowsの更新などで、ＨＤＤの何処かに印が付けられると、マウント失敗する。仕方が無いので、windowsの更新をしてから、マウント設定と所有者の設定をしてやる。
(参考)Windowsの高速起動などのオプションが設定してあると、ＨＤＤに何か書き込まれてマウントできないことがある。
https://teratail.com/questions/67966?sort=3

## 日本語リミックスをインストールするとダウンロードフォルダなどが日本語で使いづらい
端末から以下を実行
旧フォルダにファイルがあると自動削除されない
LANG=C xdg-user-dirs-gtk-update　（対話的）
LC_ALL=C xdg-user-dirs-update --force　（強制）
参考：https://wiki.archlinux.jp/index.php/XDG_%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA

## ダウンロードしたdebパッケージをコマンドでインストール
sudo dpkg -i パッケージ名.deb
sudo apt install ./パッケージ名.deb

コマンドが２つあるが、aptだと依存関係も考慮してくれるらしい。
うまく行かなかったときは、次のコマンドで自動修正できる。
sudo apt --fix-broken install

##  dockerのインスト－ル
dockerと端末で入力するとインストールの案内が表示される。
sudo apt  install docker.io
sudo apt  install docker-compose　（必要なとき）
sudo usermod -aG docker ユーザー名　（vscodeなどユーザーで実行するとき）

CUDAとか使うために、Nvidia Container Toolkitを導入する必要があるとき
nvidia-docker2(sudo apt-get install -y nvidia-docker2でNvidia Container Toolkitが導入される）
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
https://medium.com/nvidiajapan/nvidia-docker-%E3%81%A3%E3%81%A6%E4%BB%8A%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%8B%E3%81%AE-20-09-%E7%89%88-558fae883f44

##  NTFS　HDDのマントパスが起動するごとに変わってしまう
ファイラーで表示される名前と、マウント名は別々で管理されている。
同じHDDが起動するごとに/mnt/user/datadrive1 、/mnt/user/datadrive2と変わってしまう。ディスクというGUIアプリをサーチから起動。dを入力すると見つかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/8f8362d7-a76c-bebb-0a80-1e89f6f89326.png)
ここで、マウントポイントだけを変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/cb160ca1-15c6-6eef-6be5-7ba234cb0a9a.png)
上記操作で、fstabファイルをGUIで変更することになるようだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/cedc5e11-8490-52eb-7cd6-60a839282222.png)

##  フリーズしたとき
windowsだとctrl + alt + dell だが不慣れなlinuxだとどうするか？
ラズパイでは以下のショートカットが有効だった。
Alt+PrintScreen+I(終わらなかったプロセスを強制終了させる)
https://eng-entrance.com/linux-ubuntu-termination
https://eng-entrance.com/linux-termination

##  windowsの起動ドライブを引っ越す
windows10でのSSDの交換。小さいSSDから大きいSSDへ。
ubuntuが動いているPC、またはUSBでubuntuを起動したPCに２台のSSDを接続。
USB起動するPCは母艦以外が楽。（ブート順などバイオス変更がされた場合戻す必要があるから）

まず、Gpartedでコピー元(input)、コピー先(output)のデバイス名を確認する。
/dev/sda  /dev/sdbなど。
以下のコマンドで全領域を強制コピー。

```
sudo dd if=/dev/sda of=/dev/sdb bs=1024 conv=noerror,sync
```

if:input
of:output
bs 一度にコピーするサイズbuffer
conv=noerror,sync エラー出ても進める
230Gのドライブで１時間程度だった。

この後、Gpartedでwindowsの回復パーティションを後ろに移動（削除してもいいらしい）。起動パーティション（Cドライブ）のサイズ変更。

新しいSSDを母艦に戻して起動。（ドキドキ）
ディスクのチェックメッセージが出るが無事起動。

参考
https://www.usagi1975.com/16mar140940/

小さいSSDに移動するときの参考
https://www.crossdrive.net/wp/archives/5913
↓これは昔試してうまく行った気がする。（gdisk のプロフェッショナルモードでgptを修正）
https://kappaseijin.hatenablog.com/entry/20160924/1474683913

##  ddコマンドでSSD全体のイメージをバックアップする
以下を参考
https://www.upken.jp/kb/dd-backup-restore.html

### ドライブからドライブへ複製

```
sudo dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror status=progress
```
元ディスクにエラーがありそうなときは4096と小さく、エラー無ければ bs=64k とか4Mとか。

### ドライブからフォルダへバックアップ

```
dd if=/dev/sda bs=64k conv=sync,noerror | gzip -c > /media/ubuntu/USB-HDDsName/my_backup_sda.ddimg.gz
```

USBハードディスクが自動でマウントされていれば、ファイラーやGpartedで名前等確認する。
ubuntuで起動したPCにバックアップ用のフォルダを作成し、ntfsなどバックアップ用のドライブをマウントする。

ddコマンドからパイプでgzipにつないで、バックアップフォルダ（バックアップ用ドライブ）に圧縮イメージを保存する。

リストア時はgunzipの出力をパイプでddコマンドにつないで、書込を行う。

### ddの進行確認
 status=progressを付ければ進行が分かるので、以下はやらなくても良い。

ddの進行確認は、参考ページにより以下のとおり。-USR1はそのまま入力。この作業によってddがプロセス終了にはならないので大丈夫。(ddプロセスにシグナルを送ってログを表示させるらしい)
別の新しいターミナルから実行するとddを実行しているターミナルで、進行状況が表示される。

```
# ps -e | grep dd
# sudo kill -USR1 (ddコマンドのプロセス番号)

```