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

【Linux】touchコマンドの使い方とタイムスタンプの意味を解説

未来電子テクノロジーでインターンをしている田島一毅です。プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

最近Linuxについて勉強をしていて、そこで基本コマンドのtouchコマンドについて勉強しました。

その時に

「タイムスタンプってなんの意味があるん?」

って思って少し調べたので、今回は、touchコマンドの紹介とともにタイムスタンプの意味について紹介します。

Linuxのコマンドである「touch」とは?

Linuxのコマンドである「touch」では、空のファイルの作成や、更新日時やアクセス日時を刻めるタイムスタンプの変更ができます。

空のファイルを作ることはよくあるかもしれませんが、タイムスタンプの変更ってなんの意味があるんだろう…

僕はそう思いました。

タイムスタンプの意味とは

どうやらタイムスタンプには2つの意味があるらしいです。

1) 更新日時やアクセス日時を更新して、いつ更新したか・いつアクセスしたかを明らかにする&その日時以降改ざんがないことを示す

2) ある日時に確かにデータが存在したことを示す

2)の意味は正直予想外でした。

でもよくよく考えれば、共同開発の場合などはこのタイムスタンプは非常に重要ですね。

コマンド「touch」の基本的な使い方

空のファイルを作る

空のファイルを作るのは非常に簡単です。

touch ファイル名

で作れます。

ただし、空のファイルを作成する場合、このファイル名は既に存在するファイル名であってはなりません。

もし存在するファイル名を指定した場合、以下の「タイムスタンプの更新」が実行されます。

タイムスタンプを更新する

既存のファイルのタイムスタンプを更新する場合、

touch 既存のファイル名

として実行します。

コマンド「touch」のオプション

コマンド「touch」にはオプションがあるので、以下で確認してください。

-aオプション

-aオプションは、アクセスの日時のみを更新するためのオプションで、

touch -a ファイル名

で、指定したアクセス日時のみを更新できます。
更新はしてないけど、アクセスはしたということを示すことができます。

-cオプション

上記の「空のファイルを作る」「タイムスタンプを更新する」で述べたように、存在しないファイル名をtouchしたときは、新しい空のファイルが作成されますが、それを阻止したいときにこのオプションを使います。

使い方は、

touch -c ファイル名

-dオプション

タイムスタンプの日時を現在ではなく、指定した日時にしたいときにこのオプションを使います。

使い方は、

touch --date="2019/7/1 23:00" ファイル名

-mオプション

最終更新日時のみを更新する時にこのオプションを使います。

使い方は、

touch -m ファイル名

-rオプション

指定した別のファイルと同じ日時にタイムスタンプを更新したいときにオプションを使います。

使い方は、

touch -r 基準となるファイル 更新したいファイル

これを知っていると、複数のファイルのタイムスタンプを更新するのが非常に楽になりますね。

まとめ

今回は、タイムスタンプとLinuxのコマンド「touch」について紹介しました。

これからもどんどん記事をあげていくので楽しみにしていてください!

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

Ubuntu 18.04上のDockerでコンテナのベースサイズを自在に変える

関連記事

- Docker on CentOS7で特定コンテナの容量制限を柔軟に行ってみた

https://qiita.com/haniokasai/items/b736604a78506411d2fc
- CoreOSでdockerのbasesizeをかえる。
https://qiita.com/haniokasai/items/b34c0e1faaf8c4b5d2dd
- dockerでpquotaを有効にする
https://qiita.com/haniokasai/items/805328aec39137e671b3
- Dockerで特定のコンテナサイズを自由に拡張する設定する devicemapper編
https://qiita.com/haniokasai/items/2b7a1889e4930b7682c9

環境

Ubuntu Mate 18.04 on VBox on Windows 10
インストール時に

  • /boot をext4でフォーマット
  • / をxfsでフォーマット

Docker info

# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.7
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true

無設定時

#  docker run --storage-opt size=5g -t -i ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
^[[2~latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete 
14ca88e9f672: Pull complete 
a31c3b1caad4: Pull complete 
b054a26005b7: Pull complete 
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
docker: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option.
See 'docker run --help'.

grubの編集

vi /etc/default/grub

GRUB_CMDLINE_LINUX に "rootflags=uquota,pquota" を追加。

sudo grub-mkconfig -o /boot/grub/grub.cfg
docker run --storage-opt size=5g -t -i ubuntu /bin/bash
root@67f434ee5ab8:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay         5.0G  8.0K  5.0G   1% /
tmpfs            64M     0   64M   0% /dev
tmpfs           2.8G     0  2.8G   0% /sys/fs/cgroup
/dev/sda5        55G  8.2G   47G  16% /etc/hosts
shm              64M     0   64M   0% /dev/shm
tmpfs           2.8G     0  2.8G   0% /proc/asound
tmpfs           2.8G     0  2.8G   0% /proc/acpi
tmpfs           2.8G     0  2.8G   0% /proc/scsi
tmpfs           2.8G     0  2.8G   0% /sys/firmware
root@67f434ee5ab8:/# 

サイズが変わった。

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

tmuxのおすすめconf設定@2019

概要

正直何番煎じかわからないがQiitaでのtmux.confの情報が軒並み古くなってしまっているため、今日(2019年7月1日)現在でそこそこ新しいバージョンである2.9に対応したtmux.confを晒す。
みなさんのより良いtmuxライフの足しになればと思います。
tmuxってなに?何が便利なの?という人はこちらの記事が参考になります。
個人的な(tmuxをおすすめする)意見を書き始めるとそれはそれでまた一つの記事になりそうなので、省略しますが、ざっくり言うと下記の理由です。

  • 私はiTerm2が非常に好きだったのですが、いかんせんWindowsにはない。
    • 環境によらずペインの分割を自由自在にしたい
  • 再起動時などにコンソールの状態を保存しておきたい

この記事でできるようになること

  • 完成図
    Untitled.gif

  • 見た目の特徴

    • 非アクティブのペインが白っぽくなる(アクティブペインが見やすい)
  • 機能的特徴

    • マウスが使える
    • クリップボードとの連携(プラグインは不要)
    • ペインの移動がprefix不要でスムーズに
    • ペインの並列実行の有無をトグルで行う

前提

  • 対象環境

    • Mac(Mojabe)
      • tmux 2.9
      • iTerm2
        • クリップボードとの連携をするため(赤い部分にチェックをつける) ScreenShot 2019-07-01 22.14.58.png
    • Ubuntu(18.04) in WSL
      • tmux 2.9a
        • aptで入るのは2.1と古いので最新はこの方の記事を参考に入れるとよいです。
        • @ha4gu様、掲載許可ありがとうございます!
      • win32yank.exeを導入してクリップボードと連携する。
        • win32yankはクリップボードと連携するツール。
        • 上記URLからダウンロード&解凍後Windows側でパスの通ったディレクトリに配置。

本題

さて、気になるconfの内容ですが、こちらです。

# 基本設定
## 256色端末を使用する
set -g default-terminal "screen-256color"
set -g terminal-overrides 'xterm:colors=256'
## Escキーの遅延を解消
set -s escape-time 0
## status line を更新する間隔を1秒にする
set-option -g status-interval 1
## ウィンドウのインデックスを1から始める
set -g base-index 1
## ペインのインデックスを1から始める
setw -g pane-base-index 1
## アクティブなペインのみ白っぽく変更(真っ黒は232)
set -g window-style 'bg=colour239'
set -g window-active-style 'bg=colour234'

# キーの割り当て変更
## prefixキーの割り当て(Ctr+a)
set -g prefix C-a
## prefix + -で水平分割
bind - split-window -v
## prefix + \で垂直分割
bind \ split-window -h
## ペインの移動をprefixなしで行う(Shift + 矢印キー)
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R
## ペインの順次移動をCtr + o に設定
bind -n C-o select-pane -t :.+
## 並列実行のトグル化
bind e setw synchronize-panes \; display "synchronize-panes #{?pane_synchronized,on,off}"

# status lineの設定
## window-status を中央揃えで配置する
set-option -g status-justify "centre"
## status line の背景色を指定する。
set-option -g status-bg "colour238"
## status line の文字色を指定する。
set-option -g status-fg "colour255"
## status-left の最大の長さを指定する。
set-option -g status-left-length 20
## status-left のフォーマットを指定する。
set-option -g status-left "#[fg=colour255,bg=colour241]Session: #S #[default]"
## window-status のフォーマットを指定する。
set-window-option -g window-status-format " #I: #W "
## カレントウィンドウの window-status のフォーマットを指定する
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W #[default]"
## status-right の最大の長さを指定する。
set-option -g status-right-length 60
## status-right のフォーマットを指定する。
set-option -g status-right "#[fg=colour255,bg=colour241] #h | LA: #(cut -d' ' -f-3 /proc/loadavg) | %m/%d %H:%M:%S#[default]"

# 操作系
## マウス操作を有効化
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
## コマンドモードでの選択方法をvim風に変更
set-window-option -g mode-keys vi
setw -g mode-keys vi
bind-key -T copy-mode-vi v send -X begin-selection
## クリップボートとの連携
### ☆MacOS
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
### ☆Windows(WLS)
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "win32yank.exe -i"
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "win32yank.exe -i"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "win32yank.exe -i"
unbind-key -T prefix v
bind-key v run "win32yank.exe -o | tmux load-buffer - && tmux paste-buffer"

最後の☆2つの箇所はOSによって書き分けてください。
2つ同時に書くとどうなるかは保証できないです。

解説

基本設定

これらは見た目の問題なので拘る必要はないです。
私は割とシンプルに基本的なものしか入れてませんが個性が出るところなのでこだわりたい人はここでもりもりしてください。
基本的にはコメントのとおりです。

キーの割り当て

  • prefixは初期だと個人的には使いにくいのでControl + aに変えてます。
  • ペインの切り替えはより直感的に[-]で水平分割、[|]のキーである¥で垂直分割です。
  • ペインの移動はシフトキー + 矢印キーで動けます。
    • bind -nはprefix不要、という意味です。他でも使えますのでお好みで設定してください。
    • 別途 Control + oで順次移動もできます。
  • prefixキー + eで同時実行のオンオフにできます。
    • オンオフの様子はこんな感じ Untitled.gif

ステータスラインの設定

ステータスラインを下に表示するのですがそこの設定を書いてます。
基本的にはコメントのとおりです。

操作系

基本的にはマウスでのスクロールを有効化したり、prefix+[で入るコマンドモードでのコピーの仕方をvi風にしている。
またそのコピーしたデータをクリップボードと連携するための設定が記されている。
WindowsもMacも同じことができるが書き方が違うので環境に応じて書き換えてください。

おわりに

以上です。
皆さんからもおすすめの設定があれば教えてください。

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

linuxサーバーでsftpを使って任意のディレクトリだけのファイル転送をする

はじめに

クライアントPCとかで、linuxサーバーにあるファイルをやり取りしたいとなった時、
だいたいの場合はターミナルソフト入れて、sshで繋いで、みたいな流れになると思うが、
もろもろの事情により、限定したディレクトリ以下のファイルだけしか見れないようにしたいとき、
SFTPが役に立つ

linuxサーバー側の設定としてはおおまかに、
SFTP接続用ユーザーを作成し、
編集可能なディレクトリを指定するというものだけ

一回やったら30分くらいでできるようになる

セキュリティを上げたい場合は接続用鍵を作成してもいいが、
なくてもSFTP接続はできる

枯れたレガシー技術だけど、
とっさの時に使えるため、
自分のメモ用に残す

手順

ユーザー・グループ作成

最初に接続用ユーザー作成

useradd SFTPuser
passwd SFTPuser

SFTP接続できるグループも作成する

groupadd sftp
usermod -G sftp SFTPuser

SFTPで繋げたいディレクトリを作成

mkdir /test

mkdir /test/hoge

ssh接続設定

vi /etc/ssh/sshd_config

元々書かれている下記をコメントアウト
#Subsystem      sftp    /usr/libexec/openssh/sftp-server

以下を追記
Subsystem sftp internal-sftp
Match User SFTPuser
        ChrootDirectory /test  #SFTPで繋げたいディレクトリを指定
        ForceCommand internal-sftp

接続用のカギを作成(この項目はセキュリティ要求レベルによってしなくてもOK)

su SFTPuser
ssh-keygen -t rsa
cp /home/SFTPuser/.ssh/id_rsa.pub /home/SFTPuser/.ssh/authorized_keys

作成した秘密鍵「id_rsa」はローカルに保存しておこう

SFTP接続用ディレクトリの確認

以下の権限状態となっていることを確認
権限が異なるとSFTPで接続できないエラーとなる場合がある

ls -la /
drwxr-xr-x    4 root root  4096  6月  4 18:38 2019 test

ls -la /test/
drwxrwxrwx 4 SFTPuser SFTPuser  4096  6月  4 19:01 2019 hoge 

sshdの適用

sshの設定が間違っていないかテスト

sshd –t

上記コマンドでエラーが出なければ再起動

service sshd restart

接続確認

windowsクライアントの場合はWinscpなどで作成したユーザー、パスワード、鍵を使い、接続確認する
接続後に、/test以下のディレクトリのみが見えていれば完了

まとめ

SFTPについてはググればいくらでも情報はあったが、
個人的にわかりやすいものがなかったため、
今回まとめてみた

こういった枯れた技術もまだまだ役に立つ場面が出てくるため、
使えて損はないと感じた

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

Jenkinsのジョブが長すぎてメモリリークした時の対処法

経緯

1時間半程かかるrspecのテストをJenkinsで実行したところ、途中でJenkinsが落ちてしまった。
再度テスト実行して落ちる寸前でfreeコマンドを確認したところメモリのusedが595(約0.5Gb)になっていたため、メモリが枯渇したのだと思いメモリ開放について調べてみた。

Tl; DR

slabキャッシュの開放

echo 2 > /proc/sys/vm/drop_caches

実行前

$ free -tm
             total       used       free     shared    buffers     cached
Mem:          7884       7289        595         37        474       1699
-/+ buffers/cache:       5115       2768
Swap:            0          0          0

実行後

$ free -tm
             total       used       free     shared    buffers     cached
Mem:          7884       4686       3198         37        475        289
-/+ buffers/cache:       3922       3962
Swap:            0          0          0

freeが595(約0.5Gb)->3198(約3Gb)になりました!
さらに定期実行できるようにcronに設定。

sudo su # rootで実行
crontab -e
# 毎時0分にキャッシュクリア
0  * * * * echo 2 > /proc/sys/vm/drop_caches

Jenkinsのメモリリークについて考察

jenkinsのジョブを実行し続けるとメモリの空きが減ってくる。
おそらくslabキャッシュというkernelがdentry等をキャッシュするために使うメモリ領域が多くなっているため。
slabキャッシュは以下コマンドで開放する。

echo 2 > /proc/sys/vm/drop_caches

参考

https://bacchi.me/linux/server-memory-troubleshoot/

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

(メモ)su させない

/etc/sudoers.dディレクトリ配下を編集

rootユーザで/etc/sudoers.d配下に ban_commandファイル(このファイル名はなんでもいい)を作成。

# cd /etc/sudoers.d
# touch ban_command
# vi /etc/sudoers.d/ban_command
Cmnd_Alias BAN_COMMAND = /bin/su
<ユーザ名> ALL=NOPASSWD: ALL, !BAN_COMMAND

visudoで内容を確認し、「:q」でvisudoから抜ける

# visudo

suできないか確認

「Sorry〜」のメッセージが出力されればOK

$ su - <ユーザー名>
$ sudo su
Sorry, user <ユーザ名> is not allowed to execute '/bin/su' as root on ip-xx-xxx-xx-xx.ap-northeast-1.compute.internal.

参考

sudoを/etc/sudoers.d/fileで許可する

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

Linux(主にAWS)でのユーザー追加方法

ユーザーの追加とSSHの認証用の鍵を生成する。

# useradd ユーザー名 
# su - ユーザー名
$ ssh-keygen -t rsa

sudoをパスワード無しで利用するためvisudoで下記のコメントアウトを外す。

%wheel  ALL=(ALL)       NOPASSWD: ALL

対象ユーザーをwheelグループに追加する。

usermod -aG wheel ユーザー名

所属グループを確認する。

groups

下記は単体ユーザーを設定するやり方。
sudoを使用する場合はvisudoでユーザーを追加する。

# Allow root to run any commands anywhere
ユーザー名 ALL=(ALL) NOPASSWD:ALL
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【技術備忘録③】容量監視コマンドの「df」「du」コマンドの習得で、原因究明力の向上

  • 現在利用している言語や技術の記法や不明点等を記録していく記事第三弾。
  • 素晴らしき先人たちの「タイトル命名術」を事細かく調査した結果、センスや感性が最終着地点であることが判明し、史上最大の悟りに没頭。
  • 今回は、容量監視コマンドである「df」「du」コマンドを記録して、原因究明力を更に上げていくことにしよう。

作業環境

  • Amazon Linux 2
    • ※結果画面や利用確認等の、メイン環境として使用。
  • Mac OS X 10.13.4
    • ※Macでの操作性と利用可否確認のために使用。

dfコマンド

概要や特徴

  • OSのディスク容量のサイズや使用率等の情報を表示するコマンドツール。
  • 手元の環境のシステムがどのくらいの容量を有しているのかを確認する際に用いる。
  • パソコンの挙動の不具合・サーバーエラー等の際の原因究明に便利。

基本操作

  • 基本的な使用例は下記。

test.png

  • 基本的な項目の見方は下記。
項目名 意味
Filesystem(ファイルシステム) ディスク名
1K-blocks(1K-ブロック) 使用可能なディスク容量
Used(使用) 使用済みディスク容量
Available(使用可) ディスク空き容量
Use%(使用%) ディスク使用率
Mounted on(マウント) ファイルシステムの位置(場所)
  • 基本的な操作方法は下記。
内容 コマンド
通常表示 df
サイズ容量表示 df -h
全ファイルシステム容量表示 df -a
サイズ単位での表示 df -BMで1024 * 1024単位
df -BMBで1000 * 1000単位
df -Hでサイズ単位に合わせた表示
iノード(ファイル属性情報データ)での表示 df -i
ファイル場所指定での表示 df ファイルパス
ファイルタイプの表示 df -T
バージョン表示 df --version
ヘルプ表示 df --help

duコマンド

概要や特徴

  • ファイル容量のサイズや使用率等の情報を表示するコマンドツール。
  • dfコマンドと同様に、サイズや使用率の表示コマンドだが、ファイルごとの表示のため、より詳細な情報を確認することができる。
  • dfコマンド同様に、挙動の不具合やサーバーエラー等の原因究明に便利。

基本操作

  • 基本的な使用例は下記。

hsh.png

  • 基本的な操作方法は下記。
内容 コマンド
カレントディレクトリ(現在位置)下の全ての表示 du
※HOMEディレクトリ等で行うと、大量の処理が走るため注意
容量の合計のみ表示 du -s
du -s ファイル場所で特定ディレクトリでの合計表示
サイズ単位での表示 du -h
du -shみたいに組み合わせて利用する場合が多い。
階層指定 df -d階層数
例 : df -d1で1つ目の階層までの表示指定
du -hd1みたいに組み合わせて利用
バイト単位表示 du -b
バージョン表示 du --version
ヘルプ表示 du --help

実践コマンド

  • 実際に挙動不具合等での確認の際に便利なコマンドは主に下記。
# 2階層指定で、ファイル容量の多い順での表示
$ du -hd2 ファイル場所 | sort -nr

# 2階層指定で、ファイル容量の少ない順での表示
$ du -hd2 ファイル場所 | sort -h

# 特定ディレクトリの合計のみの表示
$ du -sh ファイル場所

まとめ

  • 今回は、容量監視コマンドの学習ということで、知らぬ間の容量の無頓着使用に、自分への怯えと同時に愛着を感じながら記事を書く。
  • 試用中毒であるため、そろそろクラウド中心を検討する時期がきたことに、表情筋を自由に踊り狂わせる生活。
  • コマンドツールにも視覚性を求める現代技術者のため、次回は容量監視を可視化できるツールを探して試用することにしよう。

参考

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