- 投稿日:2019-07-01T23:11:47+09:00
【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」について紹介しました。
これからもどんどん記事をあげていくので楽しみにしていてください!
- 投稿日:2019-07-01T23:00:12+09:00
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/grubGRUB_CMDLINE_LINUX に "rootflags=uquota,pquota" を追加。
sudo grub-mkconfig -o /boot/grub/grub.cfgdocker 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:/#サイズが変わった。
- 投稿日:2019-07-01T22:52:10+09:00
tmuxのおすすめconf設定@2019
概要
正直何番煎じかわからないがQiitaでのtmux.confの情報が軒並み古くなってしまっているため、今日(2019年7月1日)現在でそこそこ新しいバージョンである2.9に対応したtmux.confを晒す。
みなさんのより良いtmuxライフの足しになればと思います。
tmuxってなに?何が便利なの?という人はこちらの記事が参考になります。
個人的な(tmuxをおすすめする)意見を書き始めるとそれはそれでまた一つの記事になりそうなので、省略しますが、ざっくり言うと下記の理由です。
- 私はiTerm2が非常に好きだったのですが、いかんせんWindowsにはない。
- 環境によらずペインの分割を自由自在にしたい
- 再起動時などにコンソールの状態を保存しておきたい
この記事でできるようになること
見た目の特徴
- 非アクティブのペインが白っぽくなる(アクティブペインが見やすい)
機能的特徴
- マウスが使える
- クリップボードとの連携(プラグインは不要)
- ペインの移動がprefix不要でスムーズに
- ペインの並列実行の有無をトグルで行う
前提
対象環境
本題
さて、気になる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で同時実行のオンオフにできます。
ステータスラインの設定
ステータスラインを下に表示するのですがそこの設定を書いてます。
基本的にはコメントのとおりです。操作系
基本的にはマウスでのスクロールを有効化したり、prefix+[で入るコマンドモードでのコピーの仕方をvi風にしている。
またそのコピーしたデータをクリップボードと連携するための設定が記されている。
WindowsもMacも同じことができるが書き方が違うので環境に応じて書き換えてください。おわりに
以上です。
皆さんからもおすすめの設定があれば教えてください。
- 投稿日:2019-07-01T22:48:32+09:00
linuxサーバーでsftpを使って任意のディレクトリだけのファイル転送をする
はじめに
クライアントPCとかで、linuxサーバーにあるファイルをやり取りしたいとなった時、
だいたいの場合はターミナルソフト入れて、sshで繋いで、みたいな流れになると思うが、
もろもろの事情により、限定したディレクトリ以下のファイルだけしか見れないようにしたいとき、
SFTPが役に立つlinuxサーバー側の設定としてはおおまかに、
SFTP接続用ユーザーを作成し、
編集可能なディレクトリを指定するというものだけ一回やったら30分くらいでできるようになる
セキュリティを上げたい場合は接続用鍵を作成してもいいが、
なくてもSFTP接続はできる枯れたレガシー技術だけど、
とっさの時に使えるため、
自分のメモ用に残す手順
ユーザー・グループ作成
最初に接続用ユーザー作成
useradd SFTPuser passwd SFTPuserSFTP接続できるグループも作成する
groupadd sftp usermod -G sftp SFTPuserSFTPで繋げたいディレクトリを作成
mkdir /test mkdir /test/hogessh接続設定
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 hogesshdの適用
sshの設定が間違っていないかテスト
sshd –t上記コマンドでエラーが出なければ再起動
service sshd restart接続確認
windowsクライアントの場合はWinscpなどで作成したユーザー、パスワード、鍵を使い、接続確認する
接続後に、/test以下のディレクトリのみが見えていれば完了まとめ
SFTPについてはググればいくらでも情報はあったが、
個人的にわかりやすいものがなかったため、
今回まとめてみたこういった枯れた技術もまだまだ役に立つ場面が出てくるため、
使えて損はないと感じた
- 投稿日:2019-07-01T17:11:18+09:00
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 0freeが595(約0.5Gb)->3198(約3Gb)になりました!
さらに定期実行できるようにcronに設定。sudo su # rootで実行 crontab -e# 毎時0分にキャッシュクリア 0 * * * * echo 2 > /proc/sys/vm/drop_cachesJenkinsのメモリリークについて考察
jenkinsのジョブを実行し続けるとメモリの空きが減ってくる。
おそらくslabキャッシュというkernelがdentry等をキャッシュするために使うメモリ領域が多くなっているため。
slabキャッシュは以下コマンドで開放する。echo 2 > /proc/sys/vm/drop_caches参考
- 投稿日:2019-07-01T14:49:20+09:00
(メモ)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_COMMANDvisudoで内容を確認し、「:q」でvisudoから抜ける
# visudosuできないか確認
「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.参考
- 投稿日:2019-07-01T14:27:06+09:00
Linux(主にAWS)でのユーザー追加方法
ユーザーの追加とSSHの認証用の鍵を生成する。
# useradd ユーザー名 # su - ユーザー名 $ ssh-keygen -t rsasudoをパスワード無しで利用するためvisudoで下記のコメントアウトを外す。
%wheel ALL=(ALL) NOPASSWD: ALL対象ユーザーをwheelグループに追加する。
usermod -aG wheel ユーザー名所属グループを確認する。
groups下記は単体ユーザーを設定するやり方。
sudoを使用する場合はvisudoでユーザーを追加する。# Allow root to run any commands anywhere ユーザー名 ALL=(ALL) NOPASSWD:ALL
- 投稿日:2019-07-01T05:59:52+09:00
【技術備忘録③】容量監視コマンドの「df」「du」コマンドの習得で、原因究明力の向上
- 現在利用している言語や技術の記法や不明点等を記録していく記事第三弾。
- 素晴らしき先人たちの「タイトル命名術」を事細かく調査した結果、センスや感性が最終着地点であることが判明し、史上最大の悟りに没頭。
- 今回は、容量監視コマンドである「df」「du」コマンドを記録して、原因究明力を更に上げていくことにしよう。
作業環境
- Amazon Linux 2
- ※結果画面や利用確認等の、メイン環境として使用。
- Mac OS X 10.13.4
- ※Macでの操作性と利用可否確認のために使用。
dfコマンド
概要や特徴
- OSのディスク容量のサイズや使用率等の情報を表示するコマンドツール。
- 手元の環境のシステムがどのくらいの容量を有しているのかを確認する際に用いる。
- パソコンの挙動の不具合・サーバーエラー等の際の原因究明に便利。
基本操作
- 基本的な使用例は下記。
- 基本的な項目の見方は下記。
項目名 意味 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コマンド同様に、挙動の不具合やサーバーエラー等の原因究明に便利。
基本操作
- 基本的な使用例は下記。
- 基本的な操作方法は下記。
内容 コマンド カレントディレクトリ(現在位置)下の全ての表示 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 ファイル場所まとめ
- 今回は、容量監視コマンドの学習ということで、知らぬ間の容量の無頓着使用に、自分への怯えと同時に愛着を感じながら記事を書く。
- 試用中毒であるため、そろそろクラウド中心を検討する時期がきたことに、表情筋を自由に踊り狂わせる生活。
- コマンドツールにも視覚性を求める現代技術者のため、次回は容量監視を可視化できるツールを探して試用することにしよう。
参考
https://www.yoheim.net/blog.php?q=20160707
→こちらの記事を参考にいたしました。大変お世話になりました。https://help.gmocloud.com/app/answers/detail/a_id/3275/~/df%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%81%AE%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E5%AE%B9%E9%87%8F%E7%A2%BA%E8%AA%8D
→こちらの記事を参考にいたしました。大変お世話になりました。