技術者になりたい何か

技術者になりたい何かの覚書的な何かです

Linuxでのファイル・ディレクトリの圧縮とか解凍とか

ファイルの圧縮解凍

Linuxにおけるファイル圧縮の種類

gzip 良く使われる。拡張子は.gz。解凍コマンドgunzip or gzip -d。
・bzip2 gzipより圧縮効率は高いが時間がかかる。拡張子は.bz2。解凍コマンドbunzip or bzip2 -d。
・xz bzip2よりさらに圧縮効率が高く、時間がかかる。拡張子は.xz。解凍コマンドunxz or xz -d

ファイル圧縮それぞれの使い方

gzip

オプション
-d 圧縮ファイルを展開する
-c 標準出力へ出力する
-r ディレクトリ内のファイルを全て圧縮する(ディレクトリ自体を圧縮するわけではない)

実行例

$ ls
test01 test02 test03
$ gzip -r .
$ ls
test01.gz test02.gz test03.gz

圧縮前のファイルを残したいときは、-cで標準出力に出力したものをリダイレクトで保存する。

$ ls
test01 test02 test03
$ gzip -c test01 > test01.gz
$ ls
test01 test01.gz test02 test03

・bzip2

オプション
-d 圧縮ファイルを展開
-c 圧縮ファイルを標準出力に展開

実行例

$ ls
test01 test01.gz test02 test03
$ bzip2 test02
$ ls
test01 test01.gz test02.bz2 test03
$ bzip2 -c test03 > test03.bz
$ ls
test01 test01.gz test02.bz2 test03 test03.bz

・xz

オプション
-d 圧縮ファイルを展開
-k 圧縮・解凍後に元ファイルを削除しない
-l 圧縮ファイル内のファイルを一覧表示する

$ ls
test01 test02 test03
$ xz -k test01
$ ls
test01 test01.xz test02 test03
$ xz -l test01.xz
xz: --list is not implemented yet.

-l の使い方がよく分からなかった。

アーカイブの作成・展開

tar.gzとかtar.bzとか。
複数ファイルをまとめたアーカイブ(書庫)を作成⇒アーカイブを圧縮・展開する。
とはいえ感覚的にはディレクトリを圧縮・展開するようなものと思っておけばよい?
ちなみにソースファイルなどはtar.gz形式で配布されている事も多く、この圧縮されたファイルをtarball、tar玉と呼んだりもする。

オプション
-c アーカイブを作成する
-x アーカイブからファイルを取り出す
-t アーカイブの内容を確認
-f アーカイブファイル名を指定
-z gzipによる圧縮展開
-j bzip2による圧縮展開
-J 7zipによる圧縮展開
-v 詳細表示

など。
ちなみにtarコマンドはオプション指定時に-を省略できる数少ないコマンドの一つでもある。

よく使うパターン

$ tar cfz hoge.tar.gz hoge/

hoge/をアーカイブ作成、ファイル名hoge.tar.gz、gzipで圧縮

$ tar xvzf hoge.tar.gz

 

hoge.tar.gzを詳細表示しながら展開

$ ls
tartest test01 test01.xz test02 test03
$ tar cfz tartest.tar.gz tartest/
$ ls
tartest tartest.tar.gz test01 test01.xz test02 test03
$ mv tartest tartestbac
$ ls
tartest.tar.gz tartestbac test01 test01.xz test02 test03
$ tar xvzf tartest.tar.gz
tartest/
tartest/test1
tartest/test3
tartest/test2
$ ls
tartest tartest.tar.gz tartestbac test01 test01.xz test02 test03

どんな時に使うの?

ソースコード配布するときとか。Windowsでいう「zipでくれ」っていう感じ。
(ちなみにLinuxでもzipは扱えるが、標準で入ってないデストリビューションとかもある)

・ログファイル圧縮するときとか
ログローテ後のログファイルがgzになってることよくあるあれですね。
そのまま放置しとくとログ量が大変なことになるので、ある程度の期間なり容量によって圧縮するように
cronとかで設定しておく。
さらに圧縮後数ヶ月とかで別の場所に移動するとか(logtape)、削除するとかするのが通常。

圧縮後のログはそのままじゃ見れないのでzcatとか使って見る。
展開しようと思えば展開できるけど、展開するときは作業ディレクトリでやろう。(/var/log配下でやったりすると後がめんどい)

# zcat mail.log.1.gz | grep "検索ワード"

# zgrep '検索ワード' messages.1.gz

 

mail.log.1.gzとかmessages.1.gz がgz形式で圧縮されたログファイルになる。

 

rbenvとruby-buildでさいしんのruby環境を

rbenvとは

rubyのバージョン管理ツール。

複数バージョンのrubyを使いたいとき、リポジトリにないバージョンを使いたい時などに重宝する。

 

rbenvのインストール

Debianの場合実はリポジトリにある。

$ sudo apt-get install rbenv

 
ruby-buildのインストール。


ruby-buildは任意のバージョンのrubyをDLしてきてインスコしてくれるツール。
gitでもってきて.rbenv/plugin以下に配置

$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
~/.rbenv/plugins $ git clone git://github.com/sstephenson/ruby-build.git
Cloning into 'ruby-build'...
remote: Reusing existing pack: 3312, done.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 3318 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3318/3318), 560.20 KiB | 430.00 KiB/s, done.
Resolving deltas: 100% (1569/1569), done.
Checking connectivity... done.

 
bssh_profilesにパス追記。

$ emacs .bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

 
つかいかた

 

$ rbenv help
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   install     Install a Ruby version using ruby-build
   uninstall   Uninstall a specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme

 

install --listでインストール可能なrubyのバージョンを確認。

$ rbenv install --list
Available versions:
  1.8.5-p113
  1.8.5-p114
 
  ~~省略~~

  2.2.3
  2.3.0
  2.3.1
  ~~省略~~


インストール。これは2.4.0。

$ rbenv install 2.4.0

 
システムデフォルトのrubyのバージョンを2.4.0に。

$ rbenv global 2.4.0

 
今いるディレクトリで使用するruby のバージョンを2.4.0に

$ rbenv local 2.4.0

 

versionsでrbenv経由で入れてるrubyのバージョン一覧表示

 

$ rbenv versions
  system
  2.1.7
  2.2.3
  2.3.0
  2.3.1
* 2.4.0 (set by /home/tmin/.rbenv/version)

 

rehashで環境再設定?新しくruby入れたときとか設定変えたときとかにやる

$ rbenv rehash

けどぶっちゃけこれが何をやっているのかよくわからない・・・

バージョン確認。

$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

 


mikutterを動かす。


mikutterが置いてあるディレクトリに移動してbundleで依存ライブラリ関係を入れる。

~/mikutter$ bundle update
rbenv: bundle: command not found

 
あれ?bundleが入ってないらしい

~/mikutter$ gem install bundler
Fetching: bundler-1.14.3.gem (100%)
Bundler and RubyGems.org are free for anyone to use, but maintaining them costs more than $25,000 USD every month. Help us cover those costs so that we can keep the gem ecosystem free for everyone: https://ruby.to/support-bundler
Successfully installed bundler-1.14.3
Parsing documentation for bundler-1.14.3
Installing ri documentation for bundler-1.14.3
Done installing documentation for bundler after 14 seconds
1 gem installed

 


おk。改めて

~/mikutter$ bundle install --path vender/bundle
Fetching gem metadata from https://rubygems.org/.............
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies...
Installing rake 10.5.0
Installing public_suffix 2.0.5
Installing pkg-config 1.1.7
Installing safe_yaml 1.0.4
Installing delayer 0.0.2
Installing locale 2.1.2
Installing text 1.3.1
Installing hashdiff 0.3.2
Installing httpclient 2.8.3
Installing instance_storage 1.0.0
Installing json_pure 1.8.6
Installing memoist 0.15.0
Installing metaclass 0.0.4
Installing mini_portile2 2.1.0
Installing moneta 0.8.1
Installing oauth 0.5.1
Installing power_assert 1.0.1
Installing ruby-hmac 0.4.0
Installing ruby-prof 0.16.2 with native extensions
Installing totoridipjp 0.1.0
Installing unf_ext 0.0.7.2 with native extensions
(中略

nstalling gdk_pixbuf2 3.1.1
Installing gtk2 3.1.1 with native extensions
Bundle complete! 22 Gemfile dependencies, 43 gems now installed.
Bundled gems are installed into ./vender/bundle.

 問題なければBundle complete!まで出るはず。

Errorが出たときは何かしらのライブラリパッケージが足りない時が多い。

libなんちゃらとか、libなんちゃらdevってパッケージ入れると解決したりしなかったり。

 

$ ruby mikutter.rb

 


で動けばおk。


redmineとか動かすときにリポジトリ配布のrubyのバージョンが合わないときとかに使うと幸せになれる。
あと、いくつかのrailsプロジェクトとか動かしたいときに、rbenv localで各ディレクトリで使うrubyのバージョンを指定しとくと使い分けられたりします。

Teraterm macroテンプレ(簡易版)

世界にあふれているTeraterm macroのテンプレ。

自分が使ってるのを張っとこうかと思う。(今更

 

基本的なこと

ホスト名、ユーザ名、パスワード、鍵ファイルの指定などを書いておく。

テキストで作成→拡張子をttlにする。

ttlTeratermに関連付け

→ダブルクリックでホストログインまで完了!!やったね!!

 

ほんとはログイン後にhostnameとかpwdとかsuしてパス入れて管理者権限になるってのも入れれるけど、自分用ではあまり使わない。

 

プレインテキストで鍵不使用、パスワードログインのまくろ

HOSTADDR = 'hostIP'
USERNAME = 'username'
PASSWORD = 'password'

sprintf2 COMMAND '%s /ssh /2 /auth=password /user=%s /passwd=%s ' HOSTADDR USERNAME PASSWORD
connect COMMAND
end

非常にシンプルですね。

IP,Uname,Pass指定して、ログインまでを自動化。

 

公開鍵認証、平文パスワード拒否

PROMPTのとこには鍵ファイル作成時に作ったパスフレーズを入れる。

 

HOSTADDR = 'hostname'
USERNAME = 'username'
PROMPT = 'password'
KEY_FILE = 'Path/to/id_rsa'

PASSWORD = ''
sprintf2 PASSFILE '%s.password.dat' KEY_FILE
getpassword PASSFILE PROMPT PASSWORD

sprintf2 COMMAND '%s /ssh /2  /auth=publickey /user=%s /passwd=%s /keyfile="%s"' HOSTADDR USERNAME PASSWORD KEY_FILE
connect COMMAND
end

HOSTはFQDNでもIPでも可。

usernameは普通にユーザ名

KeyFileは作成した鍵ファイルを指定。

 

もっといろいろやりたい人はこういうとこ見ると幸せになれるかも

www.j-oosk.com

Sponsored Link