Unix & Linux

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

3
Pipelineの前半でコマンドのPIDを取得する
inotifywaitディレクトリを監視し、変更が検出されたときにアクションを開始するために使用するbashスクリプトを書いています。何かのようなもの: inotifywait -m ... | while read f; do something; done inotifywaitはそれ自体で終了しないため、このスクリプトは停止しません。 したがって、私の計画は、inotifywaitプロセスのPIDを取得し、それをファイルに保存して、後で別のプロセスに強制終了させることでした。 inotifywait -m ... | { echo ??PID?? > pid-file; while ... } しかし、私はPIDを取得する方法がわかりません。これを達成する簡単な方法はありますか?もう1つの方法は、シェルスクリプトのPIDを$$ファイルに保存してシェルスクリプト全体を強制終了することですが、whileループの後にいくつかのクリーンアップを実行したいと思いました。 私は使ってみましcoprocたが、うまくいくと思いますが、必要以上に複雑に思えます。
11 bash  pipe  pid 

3
実行可能ファイルをサポートするためにロードする必要があるパッケージまたはライブラリを決定する方法はありますか?
パッケージとしてビルドされていない、再コンパイルできないコンピューターにインストールしたい実行可能ファイルがあり、実行に必要なライブラリーをダウンロードしたい。 以下は、実行中の出力の一部であり、lddそれに libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000) libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000) libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000) libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000) /lib/ld-linux.so.2 (0xb786e000) libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000) libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000) ディスクの使用量を最小限に抑えるために、この情報を使用してダウンロードするパッケージを選択したり、一覧表示されたライブラリとその依存関係のみを抽出したりできるツールはありますか?システムはヘッドレスVMで実行されており、プログラムはVNCを介して表示されます。 本格的なグラフィックデスクトップで必要なライブラリのほとんどが提供されると思いますが、必要なライブラリとその依存関係、およびそれをサポートするのに十分なX Windowsパッケージだけをダウンロードしたいと思います。

1
キーシーケンスをEscape、zshにバインドする
zshでどのようにマップjjしEscますか? vimでセットアップしたキーマッピングを再作成しようとしています。そこでは、を2回押すとan がvimに送信jjされるESCので、便利に通常モードに入ることができます。j<Esc> 私はすでに試しましたbindkey 'jj' ^[、今すぐ試しますが、うまくいくとは思えませんbindkey 'jj' ^[[。また、通常モードでzshが提供するコマンドのリストを確認しましたが、normalまたはが含まれるものは何も見つかりませんでしたescape。 注ファイル内 の^[文字は、~/.zshrc実際にハードコードされたエスケープです。文字^とだけではありません[。


3
grepを使用して、パターンを照合し、別のパターンを反転照合するにはどうすればよいですか?
を使用してgrep、パターンに一致し、別のパターンに一致しないすべての行を選択します。私は、単一の呼び出しを使用することができるようにしたいgrep、私が使用できるように、--after-contextオプション(または--before-context、あるいは--context)を。 -vオプションをgrep使用して渡すすべてのパターンが無効になるため、ここでは実行できません-e。 例 一致needleする行を無視してignore me、次のコンテキストの1行で一致する行を探します。 これが私の入力ファイルです: one needle ignore me two three four needle five 私が欲しい出力は: four needle five ご覧のとおり、この単純な解決策は機能しません。 $ cat file | grep --after-context=1 needle | grep -v 'ignore me' two --- four needle five
11 grep 

3
次に特定の時間になるまで眠る
「4:00」のような特定の時間が次に発生するまでスリープする一連のコマンドまたは単一のコマンドが必要です。 どうすればいいですか? at私は現在てるスクリプトを残してはいけないため、コマンドまたはcronジョブはオプションではありません。 私が話している特定のケースは、画面で実行されているスクリプトです。スクリプトのある時点で必要な多くの重要な変数が格納されているため、スクリプト自体によるスクリプトの実行を停止しないことが非常に重要です。スクリプトは、常に通常の方法で実行されるとは限りません。特定の時間に実行する必要があるだけです。 スクリプトがファイルや、cronjobsやその他の画面などのその他のタスクを作成する必要がある場合、それは非常に有益です。これは単にデザインの問題です。 私はちょうどいい考えを持っていました: difference=$(($(date -d "4:00" +%s) - $(date +%s))) if [ $difference -lt 0 ] then sleep $((86400 + difference)) else sleep $difference fi もっと良いアイデアはありますか? 必要に応じて、さらに情報が追加されます!
11 bash  date  time  sleep 

3
環境変数に基づく条件付き割り当て
bashスクリプトでは、値が外部のグローバル環境変数($MYAPP_ENV)に依存するように、ローカル変数を割り当てています。 if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi 上記の割り当てを書くためのより短い(まだクリーンな)方法はありますか?(おそらく何らかの条件演算子/インラインを使用している場合)

6
DU:深さでのみフォルダーを表示
du -h次のような出力が得られます。 103M ./.wine/drive_c/windows/mono/mono-2.0/lib/mono 103M ./.wine/drive_c/windows/mono/mono-2.0/lib 129M ./.wine/drive_c/windows/mono/mono-2.0 129M ./.wine/drive_c/windows/mono 362M ./.wine/drive_c/windows 545M ./.wine/drive_c 最も実用的なフォルダ、つまりフォルダのみを表示したい ./.wine/drive_c/windows/mono/mono-2.0/lib/mono 子フォルダーがほとんどのディスク領域の使用に責任がある場合、親フォルダーを削除する方法はありますか? リーフフォルダーのみを表示する設定、または親フォルダーのサイズを計算するときに親フォルダーからすべてのサブフォルダーのサイズを差し引く設定でうまくいく場合があります。
11 disk-usage 

3
ファイルを置き換えるときにファイルのアクセス許可を維持(または復元)する
ファイルを引数として受け入れ、ファイルを変更してから、2番目の引数で指定されたファイル名に書き込むコマンドがあります。私はそのプログラムを呼びますmodifyfile。 「そのまま」動作するようにしたいので、一時ファイルに変更してから元に戻すシェルスクリプト(bash)を作成しました。 TMP=`mktemp` modifyfile "$original" "$TMP" mv -v "$TMP" "$original" これには、このファイルの権限を破壊するという不幸な副作用があります。ファイルはデフォルトの権限で再作成されます。 mv権限を変更せずに宛先を上書きするようにコマンドに指示する方法はありますか?または、元のユーザー、グループ、および権限を保存して復元する方法はありますか?

2
sedの正規表現文字をエスケープして、正規表現文字として解釈する必要があるのはなぜですか?
例えばそうです cat sed_data.txt | sed 's/\b[0-9]\{3\}\b/NUMBER/g' 、私がすることをしなければならない正規表現を形成するために、文字をエスケープします。この場合、何度も解釈されるために中括弧をエスケープする必要がありました。 どうして?エスケープされない限り、すべてが正規表現文字になると期待していました。すなわち反対です。


1
Oracle Java 7をsetcap cap_net_bind_service + epと連携させる方法
Linuxで1024未満のポートを開く権利をJava実行可能ファイルに付与しようとしています。これが設定です /home/test/java Oracle Server JRE 7.0.25が含まれています CentOS 6.4 getcapが返すものは次のとおりです [test@centos6 java]$ pwd /home/test/java [test@centos6 java]$ getcap bin/java bin/java = cap_net_bind_service+ep [test@centos6 java]$ getcap jre/bin/java jre/bin/java = cap_net_bind_service+ep javaを実行しようとすると、次のエラーが発生します。 [test@centos6 java]$ bin/java bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory [test@centos6 java]$ …

2
XFCEでウィンドウのサイズ変更/移動にAltの代わりにSuper-Lを使用する方法
XFCEではAlt、左ボタンを押したままウィンドウ内の任意の場所をクリックすると、そのウィンドウが移動し(タイトルバーをドラッグするように)、右ボタンでクリックしてドラッグしたときにウィンドウのサイズが変更されます。 私はこの機能がとても好きで、永遠に慣れてきました。しかし、私はそれを常にバインドしてきましたSuper-L(左側の「Windows」キー)。 Altfor の動作を変更するにはどうすればよいSuper-Lですか?XFCE設定マネージャーを見ていましたが、どこにも見つかりませんでした。

3
特定のサブディレクトリを除くすべてのファイルを、findで削除します。
aサブフォルダー内のすべてのファイルを除いて、フォルダー内でしばらくアクセスされなかったすべてのファイルを再帰的に削除したいb。 find a \( -name b -prune \) -o -type f -delete ただし、エラーメッセージが表示されます。 find:-deleteアクションは-depthを自動的にオンにしますが、-depthが有効な場合、-pruneは何もしません。とにかく続行したい場合は、明示的に-depthオプションを使用してください。 追加する-depthと、すべてのファイルbが含まれますが、これは発生してはなりません。 誰もがこれを機能させる安全な方法を知っていますか?
11 find  directory  rm 

5
内部に特定のファイル名を持つファイルがないすべてのディレクトリを一覧表示します
内部に特定のファイル名を持つファイルがないすべてのディレクトリを一覧表示するにはどうすればよいですか?たとえばこの木を与えられた / /a README file001 file002 /b README file001 /c file003 という名前のファイルがないディレクトリを一覧表示したいのですがREADME、この場合はディレクトリになり/cます。どうすればいいですか?例えば、を使用した構文は考えられませんfind。
11 files  directory 

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