読者です 読者をやめる 読者になる 読者になる

文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

いつも忘れるlinuxコマンド一覧

linux

■ ファイル検索
$ locate mydoc.txt

$ find / -name mydoc.txt

※ findとlocateの違い
locateはlinuxに作られるファイルやディレクトリ名の一覧を格納したDBから検索してくるので高速。
findは日時とかサイズとか正規表現とかいろんなオプションがつけられる。



■ ファイル、ディレクトリ名の変更

$ mv oldname newname

■ 権限付与
# chown hogeuser file1

フォルダの所有権の変更は以下
# chown -R hogeuser フォルダのパス

心の中でチョウンって読んでしまうこのコマンド。。



■ 現在のディレクトリを表示
$ pwd


■ 現在ログインしているユーザーのパスワードでsuコマンドを実行する
$ sudo su

色んなツールまとめ(随時更新)

ツール、ウィジェット

日々の作業でよく使うツールをまとめておきます。



■ オフィス系

サクラエディタ
http://sakura-editor.sourceforge.net/download.html
テキストエディタgrep機能というファイルをまたいだ検索機能が便利。

検索したいディレクトリ、単語などを入れると
f:id:ron623:20160928160903p:plain

以下のように検索結果が出てくる。
f:id:ron623:20160928161144p:plain
詳細を見たい検索結果をダブルクリックすると、そのファイルの該当箇所にアクセスすることが出来る。

あと、色をカスタムできる。
f:id:ron623:20160928160904p:plain


・Cassava Editor
http://forest.watch.impress.co.jp/library/software/cassavaedit/
CSVエディター

openoffice
http://forest.watch.impress.co.jp/library/software/openoffice/
Microsoft Office」互換の無料のオフィス統合環境。
表計算、ワード、パワポと一通りそろっている。でもマイクロソフトのファイルを開くと互換性があるとはいえ
たまに壊れるので要バックアップ。

・職印くん
http://www.vector.co.jp/soft/win95/util/se171969.html
電子印鑑作成ツール



■ 接続ツール

・Tera Term(テラターム)
Windowsから他の端末に接続するときに使うソフト。
寺西さんがつくったからテラターム
http://forest.watch.impress.co.jp/library/software/utf8teraterm/




■プログラミング

sql developer
http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html
GUIoracleを操作できるツール。

eclipse
http://mergedoc.osdn.jp/
開発環境。java以外の他言語の開発にも使えます。
宣言に飛んだり、検索機能が充実していたり、インデントを一発で調整できたりと便利。

インストーラーの解凍にlhaplusを使うと中身が壊れることがあるので
その際は7-Zipを使用してみてください。
http://forest.watch.impress.co.jp/library/software/7zip/

WinMerge
http://forest.watch.impress.co.jp/library/software/winmerge/
ファイル比較。




仮想マシン


VirtualBox
https://www.virtualbox.org/wiki/Downloads

VMware
http://www.vmware.com/jp/products/player.html
ダウンロード > 無償製品 > Workstation Player

インストーラーをポチポチ押してくだけで仮想環境が構築できて簡単。
f:id:ron623:20160928161856p:plain

jenkinsからの実行時、意図したrubyのバージョンで実行されない(最新バージョンで実行されてしまう)

jenkins


■ 問題
実行するノードに、指定しているrubyよりも新しいバージョンが入っている場合そのバージョンで実行されてしまう。



まず、実行するノードに直接はいって状態の確認。


C:\Users\guest>PATH
C:\Windows\system32;・・・(略)・・・C:\Ruby22-x64\bin;C:\Ruby23-x64\bin;

⇒ このマシンにはRuby2.3も入っている。


Rubyのバージョンは

C:\Users\guest>ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155)

2.2が実行されるように設定されている。
なので、マシンから直接たたけば2.2で実行される。


しかし、jenkinsでビルドすると2.3で実行されてしまう・・・・。




■ 原因

はっきりとは特定できてない。
けど、、jenkins > ノード > 環境変数にRuby2.3のパスもばっちり書かれていてパスが通った状態になっているので
これが原因で最新を見て実行されているのかな。。



■ 対策

ビルドするジョブの jenkinsの設定>スクリプト で実行したいrubyのバージョン以外を除外したパスをset path ~で設定する

set path=C:\Windows\system32;・・・(略)・・・C:\Ruby22-x64\bin;

「C:\Ruby23-x64\bin;」を除外してわざわざパスが通らないようにしてから実行するという対策をとりました。

これで2.2で動くようになりました。




・・・こんなことしなくても解決する方法があるはずですorz

WebdriverからFirefox起動時に"Unable to connect to host"エラー

テスト自動化


最新のFirefoxに更新したら「Unable to connect to host」エラーが出た。



■ 原因

WebDriverのバージョンがFirefoxのバージョンに対応していないのが原因。



■ 対応

1.Firefoxの自動バージョンアップは設定で無効にしておく


2.FireFoxESR版を使用する

ESR版というのは「Extended Support Release」という法人向けの延長サポート版で、
最新機能が反映されるのは通常版に投入されてから数開発サイクル後になるが
安全性やセキュリティ面は考慮されているもの。

以下からダウンロードする

Web ブラウザ Mozilla Firefox — 各国語版の Firefox Extended Support Release をダウンロード — Mozilla


法人向けって書いてあるけど個人でダウンロードしても問題ありません。


最新である必要がなければESR版をおすすめします。

公開鍵方式でパスワードなしのssh接続を行う

linux

最近linuxをちょっと触る機会があったので、そのとき毎回パスワード入れてアクセスするの面倒だなぁ・・と思っていたら
パスワードなしでssh接続が出来るというのが分かったのでやってみました。




ssh接続とは

Secure Shell(セキュアシェル)の略称で、リモートコンピュータと通信するためのプロトコル
Windowsでいう「リモートデスクトップ」と同じ役割です。
ssh接続での認証方式には、パスワード認証と公開鍵認証があります。
デフォルトではパスワード認証になっています。


■ パスワード認証の場合

[user1@clientserver ~]$ ssh tomcat@192.168.137.127
 (もしくは、[user1@clientserver ~]$ ssh tomcat@hostserver.sample-net.com としてもOK)
と入れると
tomcat@hostserver.sample-net.com's password:
パスワードを聞かれます。

これがおなじみのパスワード認証です。



■ 公開鍵認証の場合

あらかじめ、接続元でカギを作っておいて、そのカギで通信します。

パスワード認証だと適当にパスワードを入れて中に入られてしまう危険があります。
誰がサーバーに接続しているかは、「/var/log/secure」のログを見ると分かります。

Sep 5 16:25:40 aaaserver login[8276]: FAILED LOGIN SESSION FROM (null) FOR sakurai,Authentication failure
Sep 5 16:26:40 aaaserver login[8276]: FAILED LOGIN SESSION FROM (null) FOR sakurai,Authentication failure
Sep 5 16:26:59 aaaserver login[8276]: FAILED LOGIN SESSION FROM (null) FOR sakurai,Authentication failure

こんなのがずらっと並んでると思います。
上記では"sakurai"というユーザーが何度もパスワードを入れて失敗しているのが分かります。
外部からのアクセスかもしれませんし、社内であれば予想されるパスワードを入れて悪用するといったことも考えられます。


公開鍵方式の場合は、接続元で秘密鍵と公開鍵を作成し、接続先には公開鍵だけ渡します。
接続先は渡された公開鍵で暗号化し、接続元に送ります。
これを秘密鍵で復号化します。

公開鍵暗号方式の説明はこのリンクの図が分かりやすいです)
viral-community.com



***************************


今回はこの公開鍵方式を利用して、ssh接続をパスワード入力なしで行ったときのつまずいた箇所を書き留めておきます。
(公開鍵の作成方法はネットを見れば沢山情報があるかと思うので割愛します)




・気を付けたいこと(超初心者向け)



■ 接続するユーザーで鍵を作り、接続されるユーザーに鍵を登録する

 私が見たネットの説明だと「root権限で鍵を作る」と書いてありました。
 何も考えず鵜呑みにしてrootで作ったら失敗しました。

 接続される側の/root/.ssh/authorized_keysを確認すると分かりますが
 
 ssh-rsa xxxABC9876564321・・・・ root@sampleserver
 ssh-rsa xxxZYX1234567890・・・・ ninomiya@sampleserver
 
 といったように、ユーザーごとに公開鍵の情報が登録されているためです。
 
 公開鍵を作ったのにまだパスワードを聞かれるぞ・・・となったら、
 ログインしようとしているユーザーの「/home/ユーザー/.ssh以下を確認し、id_rsa.pub(公開鍵)
 が存在しているか確認してください。



■ 別のツールから実行する場合、PasswordAuthenticationがyesになっていることを確認する

SSH pluginを利用してjenkinsからリモートサーバーのコマンドを実行するように設定した。
そしたら以下のエラーが発生


[SSH] Exception:Auth fail
com.jcraft.jsch.JSchException: Auth fail
at com.jcraft.jsch.Session.connect(Session.java:452)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.jvnet.hudson.plugins.SSHSite.createSession(SSHSite.java:141)
at org.jvnet.hudson.plugins.SSHSite.executeCommand(SSHSite.java:151)
at org.jvnet.hudson.plugins.SSHBuilder.perform(SSHBuilder.java:60)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
at hudson.model.Build$BuildExecution.build(Build.java:205)
at hudson.model.Build$BuildExecution.doRun(Build.java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
at hudson.model.Run.execute(Run.java:1738)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:410)
Build step 'Execute shell script on remote host using ssh' marked build as failure


認証に失敗。。。
/etc/ssh/sshd_config の PasswordAuthentication がnoになってました。

参考:PowerVM クラウド・プロバイダーからのエクスポートの状況が「Auth fail」になる
http://www.ibm.com/support/knowledgecenter/ja/SSGRP3_2.1.0/doc/ICON/topics/tsicn_authfail.html


「PasswordAuthentication」は冒頭に書いたパスワード認証のことなので、これはyesにしておいたほうが良いと思います。




・・と、色々と躓きましたが公開鍵を使うとパスワードなしでssh接続ができて、セキュリティ的にも、操作的にもメリットが沢山あります。


これでパスなし接続が出来るようになりました!ばんざい。

linuxにoracleを入れてsqlplusを起動・実行する(ORA-12154 トラブルシューティング編)

oracle linux

昨日の続きです。
linuxにoracleを入れてsqlplusを起動する - 文系seの備忘録

昨日はsqlplusを入れて起動させるところまでやりました。
こんどはログインして実際にsqlを発行しデータのやりとりを行うところです。

私はこの設定であれこれ苦戦しましたので記録を残しておきます。
具体的に言うと、これから記載する内容に抜けがわんさかあったせいで、実行するたびに何度も

ORA-12154: TNS: サービス名を解決できませんでした。
ORA-12154: TNS: 指定された接続識別子を解決できませんでした
ORA-12154: TNS:could not resolve service name
ORA-12154: TNS:could not resolve the connect identifier specified

このメッセージを見るはめになりました・・・orz




1.環境変数の設定
ホームディレクトリの .bashrc / .bash_profile に設定しておく
前回記事でも書いたように、「export」では端末をオフして再度ログインしたときには
その情報は消えてしまいます。
su でrootユーザーに切り替えて、/home/ユーザー/.bash_profileに環境変数を設定しておきます。

パスの設定などで使うもの
ORACLE_BASE
  ベースとなるディレクトリ。例:/opt/app/oracle
  必須ではないが設定しておくと他の環境変数の記述やバージョン管理が容易になったりする。
ORACLE_HOME
  (必須)Oracleがインストールされているディレクト
ORACLE_SID
  (必須)接続する識別子
PATH
  (必須)ORACLE_HOME/bin を追加しておく。




2.tnsnames.ora の設定
クライアント側に必要なファイル。
$ORACLE_HOME/network/admin ディレクトリにあるものが参照されるので、そこに作成する。

tnsnames.oraを検索すると

# find / -name tnsnames.ora

/opt/app/oracle/product/11.2.0/dbhome_1/network/admin/samples/tnsnames.ora


samplesの中にサンプルのファイルがあったけど、サンプル見てもよく分かんなかったので以下のページを参考に作成しました。
tnsnames.ora - オラクル・Oracleをマスターするための基本と仕組み


ここで注意。
・ tnsnames.oraに無駄な半角、全角スペースがないことを確認する
 慣れないlinuxのviでの編集で、知らないうちに先頭にスペースが入ってしまってこれが原因で動作しないというケースがありました。
その他、サービス名などをスペルミスしたり等の記述ミスに注意してください・・・。




3.sqlnet.ora の設定

クライアントとサーバ両方に必要なファイル。
これも$ORACLE_HOME/network/admin ディレクトリ 以下に作っておきます。

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)






これで自分の場合はsqlplusにてsql実行することが出来ました。

もし、これでもtnsエラーが出る場合について、メモしておきます。




トラブルシューティング

・古いバージョンのoracleがインストールされてて、そっちのtnsnames.oraが参照されてしまっている
ORACLE_HOMEに古いオラクルのパスが記述されていたら、それを一旦コメントアウトしてみるか、順番を変えて実行してみる

・TNS_ADMIN環境変数が間違って登録されている
TNS_ADMIN は本来設定されてないと思いますが、おかしなディレクトリに設定されてしまったりしてないか念のため確認しておく。
.bash_profileに参照すべきtnsnames.oraの場所が指定されていればOK

・他環境のtnsnames.oraの記述をコピってきて、一部だけ変更した際に情報が誤っていた
私はこれをやらかしました。凡ミスです。
コピー元が「12.1.0」で、自分の環境は「11.2.0」なのに気付かず実行してました。




このエラーが出たとき、何が原因なのか、何が足りてないのか?
何を設定すればよいのか?
全てが分からず混乱でした。。

ネットで調べても、「tnsnames.oraについて」といった個別にピックアップされた情報は出てくるんだけど、
必要なもの一覧的なものは見つからなかったのでしらみつぶし的な進め方になってしまった。


意外と苦戦しちゃったなぁ。。。

linuxにoracleを入れてsqlplusを起動する

linux oracle

1.sqlplusのダウンロード

Instant Client downloads for Linux x86-64
oracleのアカウント登録が必要。

rpmというコマンドでインストールする。
# rpm -ivh oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
zipファイルみたいに圧縮されててサーバーから展開することも可能なコマンドです。

ダウンロードする場所は/opt/app/oracleあたりでいいかと思います。

んで、これをやったら
「エラー: 依存性の欠如:」
と言われました。あーめんどくさ!
なんか足りないものがあるようですが解凍したいだけなので一時的に解決させときます。
# rpm -ivh --nodeps oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
「--nodeps」が依存性を無視して実行するオプションです。

Preparing... ################################# [100%]
Updating / installing...
1:oracle-instantclient12.1-sqlplus-################################# [100%]

こんなんが出てきてsqlplusとライブラリがインストールされます。






2.パスを通す

マシンの起動時にパスを読み込むようにするため、各ユーザーの設定ファイルに書いておきます。
export~でパスを通すと端末を再ログインした際にはその情報はクリアされてしまうので注意。

・home/ユーザ名/.bash_profile
の「# User specific environment and startup programs」の下あたりに以下を追加。


 ・export ORACLE_SID=接続するDBのサービス名
 ・export ORACLE_HOME=/opt/app/oracle/product/xx.x.x/dbhome_x(インストールしたverによって異なる)
 ・PATH=$PATH:$ORACLE_HOME/bin

この3つを追加して動いたので、とりあえずはこれで大丈夫なんじゃないかと思います。


上記を設定し終えたら起動してみます。


# sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 29 17:17:43 2016

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Enter user-name:


でも、これだけではログインしようとしても「 ORA-12154: TNS:could not resolve the connect identifier specified」と言われてしまいます。
その対策は後半戦で。