Unix & Linux

Linux、FreeBSDおよび他のUn * xのようなオペレーティングシステムのユーザーのためのQ&A

2
awkを使用した3つのファイルの処理
以下のファイルを検討してください。 file1: boo,8,1024 foo,7,2048 file2: foo,0,24,154 noo,0,10,561 file3: 24,154,7,1024,0 私が必要なのは、File1に移動して、次のことを確認することです$2==7。trueの場合、取る$1、$2と$3からファイル1。ここで$1、File1とFile2が等しいかどうかを比較する必要$1があります。trueの場合、私が取らなければならない$3と$4のFile2の中に存在していないこれはFile1、その後、私が行かなければならないFILE3とかどうかを確認$1からFILE3することに等しい$3からFile2の、そして$2からFILE3に等しい$4からFile2の。はいの場合$2、File1からかどうかを確認する必要があります等しい$3からFILE3、この条件が真であるならば、私は比較する必要が$3からはFile1と$4からFILE3場合は、$3からファイル1以上である$4から、FILE3。 次のスクリプトを試しました。 cat [file1] [file2] [file3] | awk -F, '{if(NF==3) {if($2==7){a[$1]=$1; b[$1]=$2; c[$1]=$3} }else {if(NF==4){if(a[$1]==$1){d[$3]=$3; e[$4]=$4} }else {if(NF==5){if(d[$1]==$1 && e[$2]==$2){print a[$1], b[$1], c[$1], d[$1]}} } } }' 望ましい出力は次のとおりです。 foo,7,2048,24,154,1024

3
Tomcat 7がRHEL7のcatalina.outにログ出力を生成しない
Apache Tomcat 7.0がインストールされたRHEL7サーバーがあり、RHEL7.1への最近の更新後、$ {catalina.base} /logs/catalina.outへのすべてのロギングが停止されました。ただし、journalctl内のログを受信して​​います。 「journalctl -u tomcat」と入力すると、ログが取得されます。catalina.outにもログを取得する方法はありますか? cat /usr/share/tomcat/logs/catalina.out no output journalctl -u tomcat Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) Aug 20 10:07:14 server.example.com server[26435]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) …

3
debianでパッケージのソースリポジトリを知る方法は?
Debianでは、一部のパッケージはSubversion(有名なteam-pkg-gnome)で保守されているAFAIKもあれば、gitで保守されているパッケージや、他のVCSで保守されているパッケージもあります。 パッケージのソースがどこにあるのかを知る方法はありapt-get source $PACKAGENAMEますか? 私は3つの方法を試しましたが、すべて失敗しました:- $apt show $PACKAGENAME $aptitude show $PACKAGENAME $apt-cache show $PACKAGENAME 上記のいずれもこの情報を提供/共有することはできません。 とにかく情報を入手する方法はありますか?ソースリポジトリを知る必要があります。名前と、それがgit、svn、またはその他のバージョン管理にあるかどうか。

13
Centos 7:ネットワークの起動/停止に失敗しました:トランクインターフェイスのインターフェイスを構成してください
サーバー(Centos 7)で構成されたスイッチは、VLAN#115,2014のトランクとして構成されています。ロードしました # lsmod | grep 8021q # modprobe 8021q VLAN#115を使用してサーバーにIPアドレスを構成したい次の構成を実行します。 ifcfg-em1 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=em1 UUID=c0c4d851-d762-4301-8c20-d6128aee5261 DEVICE=em1 ONBOOT=yes ifcfg-em1.115 TYPE=Ethernet BOOTPROTO=none IPADDR=172.31.141.242 PREFIX=24 GATEWAY=172.31.141.1 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=em1.115 UUID=c0c4d851-d762-4301-8c20-d6128aee5261 DEVICE=em1.115 VLAN=yes ONBOOT=yes ネットワークサービスを再起動できなくなりました。表示されるエラーメッセージは次のとおりです。 …

1
2つの並列テキストファイルをシャッフルする
約50 milの単語を含む2つの文に揃えられた平行コーパス(テキストファイル)があります。(Europarlコーパスから->法的文書の並行翻訳)。2つのファイルの行をシャッフルしたいのですが、どちらも同じ方法です。私は、gshuf(私はMacを使用しています)を使用して、1つの一意のランダムソースを使用してそれにアプローチしたいと思いました。 gshuf --random-source /path/to/some/random/data file1 gshuf --random-source /path/to/some/random/data file2 しかしend of file、ランダムシードには、ソートするファイルに含まれるすべての単語を含める必要があるため、エラーメッセージが表示されました。本当?はいの場合、自分のニーズに合ったランダムシードをどのように作成すればよいですか?いいえの場合、他にどのようにファイルを並行してランダム化できますか?それらを一緒に貼り付け、ランダム化してから再び分割することを考えました。ただし、ファイルで発生しない区切り文字を最初に見つける必要があるため、これは醜いようです。

5
デッドキーの組み合わせが認識されない場合は、両方の文字を挿入します(例: 'a→á、' b→ 'b)。
Linux Mintマシンで英語、米国外(デッドキー、altGrデッドキーなど)のバリエーションを使用すると、常にこの動作に遭遇します。 これらのキーの1つを押す' "と、次のようになります。その後に、「アクセントなし」の文字が続く[か、b出力がまったく出力されません。 Windowsの米国-インターナショナルのに対して、それは、印刷し[たりb。これを入力したい場合は、「アクセント記号のない」文字ではなくスペースを使用して各デッドキーをエスケープする必要があります。これはプログラミングには厄介です(本当ではありませんが、typing.ioについてWindowsの「Qwerty International」でトレーニングし、システム間を切り替えるのは面倒です)。 Windowsのように機能するように変更する方法はありますか?

3
再帰的に走査せずにZFS上の大きなディレクトリを一括削除する
大量のデータが含まれているディレクトリを削除したい。これは私のバックアップアレイです。これは、ZFSファイルシステム、線形スパン、「san」と呼ばれる単一のプールです。Sanがマウントされている/san ので、/ san / thispc / certainFolderを一括削除したい $ du -h -d 1 certainFolder/ 1.2T certainFolder/ 私が待つ必要rm -rf certainFolder/があるのではなく、そのディレクトリへのハンドルを破棄して、上書き可能にすることができます(再作成することを選択した場合でも、同じディレクトリ名でも)?? たとえば、zfs fs内部mgmntがディレクトリを具体的にどのようにマップするかを詳しく知らない場合などですが、たとえば、そのマップがたとえばを見つけ、適切なエントリを削除すると、たとえば、ディレクトリが表示されなくなり、ディレクトリが以前保持していたスペースがある種の監査からも削除する必要があります。 ext3 fsを使用している場合でも、これを行う簡単な方法はありますか?それとも、再帰的な削除コマンドが最初に行う必要があること、つまり、ジャーナルを調べて編集することですか? 私はちょうどkill thisDirそれがいくつかの種類のIDを削除し、ディレクトリが表示されなくなりls -la、データがドライブにまだ残っているのに、スペースが再利用されるようにしたいと思っています上書きされます)、ZFSはそれだけでクールなので? つまり、zfsは本当にかっこいいと思います。どうすればよいでしょうか。理想的には?手をこすり合わせる:-) 私の特定のユースケース(zfsへの私の愛情以外)は、バックアップアーカイブの管理です。このバックアップディレクトリは、Windowsボックスのfreefilesync(AWESOME PROG)を介してsmbファイル共有にプッシュされますが、古いファイルが移動するバージョンディレクトリもあります。メインバックアップにあるトップレベルのディレクトリを削除します。これは、バージョンにコピーされます。たとえば/san/version/someStuff、rm -rf /san/version/someStuff/*パテターミナルから隔月でクリーンアップする場合、別のターミナルを開く必要があります。毎回そうしたくないので、無駄にrm -rfを監視する必要があります。 つまり、おそらくハンドルを解放するようにコマンドを設定してから、標準出力に出力する必要があります。 より現実的には、zfs destroy san/version; zfs create -p -o compression=on san/version@ Gillesからの応答から数秒でデータセットを再作成します。

5
現在のシェルインタープリター名を*確実に*かつ*簡単に*取得するにはどうすればよいですか?
(コマンドラインからではなく)スクリプトまたはソースファイル内から現在のシェルの名前を取得する簡単で信頼性の高い方法を探しています。私はちょうどそうすることを期待していました$(basename "$SHELL")が、ログインシェルがzshあり、some_script.shに次のコードがある場合 this_shell=$( basename "$SHELL" ) echo "The Shell is $this_shell" echo "The Shell is $0" そして私はそれを実行しbash some_script.sh、それはまだ示していますzsh代わりにbash使用インタプリタがあるにもかかわらず/bin/bash。シェルの設計者が現在のシェルではなくデフォルトのシェルを表示するように選択した理由はわかりませんが、それが私たちが行き詰まっているようです。 他にも少し似た質問がありますが(こことここ)、その答えは多くの点で不十分です。 多くの場合、ユーザーが現在使用している対話型シェルを把握しようとしていると想定しますが、それはおかしいです。シェルかを決定することができるようにどこでも実行することができ、私の必要性のコード-私はにコマンドを入力してるシェル知っている、それが使用されます。 彼らはしばしばいくつかの異なることを試みます-再びあなたがコマンドラインにいて、あなたがbashを使用していることを学ぶまでただいじくり回すことができるかのように-しかし、私はすべてのコンテキストで信頼できる単一のものが必要です。 彼らはしばしばのようなスクリプトから全く役に立たないものを与えecho $0ます。上記のスクリプトに示すように、これは失敗します。(はい、それはインタラクティブなシェルコマンドラインで機能しますが、なぜあなたが使用しているシェルを知らないのですか?) 彼らは時々(私の限られたテストでは)のような正しい情報を含むコマンドを提供しますがps -p $$、クロスプラットフォームでクロスシェル互換のsed / awkコマンドが不足しているため、パイプを介してシェル名のみを取得し、付随する他の情報を無視します乗る。 彼らは次のように、シェルのみのカップルで動作するものが含まれる$BASH_VERSIONと$ZSH_VERSION。私はそのような可能な限り多くのシェルとしてサポートしたいですfish、csh、tcsh。 私はどのように行う、確実かつ正確に検出任意の 現在のシェルを?私は、プラットフォーム間で、スクリプト内で、そして可能な限り多くのシェルで機能する何かを探しています1。 更新:私がこの質問を投稿したとき、私はこの情報を提供するためにシェルに組み込まれたいくつかの機能があると予想しましたが、そうではないようです。現在、シェルの外の何かに依存することは避けられないように思われるので、クロスプラットフォームソリューションを求めていることをより明確にする必要があります(上記の他の回答への私の反対には暗示されていますが、そうしないと簡単に見落とされる可能性があります)質問を注意深く読んではいけません)。 Update 2Stéphaneの回答がLinuxのみではないために、これがLinuxのみの質問の重複であるとまだだれもが信じている場合、私が求めているものと彼が提供したものとの違いは次のとおりです。(彼が書いたものは独創的であり、私はそれをノックしていませんが、それは私の問題を解決しないことに注意してください。) 私は何かを探していますシンプルかつ信頼性の高い、その (によって供給されることを任意のスクリプトや関数定義に追加することができ.zshrcたり.bash_profile、分岐または何でも)。 彼のスクリプトは、デフォルトのインタプリタによって常に解釈されて返されるため、インタプリタ名を呼び出し側のスクリプト/関数に渡す外部ユーティリティとして使用することはできません。これは私の目的に使用することを困難または不可能にします。可能であれば、それは非常に非常に困難であり、それを機能させるための解決策は答えに記載されていません。したがって、彼は私の質問に答えなかったため、それは重複ではありません。 あなたが何かを見たい場合になる仕事を、見とるGitHubの上ShellDetectiveを。これにより、SEに既に存在するものと、この質問が探しているものとの違いを簡単に確認できる場合があります(実際、この質問のニーズを満たすために作成されたもので、他では満たされていないものです)。 (PSあなたはにソース取得機能を想像し、このためのユースケースがあります信じることができない場合.zshrc、.bash_profileまたは.profile使用されているものを、サーバーに依存し、どのようなシェルそれが利用可能です。彼らはシェバング行を持っていないので、彼らが調達している。彼らは、どのシェルでも動作する場合に最も便利ですが、動作方法を知るために、どのシェルにいるかを知る必要がある場合もあります。) 1伝統的な意味でのシェルではない「シェル」には関心がありません。誰かが自分で書いたシェルについては気にしていません。私だけに関係してる本当のシェル実際に野生で発生し、そしてその誰か多分彼らはちょうど彼らが好きなシェルいくつかのサーバにログインをインストールすることはできませんれているときに使用する必要がある場合があります。
9 bash  shell  zsh 

3
wgetはhttpsをサポートしていません
コマンドhttps://example.comを使用してダウンロードしたいのですwgetが、「サポートされていない/認識されないプロトコル」と表示されています。私は使用しようとしました--secure protocol=''が、それはうまくいきません。GNU wgetからtarファイルをダウンロードして構成しようとしましたが、失敗しました。 ここに私が見るものの例があります: bash-2.05$ wget https://www.facebook.com/ https://www.facebook.com/: Unknown/unsupported protocol. bash-2.05$ こんにちは人々は答えをありがとう、それが以下のように言う私のwgetのバージョンを確認しました bash-2.05$ wget -V GNU Wget 1.6 Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty …
9 wget  https 

2
仮想USB HIDデバイス
接続されているUSB HIDデバイスと通信するアプリケーションを開発しています。問題は、実際のデバイスがまだないことです(私たちのチームの別の部分によって開発中です)、それで、私は本当にそれをエミュレートするいくつかの方法が欲しいです。 私が考えることができる理想的なユーティリティは、次のようになります。ロードされると、システムに2つのデバイスノードを作成するカーネルモジュール: おそらく実際のUSB隠しデバイスノードと区別がつかない仮想USB隠しデバイス/dev/hidraw0。そしてもちろん、このデバイスは、私が使用するusb-hidライブラリ(たとえば)から認識されhidapiます。 サービスデバイスノード、のような/dev/virtual_hid_1。 したがって、誰かがに書き込む場合/dev/virtual_hid_1、このデータは文字通りから読み取られる必要が/dev/hidraw0あり、その逆も同様です。 このようにして、デバッグアプリを好きな言語で書くことができpythonます。読み書きするだけ/dev/virtual_hid_1です。開発にとても便利です。 このようなものはありますか?

2
ウィンドウタイトルの変更について通知を受ける
...ポーリングなし。 現在フォーカスされているウィンドウがいつ変更されたかを検出して、システムのカスタムGUIを更新できるようにしたいと考えています。 興味のあるポイント: リアルタイムの通知。ラグが0.2秒の場合は問題ありません。ラグが1秒の場合は問題あり、ラグが5秒の場合はまったく受け入れられません。 リソースの使いやすさ:このため、ポーリングは避けたいです。xdotool getactivewindow getwindownameたとえば、0.5秒ごとに実行することは非常に問題なく動作しますが、2つのプロセスを1秒間起動することは私のシステムにとってそれほど友好的ですか? ではbspwm、bspc subscribeウィンドウのフォーカスが変わるたびに、いくつかの(非常に)基本的な統計を含む行を表示するwhich を使用できます。このアプローチは最初は良いように見えますが、これを聞いてもウィンドウタイトルが自動的に変更されることは検出されません(たとえば、Webブラウザーでタブを変更すると、この方法に気付かれなくなります)。 では、Linuxで0.5秒ごとに新しいプロセスを生成することは問題ありません。そうでない場合、どうすればより適切に処理できますか? 私の頭に浮かぶのは、ウィンドウマネージャーの動作をエミュレートすることです。しかし、「ウィンドウの作成」、「タイトルの変更要求」などのイベントのフックを、作業中のウィンドウマネージャーから独立して作成できますか、それともウィンドウマネージャー自体になる必要がありますか?これにはrootが必要ですか? (私の頭に浮かんだもう1つのことは、xdotoolのコードを見て、興味のあるものだけをエミュレートして、ボイラープレートを生成するすべてのプロセスを回避できるようにすることですが、それでもポーリングされます。)


5
CentOSの再起動後、LVMボリュームが非アクティブになる
LinuxサーバーをCentOS 6から7に再インストールしました。サーバーには3 /homeつのドライブがあります/home。システムSSDドライブ(それ以外をすべてホストします)と2つの4TB HDDドライブをホストします。すべてLVMを使用しています。2つの4TBドライブは(LVM自体のraidオプションを使用して)ミラーリングされ、/ homeパーティションで完全に満たされます。 問題は、4TBのディスクは問題なく認識され、LVMは問題なくボリュームを認識しますが、ボリュームを自動的にアクティブ化しないことです。それ以外はすべて自動的にアクティブになります。手動でアクティブ化できます。 / homeに古いシステムドライブのイメージがあります。これにはLVMボリュームも含まれています。でマウントするとkpartx、LVMがそれらを取得してアクティブ化します。しかし、これらのボリュームと非アクティブなボリュームの間に違いはありません。 ルートファイルシステムもLVMであり、これは問題なく起動します。 ただし、奇妙なことがわかります。実行するlvchange -aayと、アクティブ化するドライブを指定する必要があることがわかります。自動的には行われません。私が指定した場合lvchange -ay lv_home-それは動作します。 私はこの振る舞いの原因となるものを見つけることができません。 追加:(initを使用していvgchange -aay --sysinitた)古いシステムが起動スクリプトにあることに気づきました。新しいものはsystemdを使用しておりvgchange、そのスクリプトには呼び出しが表示されません。しかし、どこに置くべきかもわかりません。 追加2: systemdを理解し始める。私はスクリプトがどこにあるかを見つけて、それらがどのように呼び出されるかを理解し始めました。また、実行されたスクリプトをで確認できることもわかりましたsystemctl -al。これは、起動後に既知の各udevブロックデバイスをlvmetad呼び出すことを示していpvscanます。ただし、その時点で登録されているudevブロックデバイスは1つだけであり、これは認識されたlvmボリュームの1つです。ハードドライブもそこにありますが、異なるパスとはるかに長い名前の下にあります。認識されたブロックデバイスはのようなものですが8:3、ハードドライブはのようなもの/device/something/です。私はもうサーバーにいないので、正確に書くことはできません(これは後で修正します)。 私はそれがudevとデバイスの検出/マッピングに関係していると思います。私は夕方まで続き、その時にudevを勉強します。 他のすべてが失敗した場合、私は呼び出すスクリプトを見つけ、pvscan常にすべてのデバイスをスキャンするように変更できることを確認しました。これで問題は解決しましたが、見苦しいハックのように見えるので、本当の根本原因を解明しようと思います。 追加3:わかりました。これがなぜ発生するのかはまだわかりませんが、少なくともかなり問題のない回避策を講じています。をpvscan起動しlvmetadた直後に、もう一度を呼び出すsystemdサービスを作成しました。特定のデバイスに対するもう1つの呼び出しはまだあり、実際にudevそれを呼び出すのはそれだと私は思います(それが私がそれへの参照を見つけた唯一の場所です)。なぜそれが他のハードドライブのためにそれを呼び出さないのですか-私にはわかりません。
9 centos  rhel  lvm 

7
マイナス記号を維持しながら特定の列の数値を削除しますか?
次のデータフレームが水平方向と垂直方向に無期限に続き、奇数列にのみ負の数が表示されます。 -1 2 3 4 -5 9 2 3 -4 5 -6 11 そして、2番目、4番目、6番目の完全な列(またはすべての偶数列)と、1番目、3番目、および5番目(またはすべての奇数列)からのみマイナス記号が必要なので、これを取得します。 - 2 4 - 9 3 - 5 - 11 そして最終的にこれで終わります: -2 4 -9 3 -5 -11 したがって、変更されていない偶数列と奇数列の値が必要です。負の値がある場合は-を保持し、正の値がある場合は破棄します。 これをawk / sedで行う方法はありますか? これは私が得る限り遠いです: awk '{ for (i=2;i<=NF;i+=2) $i="" }1' FILE.txt | sed 's/[0-9,.]*//g'

2
Gnome3(Fedora 22)でデフォルトのファイルマネージャーを変更する
私はFedora 22に切り替えて、今回はXFCEの代わりにGnome3に行くことにしました。Thunarファイルマネージャーが気に入ったので、ダウンロードしました。デフォルトのファイルマネージャーとして設定するのに苦労しました。 私が試したこと: 走りましたexo-preferred-applications。の下でUtilities -> File Managerを選択しましたThunar。 問題: デフォルトのファイルマネージャとして機能していません。Downloadsブラウザからフォルダを開いても、が表示されますNautilus。私のをクリックしたときも同じ"Places"です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.