Unix & Linux

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

1
子プロセスのPGIDが親のPIDではないのはなぜですか?
だから私はこのコマンドが親プロセスのすべての子プロセスを終了することをどこでも読み続けます: kill -- -$$ killコマンドでネガティブIDを使用するとPGIDが参照され、私が見た例では、子プロセスのPGIDは親のPIDであるはずですが、システムではそうではありません。 私のシステムでは、子のPGIDは親スクリプトのPGIDと同じであり、bashであることがわかりました。 何が起きてる?例は間違っていましたか、または私のシステムは異なって設定されていますか? 私が達成する必要があるのは、親が終了することなく子プロセスを終了することです。そのため、親がいるPGIDにkillシグナルを送信したくありません。

3
SSHDの「一致グループ」から除外する方法は?
SSHD構成に一致グループがあります。 cat /etc/ssh/sshd_config ... Match Group FOOGROUP ForceCommand /bin/customshell ... マシンには「FOOGROUP」に属する多くのユーザーがいます。 私の質問:「FOOGROUP」に属する特定のユーザーを「Match Group」から除外するにはどうすればよいですか?
13 openssh  sshd 

1
ログアウトまたは切断時にコマンドを強制的に実行しますか?
私はSSH経由でシステムにログインしていますが、それが意図的なログアウト(シェルの終了)であるか、SSH接続が切断/終了したかどうかにかかわらず、ログアウト時にコマンドを強制的に実行できるようにしたいと思います。これを設定する方法はありますか?現時点での最善の推測は、ログインシェルを、SSHのクローズ時に送信されるシグナルを傍受するプログラム(SIGHUP?)に変更し、コマンドを実行することですが、よりクリーンなソリューションがあるかどうか疑問に思っています。
13 ssh  logout 

1
挿入または削除せずに、2行のファイルを厳密に行ごとに比較します
基本的に、16進形式のメモリダンプを含む2つのファイルがあります。現時点では、diffを使用して、ファイルが異なるかどうか、どこにあるかを確認します。ただし、これは違いの正確な場所(メモリアドレスなど)を特定しようとするときに誤解を招く可能性があります。2つのファイルを並べて表示する次の例を検討してください。 file1: file2: 0001 | 0001 ABCD | FFFF 1234 | ABCD FFFF | 1234 今、diff -u3つのライン(メモリ位置)は、2つのファイル間で変更されているものの、1つの挿入と1つの欠失を表示します。 0001 +FFFF ABCD 1234 -FFFF 各行が他のファイルの同じ行とのみ比較されるように(行番号付けの観点から)2つのファイルを比較する簡単な方法はありますか?そのため、この例では、最後の3行が変更されたこと、file1およびからの変更された行を報告する必要がありfile2ます。出力はdiffスタイルである必要はありませんが、色付けができればクールです(現時点では、簡単に調整できるようにdiff -u出力を色付けしていますsed)。


2
複数のプロセス間の通信
私はmanager()関数をx回の個別のプロセスとして実行するbashスクリプトを持っています。スクリプト内からすべてのmanager()プロセスにメッセージを転送するにはどうすればよいですか? 匿名パイプについて読んだことがありますが、メッセージを共有する方法がわかりません。名前付きパイプでそれをやろうとしましたが、プロセスごとに個別の名前付きパイプを作成する必要があるようです。 これを行う最もエレガントな方法は何ですか? これまでの私のコードは次のとおりです。 #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

1
bashで端末セッションのコマンド履歴を同期する方法は?
~/.bash_historyターミナルセッション中に最近のコマンドを検索しようとしましたが、それらはそこにありませんでした。これは、複数のターミナルセッションを開いているためだと思います。 現在のターミナルセッションのコマンド履歴をbash_historyファイルに同期(つまり、sync-pushまたはsync-write-out)できる方法はありますか(セッションを閉じてその環境を失うことなく)。 (sync一部のシステムでコマンドがファイルシステムの変更を保存する方法とは、リモートでの考え方が似ています。) 複数のセッション履歴を保持するためにbashを設定できると思いますが、現在の履歴バッファをプッシュする機能は、新しいマシンで作業していて、思い通りにbashを設定するのを誤って忘れた場合に役立ちます。

5
シェルスクリプトでルート権限を削除するにはどうすればよいですか?
OpenVPNの「--up」オプションは、通常、ルーティングなどに使用されます。したがって、OpenVPNがルート権限を削除して誰としても実行されない前に処理されます。ただし、非特権ユーザーとして実行する必要があるシェルスクリプトを呼び出しています。 それ、どうやったら出来るの?私が研究しているドロッププロセス特権、特に多項式のとtylerlの答えを、私は実装する方法を理解していません。私はCentos 6.5で作業していますが、「chmod u + s」と「setuid()」の両方として、suidがブロックされています。 OpenVPNプラグイン( "openvpn-down-root.so")があります。これにより、 "-down"オプションによって呼び出されたスクリプトをrootとして実行できます。「openvpn-up-user.so」などの同等のものがありますが、見つかりませんでした。 編集0 Nikola Koturの答えに従って、Ian Meyerのrunit-rpmをインストールしました。chpstコマンドは端末で機能しますが、アップスクリプトでは「command not found」で失敗します。動作するのは、「sudo chpst」に加えて、適切な表示と言語の設定です。端末がユニコード文字を正しく出力しないのはなぜですか?をご覧ください。そのため、upスクリプトには次の4行が必要です。 LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export GDM_LANG DISPLAY=:0; export DISPLAY sudo chpst -u user -U user /home/user/unprivileged.sh & 編集1 0xC0000022Lのコメントごとに、「sudo -u user」は「sudo chpst -u user -U user」と同様に機能することがわかりました。 LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export GDM_LANG DISPLAY=:0; export …

3
.pemファイルから.cerファイルを取得する
以下のコマンドを使用してRSA秘密鍵を生成しました。 openssl genrsa -out privkey.pem 2048 そして、以下のコマンドを使用して自己署名証明書を作成しました: openssl req -new -x509 -key privkey.pem -out cacert.pem -days 3650 今、私はcacert .pemファイルをcertificate .cerに変換しようとしています 何か案は?

2
bash / shellスクリプトの依存関係を確認する
bashスクリプトの依存関係を確認する方法/コマンドはありますか?言い換えれば、この質問に対する回答:スクリプトを実行するためにユーザーがインストールすべきライブラリはどれですか? スクリプトを読んで手動でこれを行うことができ、それが呼び出す他のライブラリ/コマンドを確認できますが、これは長いスクリプトでは明らかではありません。

2
死んだプロセスを見ることは可能ですか?
ではman ps、Linuxでプロセスが持つことができるさまざまな状態を明確に示しています。 D Uninterruptible sleep (usually IO) R Running or runnable (on run queue) S Interruptible sleep (waiting for an event to complete) T Stopped, either by a job control signal or because it is being traced. W paging (not valid since the 2.6.xx kernel) X dead (should never be …

4
bashの新しい行に配列の各要素がある配列をファイルに印刷する
配列の各要素をファイルの新しい行に入れて、配列の内容をファイルに入れようとしています。 IFS=$'\n' echo "${mtches[@]}" > sample1.txt mtchesの内容は「qwe」および「asd」です。ただし、sample1.txtファイルにqwe asdは1行が含まれています。なぜIFSの価値を考慮していないのですか?
13 bash 


3
サウンドカードのリストを理解する方法。MID、HDMI、PCHの意味
コマンドaplay -lは、「すべてのサウンドカードとデジタルオーディオデバイス」のリストを作成します。 真新しいFujitsu Esprimoデスクトップで、以下を取得します。 **** List of PLAYBACK Hardware Devices **** card 0: MID [HDA Intel MID], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: MID [HDA Intel MID], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: MID …
13 audio 

1
ld-linux.soハックで代替libcを使用します。クリーナーメソッド?
私は非常に古いglibcを備えたレガシーシステムを持っています。これは、膨大なテスト/検証作業を行わなければアップグレードできません。 そのシステム上で新しいプログラム(Java 1.7など)を数回実行する必要がありました。私は、必要なすべてのライブラリをパッケージ化し、chrootでサービスを実行するchrootソリューションを選択しました。 ただし、chrootは非常に制限されているため、LD_LIBRARY_PATHの問題を解決したいと考えています。残念なことに、私はそれlibc.so.6: cannot handle TLS dataを試みるときにエラーを受け取ります。 /lib/ld-linux.so.2chrootからも必要であることがわかりました。これは動作します: LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program ただし、ライブラリのロード元を決定するためにjava検査/proc/self/cmdlineすることにより、私のトリックを阻止します。バイナリの名前が「bin / java」でない場合は失敗します。また、起動時にjava自体が実行されるため、問題がさらに複雑になります。 この作業を行う最後の試みとして、Javaバイナリを16進エディタで開き、文字列/lib/ld-linux.so.2を/home/chroot/ld.so(にシンボリックリンクしましたld-linux.so.2)に置き換えました。 しかし、すべての新しいバイナリのパスをネストされたシステムの絶対パスに書き換えるのは非常に面倒だと誰もが同意すると思います。 カスタムld-linux.so を含むカスタムライブラリパスを使用するよりクリーンな方法を知っている人はいますか?

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