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

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

2
rsyncを使用して無関係なファイルのみを削除する
2つのディレクトリ構造を比較し、ターゲットの場所にある無関係なファイルとディレクトリを削除する最良の方法は何ですか? 私が開発している小さなウェブフォトギャラリーアプリがあります。ユーザーはFTPを使用して画像を追加および削除します。私が書いたWebギャラリーソフトウェアは、その場で新しいサムネイルを作成しますが、削除は処理しません。私がしたいことは、コマンド/ bashスクリプトをスケジュールして、事前定義された間隔でこれを処理します。 元の画像は/home/gallery/images/サブディレクトリを使用してアルバムに保存され、アルバムに整理されます。サムネイルは/home/gallery/thumbs/、画像ディレクトリと同じディレクトリ構造とファイル名を使用してにキャッシュされます。 私はこれを達成するために以下を使用してみました: rsync -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs すべてのサムネイルが既にキャッシュされている場合は正常に機能しますが、そうなるとサムディレクトリに元のフルサイズの画像がコピーされるという保証はありません。 私がやろうとしていることをどのように達成するのが最善ですか?
13 linux  bash  rsync 


4
コマンドラインでファイルの範囲をコピーする(ZSH / BASH)
サフィックスとして連続番号が付いているファイルのリストがあります。これらのファイルの範囲のみをコピーしたいと思います。cpコマンドの一部として範囲を指定するにはどうすればよいですか。 $ls P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG* P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG* 次のようなファイルをP1080275.JPGからP1080283.JPGにコピーしたいと思います。 $cp P10802[75-83].JPG ~/Images/. これを行う方法はありますか?
13 linux  bash  copy  zsh 

5
成功した場合にのみシェルコマンドの出力を非表示にしますか?
通常、シェルコマンドの出力を非表示にするには、 stderrとstdoutをリダイレクトする必要があります。デフォルトで出力を非表示にするが、エラー時にすべての累積出力をダンプする組み込み機能またはコマンドはありますか?これをリモートsshコマンドのラッパーとして実行したいと思います。今、私はそれらをリダイレクトを使用していますが、何が失敗したのかについての手がかりが得られず、それらは非常に冗長です。 編集:最後に、スクリプトから以前のすべてのコマンドを蓄積し、現在のプロセス識別子を使用し、ログを自動的に削除し、失敗の赤いエラーを追加するために少し調整した@Belminの答えに基づいて次のテンプレートを作成しました何かがうまくいかないときのメッセージ。このテンプレートでは、最初のsilentラッパーは成功し、ディレクトリがすでに存在するため、3番目のコマンドは失敗します。 #!/bin/sh set -e SILENT_LOG=/tmp/silent_log_$$.txt trap "/bin/rm -f $SILENT_LOG" EXIT function report_and_exit { cat "${SILENT_LOG}"; echo "\033[91mError running command.\033[39m" exit 1; } function silent { $* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit; } silent mkdir -v pepe silent mkdir -v pepe2 silent mkdir -v pepe silent mkdir -v pepe2
12 linux  bash  shell 

3
ファイルを分割して直接圧縮する方法は?
私は100GBのファイルを持っていますが、それぞれを1GBのファイルのうち100個に分割したい(改行によって) 例えば split --bytes=1024M /path/to/input /path/to/output 生成された100個のファイルについて、これらの各ファイルにgzip / zipを適用したいと思います。 単一のコマンドを使用することは可能ですか?

4
別のユーザーとしてスクリプトを開始する
/etc/init.d/にスクリプトを作成しました。このスクリプトは、他の(ルート以外の特権を持つ)ユーザーからホームディレクトリから他のスクリプトをいくつか実行する必要があります。 これらのスクリプトを次のもので起動します。 sudo -b -u <username> <script_of_a_particular_user> そしてそれは動作します。ただし、実行を継続するすべてのユーザースクリプト(ウォッチドッグなど)には、対応する親sudoプロセスが表示されますが、まだ生きており、rootとして実行されています。これにより、アクティブプロセスリストに混乱が生じます。 したがって、私の質問は次のとおりです。既存のbashスクリプトから別のユーザーとして別のスクリプトを起動(フォーク)して、孤立した(スタンドアロン)プロセスのままにするにはどうすればよいですか。 より詳細な説明: 私は基本的に、マシン上の他のユーザーに、.startUpと.shutDownという名前のホームディレクトリにあるそれぞれのサブディレクトリにある実行可能ファイルを実行することにより、システム起動またはシステムシャットダウン時に実行する手段を提供しようとしています。他の手段を見つけられなかったので、正確にそれを行うbashスクリプトを作成し、(スケルトンの例に従って)/etc/init.d/でサービススクリプトとして構成しました。 start引数を使用すると、.startUpディレクトリからすべてを起動し、stop引数を指定して実行すると、すべてのユーザーの.shutDownディレクトリからすべてを起動します。 あるいは、この問題を解決するために既存のソリューションを使用できたのかどうかにも興味があります。 更新 私は少し見て回ったところ、この質問を見つけました:https : //unix.stackexchange.com/questions/22478/detach-a-daemon-using-sudo そこに受け入れられた答え、使用する:sudo -u user sh -c "daemon & disown %1"、私のために働く。しかし、私は%1を否認せずに試しましたが、それは同じです。だからこれは私が期待したように私のために働くものです: sudo -u <username> bash -c "<script_of_a_particular_user> &" 私の追加の質問は、なぜそれが否認せずに機能するのかということです。とにかく、何らかの潜在的な特別なケースのために、私はまだdisownコールを離れるべきですか? 更新2 どうやらこれも動作します: su <username> -c "<script_of_a_particular_user> &" この呼び出しとsudo呼び出しに違いはありますか?これは潜在的にまったく異なる質問であることを知っています。しかし、私はこのトピックのために自分で答えをここで見つけているので、誰かがこれをここで明確にすることができます。 更新3 suまたはsudoを使用したこれらのメソッドはどちらも、マシンの起動後に新しいstartparプロセス(rootとして実行される単一プロセス)を生成します。プロセスリストに次のように表示されます。 startpar -f -- <name_of_my_init.d_script> なぜこのプロセスが生まれたのですか?他のinit.dスクリプトではこのプロセスが実行されていないため、明らかに私は何か間違ったことをしています。 更新4 …
12 linux  debian  bash  sudo  init.d 

2
xargsを使用するときに引数の代わりに標準入力にリダイレクトする[終了]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 6年前に閉鎖されました。 たとえば、コマンドを使用して cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo" にfoo.txtは2行が含まれています foo bar 上記のコマンドは何も印刷しません。

3
LinuxからBIOS設定を変更することはできますか?
KVMを1つずつ接続することなく、大量のマシンでIPMIを有効にするスクリプトを作成しようとしています。LinuxからBIOS設定を変更することはできますか?OSはSL6です。 各マシンの電源を入れ直す必要がある可能性が高いことは理解していますが、もちろんプログラムでそれを行うことができます。
12 linux  bash  scripting  bios 

3
bashスクリプトを介してファイルを編集する
私はbashスクリプトの初心者です。Linuxボックスに自動でインストールおよび構成するためのbashスクリプトを作成したいと思います。 編集したいとします /etc/yum.repos.d/epel.repo bashスクリプトによる 私がやりたいことは次のとおりです ファイル/etc/yum.repos.d/epel.repoを開きます [epel]セクションを検索 epelセクションのline enabled = 1の直後にline priority = 10を追加します 私は最初の部分に追加しました yum install nano nano /etc/yum.repos.d/epel.repo 私の質問は、nanoを使用してbashスクリプトで2番目と3番目の部分を行う方法です(可能であれば、不可能な場合はsedで表示します) また、いくつかの時点で、ファイル内の変数を変更する必要があります enable = 0 to enable = 1 テスト= "1"からテスト= "0" 行にテキストを追加します。functions = to function = "text1"、 "text2" ファイルにテキストを追加して保存します(nanoを使用) 私はその要求が厳しいことを知っていますが、サーバー管理に慣れている友人のためにこれを作成する必要があります残念ながら、私は試験のように最初からbashスクリプトを勉強する時間がないので、スクリプトを書くために例を使用します。 ほとんどのbashスクリプトを正常に完了したすべての返信に感謝します しかし、私は別の問題は、私たちはworker_processesに対処しますsedを使用してnginx.conf変更したいとしましょいる 使用は、以下の1.Findに行うためにsedを今私が欲しい最初に出現するの worker_processes というのconf内としてテキストを置き換えますworker_processes 4; ここでの特別な注意:これは単なる例です。confにworker_processes 1が含まれている場合があります。。これは難しい部分です。worker_processesという単語の最初のwHOLE一致ケースを見つけ、その単語が見つかったテキスト行を削除し、worker_processes 4;そこに貼り付けて …
12 linux  centos  bash 

5
PIDが実行されているかどうかを確認する適切な方法は何ですか?
私が持っている.pidファイルを、私はプロセスが実行されているかどうかを確認する必要があります。これまでのところ、私は2つのオプションを見つけました kill -0 `cat something.pid` pidが実行されていない場合、エラーを出力します。これをにリダイレクトできることは知っ/dev/nullていますが、これは最善の解決策ではないと考えさせられます。 2番目の解決策はを使用することpsです。ただし、STDOUTにも印刷されます ps -ef `cat something.pid` 出力をリダイレクトし、/dev/null返されたステータスコードを使用するのは正常ですか、それとも何か間違っているので別のコマンドが必要な兆候ですか?
12 linux  unix  bash  process  pid 

3
本文が空でない場合にコマンドラインからメールを送信する
ログが変更された場合に警告する簡単なスクリプトを作成したいと思います。このために、私はgrepを使用して、興味のある行を見つけています。現在、次のように機能しています。 grep line /var/log/file | mail -s Log email@domain.tld 問題は、一致する行が見つからない場合でもメールを送信することです。mailutilsのメールユーティリティには、本文が空のメールをドロップするように指示するスイッチがないようです。 それを行うための迅速かつ簡単な方法はありますか?

6
iniファイルを解析してbash配列変数に変換する方法は?
私はiniファイルをbash配列変数に変換しようとしています。サンプルのiniは次のとおりです。 [foobar] session=foo path=/some/path [barfoo] session=bar path=/some/path これらは次のようになります。 session[foobar]=foo path[foobar]=/some/path session[barfoo]=bar 等々。 今、私はこのコマンドだけを思い付くことができました awk -F'=' '{ if ($1 ~ /^\[/) section=$1; else if ($1 !~ /^$/) print $1 section "=" $2 }' また、別の問題は、スペース=を考慮に入れていないことです。sedおそらくこの仕事に適していると思いますが、セクション名の一時変数を保持して保存する方法がわかりませんsed。 これを行う方法はありますか?

1
bash関数内でheredocを使用する方法は?
bash関数内にヒアドキュメントを挿入することは可能ですか? 以下の簡単なサンプルはエラーになります。 ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}") #!/bin/sh my_function () { cat <<HEREDOC heredoc contents HEREDOC } my_function 環境: Ubuntu 11.04(GNU / Linux 2.6.38-8-server x86_64) GNU bash、バージョン4.2.8(1)-release(x86_64-pc-linux-gnu)
12 ubuntu  bash 


5
シェルスクリプトは、ファイルの変更を待ってアクションを実行できますか?
ファイルの変更を監視し、変更が検出されたときに何らかのアクションを実行するスクリプトを作成できるかどうか疑問に思います。 詳細な説明: OpenVPNは、そのステータスを1分ごとにファイルに書き込みます。 このステータスファイルを解析し、対処する必要があります。 OpenVPNは、書き込む前にステータスファイルを切り捨てます。 名前付きパイプに書き込もうとしましたが、パイプの切り捨てに失敗すると、アプリで望ましくない(致命的ではない)エラーが発生します。

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