タグ付けされた質問 「bash」

BashはBourne Again SHellであり、古典的なUnix sh(シェル)の後継です。


2
スクリプトを直接呼び出すのではなく、なぜスーパーバイザーで `bash -c`を使用するのですか?
supervisordサーバーのサービスを制御するために使用し始めています。私はLinuxのプロユーザーではありませんが、Linuxをうまく使いこなすことができます。 好奇心から、supervisordのほとんどのコマンドが次のように呼び出されているように見えることに気づきました。 [program:install] command=bash -c "/src/etc/install.sh" 私はbashの人を読みました、そしてそれ-cが文字列の後に渡された変数を挿入するために使用されるべきであることを知っています。 ではbash -c、スクリプトを直接呼び出すのではなく(下の例のように)、スーパーバイザー(またはその他の場所)で使用するポイントは何ですか? [program:install] command=/src/etc/install.sh ありがとう!

3
スクリプトからdockerコンテナーにrootパスワードを設定するにはどうすればよいですか?
ホストで実行され、Dockerコンテナーを作成/開始/停止するスクリプトがあります。コンテナ内のrootユーザーのパスワードを変更するスクリプトが欲しいのですが。 コンテナーはsshサーバーなので、私は試してみました: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root' しかし、それは機能しません。先に進み、デバッグに時間をかける前に、よりスマートな方法があるかどうかを知りたいと思います。 適切な「ドッカーの方法」は、Dockerfileによって実行されるスクリプトを作成することであることを理解しています。このスクリプトは、共有ボリュームからパスワードをプルし、それをルートパスワードとして設定します。これは複雑に聞こえますが、私はそれを行う方法を知っており、私が使用する別のDockerイメージでうまく機能します。しかし、私はこれのためにそれをしたくありません。 Dockerまたはsshを使用して非対話的にユーザーのパスワードを変更するコマンドが必要です。
11 ssh  bash  docker  passwd 

3
stderrとstdoutを(ファイルだけでなく)異なるコマンドにパイプする
LDAPのバックアップスクリプトを作成しています。エラーが/ var / log内のファイルに移動し、出力がバックアップフォルダー内の別のファイルに移動するようにします。現在、一時ファイルにリダイレクトしてから、一時ファイルをログに送信しています。私はむしろこれを1ライナーとしてやりたい... /usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err | gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz || logger -t ldapbackup -p local6.err error exit $? cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" | grep -v "filter: (objectclass=\*)" | grep -v "requesting: All userApplication attributes" >$ERR_LOG …
11 linux  bash 

1
bashからのものを除くすべてのpythonプロセスを強制終了する方法
1つのpythonスクリプトを除くすべてのpythonプロセスをbashから強制終了するにはどうすればよいですか。(名前は知っていますが、pidは変更されることがあります)。 私は一種の必要がありますpkill -f "python"が、Python固有のスクリプトを除外しています。 お知らせ下さい。
11 bash 

4
複数行にわたるSED交換
私はこれらの3行を見つけようとしています: <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --> そしてそれらを次のものに置き換えます: <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 私がしようとすると sudo sed -i 's:<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />:' /myfile.xml 見つかりませんでした。\ nも挿入しようとしましたが、それでも機能しませんでした。 sudo sed -i 's:<!--\n <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />\n -->:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />:' /myfile.xml これらはエラーをスローせず、行のコメントを解除しません。どんなアドバイスでも感謝します!
11 linux  bash  sed 

2
シンボリックリンクとsudo
シンボリックリンクを作成します。 ln -s /tmp/folder1 /tmp/folder2 次に、/ tmp / folder2に移動して実行しますpwd。 $ cd /tmp/folder2/ $ pwd /tmp/folder2 $ sudo pwd /tmp/folder1 # <-- This is the odd part なぜ元のディレクトリpwdをsudo与えるのですか?私はbashスクリプトを書いていて、現在のディレクトリの絶対パスが必要です。sudoでは、元のディレクトリを取得できないようです。

4
このコマンドをどのように簡略化しますか?
私はstrace / netstat /などに慣れていません。このコマンドを使用して、リクエスト(telnet)を処理するapacheプロセスのトレースを取得しています。少し単純化する方法はありますか? sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \ grep $(lsof -p `pidof telnet` | grep TCP | \ perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \ perl -n -e'/ESTABLISHED (\d+)/ && print $1') ありがとう!


1
否認コマンドを確認する
^z; bg; disown非常に重要な実行時間の長いプロセスを実行しているsshセッションを閉じるために、シーケンスを発行しました。このプロセスは、ステータス出力をstderrに書き込みます。デタッチされた後も書き込みを続けます(lsofで確認、stderr fdはr / wに対して開いています)。 プロセスが実際に否認されていることを確認する方法はありますか(シェルが1を受信した場合、SIGHUPを受信しません)?
10 bash  process 

3
bashで編集するときにファイルを保存して閉じる方法は?
OK-私はLinux初心者です- edit <filename>デフォルトモードが何であれ、コマンドを使用してbashからファイルを編集しようとしています(「vi」を想定していますか?)。 問題は私の地獄です。保存して編集モードを終了する方法はわかりません。このチートシートはESCがうまくいくように提案しているようですが、動作していないようです。 MacからLinuxのSUSE Enterprise 11ボックスにSSHで接続しています。 助けてくれてありがとう!
10 linux  bash  vi 

4
誰かがSSH経由でLinuxボックスにログインするたびにプログラムを実行する
小さなSSHサーバーがあり、誰かがSSH経由でログインするたびに実行するスクリプトを書きたいのですが。 さて、どうすればいいですか? ANYBODYがログインするたびにスクリプトを実行したいのですが、少なくともログインしたユーザーのユーザー名とログインしたユーザーのIPアドレスにアクセスできる必要があります。 を使用することを考えまし/etc/bash.bashrcたが、それは良い解決策ですか?たとえば、ユーザーがその使用を無効にして、スクリプトを無効にする方法はありますか?はいの場合、私のその他のオプションは何ですか? ありがとう。
10 linux  bash  ssh 

4
リモートSSH接続でrsyncを使用する場合のリモートパス内のスペースのエスケープ
SSHを使用してrsyncをリモートサーバーに接続する場合、リモートパスのスペースなどをどのようにエスケープしますか?単純なバックスラッシュは、ローカルのbashプロンプトのスペースをエスケープしますが、リモートマシンでは、スペースはパスの区切りとして読み取られるため、そのパスの終わりを示します。 つまり、実際に宛先が「一部」ではなく「一部のディレクトリ」であるため、rsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/リモートサーバーが/path/to/dest/some/その宛先をリモートで読み取っているので、宛先をリモートで見つけることができません。 同じコマンドを試してバックスラッシュとスペースをエスケープしてローカルのbashプロンプトを通過し、リモートサーバーのバックスラッシュを維持すると(合計3つのバックスラッシュ:)/path/to/dest/some\\\ dir/、実際にリモートサーバーにバックスラッシュが送信されますが、リモートサーバー次に、パスとその後のスペースと文字を削除するの/path/to/dest/some\/ではなく、パスを解釈します/path/to/dest/some\ dir/。 パスを引用符でラップしようとすると、パスはほぼ同じように動作し、パスをスペースで効果的に切り離します。したがって、ローカルのbashプロンプトを通過するためにのみ機能します。 最初は "-"(スペース-ハイフン-スペース)セグメントが含まれるパスを使用していましたが、リモートサーバーがエラーrsync: on remote machine: -: unknown optionを返していましたが、そもそもこのスペースをエスケープする作業全体が開始されました。 では、リモートパスからスペースやハイフンなどの誤った文字を削除せずに、これをリモートサーバーで正しく機能させるにはどうすればよいですか。
10 ssh  bash  rsync  remote  path 

3
OS XでCTRL-rが奇妙に動作する(コマンドの一部のみが表示される)理由
Ctrl+ rは、.bash_history以前に実行したコマンドを検索するための優れた小さなツールです。 しかし、OS X Terminal.appで使用すると、奇妙な動作が見られ、他の誰かが同じものを見たり、修正方法を知っているのではないかと思っていました。 Ctrl+r 次のように入力します find ああクール、見て...それは私が欲しかったコマンドです find . -exec grep -q "hello world" '{}' \; -print そのコマンドを実行したいのですが、hello worldを別のものに変更します。 だから私はヒット←または→ コマンドはコマンドラインでSORTAになっていますが、常に次のように、コマンドの一部が省略されたバージョンのように見えます-q "blog_posts_by" '{}' \; -print。ここでは、コマンド全体がそこにあり、カーソルキーを使用して行を移動できますが、すべてではありません印刷されています。行に表示されている内容と、端末が実際に編集していると見なしている内容との間に不一致があります。 なぜこれが起こるのか、誰か手がかりはありますか?ウェブを検索するのは簡単なことではありません。
10 bash  mac-osx  terminal 


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