Unix & Linux

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

1
複合コマンドでのbashオプションの設定
extglob複合化合物内でシェルオプションを設定すると、後続のアンチグロブが失敗することがわかりました。シェルオプションは、複合コマンドの外部で設定する必要がありますか?私はbashのmanページにそのような要件の兆候を見ませんでした。 例として、次のスクリプトは正常に機能します(prints a.0 a.1)。 #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 shopt -s extglob ls "a."!(b*) ただし、最後の2行が複合コマンドとして実行されると、スクリプトは次のエラーで失敗します。 syntax error near unexpected token `(' ` ls "a."!(b*)' これは、4.2から4.4までのbashバージョンを使用して、さまざまな複合コマンドでテストされました。 (1)条件付き- if #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 if true; then shopt -s extglob ls "a."!(b*) fi (2)ブレース- { } #!/bin/bash touch …
9 bash  shopt 


1
jqでJSONデータを解析すると、エラーメッセージ「文字列 'Title'の配列にインデックスを付けることができません」
{ "content": [ { "Title": "abc", "brand": "xyz", "size": "5 g", "date": "2019-01-01", "details": { "Temperature": [ { "value": "90", "characteristics":"Normal" }, { "value":"100", "characteristics":"high" }, { "value":"80", "characteristics":"low" } ], "certifications": [ { "value": "based", "characteristics":"pass" }, { "value": "50", "characteristics":"failed" } ] }, "formats": { "city": "NYC", "id": …
9 jq 

1
連想配列をパラメーターリストとしてスクリプトに渡す
スクリプトには、次のような連想配列があります。 declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) それをフォームのパラメータリストに変換する単一のコマンドはありますか --key1=value1 --key2=value2 手動で書き直す必要なし --key1="${VARS[key1]}" --key2="${VARS[key2]}" 私が考えていたユースケースは、次のように、パラメータのリストとして配列をスクリプトに渡すことでした。 my_script.sh $(to_param_list $VARS) @Kusalanandaの回答で行ったコメントをさらに詳しく説明すると、私の正確な使用例は次のとおりです。makeselfを使用して自己解凍インストーラーをビルドするために使用するスクリプトがあり、このスクリプトは、次のように分離されるパラメーターを受け取ります。 スクリプト自体のパラメーター 自己解凍インストーラー内のインストーラーのパラメーター 次に、スクリプトは次のようにインストーラーをビルドします。 to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" ただし、パッケージ内の非常に単純なインストーラースクリプトを使用してパラメーターの受け渡しをテストしました。 while ! -z "$1" ; do echo "$1" shift done 次のような配列を渡します: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) この出力結果: --upgrade-to=19.3.0 …

2
特定のユーザーとしてのみsystemdサービスを再起動しますか?
基本的に機能するsystemdサービスをいくつか作成しました。 ロケーション: /etc/systemd/system/multi-user.target.wants/publicapi.service コンテンツ: [Unit] Description=public api startup script [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=-/etc/environment WorkingDirectory=/home/techops ExecStart=/home/techops/publicapi start ExecStop=/home/techops/publicapi stop [Install] WantedBy=multi-user.target コマンドラインでtechopsユーザーとしてサービスを再起動しようとすると、次の出力が表示されます。 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to start 'publicapi.service'. Multiple identities can be used for authentication: 1. Myself,,, (defaultuser) 2. ,,, (techops) Choose identity to authenticate as …

1
POSIX.1eが廃止されたのはなぜですか?
提案されたPOSIX.1e標準は、広くサポートされているACLなどのいくつかを定義しています。しかし、提案自体は取り下げられました。どうして?私がオンラインで見つけた唯一の理由は、http://wt.tuxomania.net/topics/1999_06_Posix_1e/からのこの引用です: なぜPosix.1eが放棄されたかは、今日(2014年7月)の観点から理解するのは困難です。Solaris、Irix、Linux、そしておそらく他のUnicesが標準を認識しているようです。一方、FreeBSDプロジェクトは反対の引数を見つけ、デフォルトでは機能(「きめの細かい特権」)を統合しませんでした。 一方、JörgSchillingはこのサイトでこれを述べています(ファイルシステムACLの「マスク」の正確な目的は何ですか?) ところで、ACLのPOSIX-1003.1ドラフトは、1997年にリファレンス実装(ag Solaris)によって撤回されました。これは、顧客が、後でNVSv4 ACLとして標準化されたより強力な方法を望んでいることが判明したためです。 起こったことの詳細な説明はありますか?
9 posix  history  acl 

3
シェルからstdinが/ dev / nullかどうかを確認する方法は?
Linuxでは、シェルスクリプトが標準入力がnullデバイス(1、3)*からリダイレクトされているかどうか、理想的には何も読み取らないかどうかを確認する方法はありますか? 予想される動作は次のとおりです。 ./checkstdinnull -> no ./checkstdinnull < /dev/null -> yes echo -n | ./checkstdinnull -> no EDIT mknod secretunknownname c 1 3 exec 6<secretunknownname rm secretunknownname ./checkstdinnull <&6 -> yes 私は、入力デバイスの maj / min数を読み取る必要があるだけだと思います。しかし、シェルからそれを行う方法を見つけることができません。 *は必要ありません/dev/nullが、で手動で作成した場合でも nullデバイスがありますmknod。
9 linux  shell  devices  stdin 

1
psが時々、有効なプロセスを*非常に*見つけられないことがありますか?
問題のサーバーで確実に実行されているにもかかわらず、ps -o args -p <pid>コマンドが問題のプロセスを見つけることができない場合があるという奇妙な問題に遭遇しました。問題のプロセスは、一部のJavaアプリの起動に使用される長期実行ラッパースクリプトです。 問題の「野生」の出現は、常に早朝に起きているように見えるので、それは彼らは非常に重く、その後ロードされているので、問題になっているサーバ上のディスク負荷に近い関連といういくつかの証拠は、しかし、実行することで、そこにあるps中をタイトなループで質問すると、最終的に問題を再現できます-数百回に1回実行するとエラーが発生します。 次のbashスクリプトを実行することで、失敗した実行と成功した実行の両方のstrace出力を生成できました。 while [ $? == 0 ] ; do strace -o fail.out ps -o args -p <pid> >/dev/null ; done ; strace -o good.out ps -o args -p <pid> 以下からの出力を比較するfail.outとgood.out、私はそれを見ることができますgetdents何とか失敗し、実行上のシステムコールが(〜1100年と比較して〜500程度)システム上のプロセスの実際の数よりもはるかに小さい数を返します grep getdents good.out getdents(5, /* 1174 entries */, 32768) = 32760 getdents(5, /* 31 …
9 linux  ps  procfs 

4
Debianテストへのアップグレード後にPulseAudioがIntel HDAを認識しない(Buster)
Debian 9安定版からDebian 10テストにアップグレードした後、夏の間に問題に気づきました。PulseAudioがIntel HDAオーディオデバイスを認識しなくなりました。当時、nVidia HDMI経由で接続されているモニターのオーディオに切り替えることができたため、将来のアップデートで修正されることを期待して問題を回避しました。彼らはしていません。数か月早送りして、ワークスペースを再配置しましたが、今度はIntel HDAを再び動作させる必要があります。 これが私がこれまで見てきたものです... Debian 10テスト カーネルはそれを見ます: # dmesg | grep HDA [ +0.005509] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input17 [ +0.000073] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input18 [ +0.000057] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1b.0/sound/card0/input19 [ +0.000054] input: HDA Intel PCH …

1
なんらかのネガティブエコーを使用して、以前のエコーと同じ場所にコンソールで何かを印刷します
bashでは、clearすべての画面コマンドをクリアするという名前のコマンドをキャストできます。 そして、echoあなたはあなたが望むものを画面上に印刷することができます。 私の単純なスクリプトでは、コマンドで行われていることの割合を出力する必要があることがよくあります。 だから私は何かをすることができました... echo "89%" echo "90%" echo "91%" 等々.. 私が嫌いなのは、画面がパーセント更新でいっぱいになることです... 89% 90% 91% ... bashまたはphpエコーでエコーできる特別な文字の組み合わせ(たとえば、「\ 033 [01; 31m」)があるかどうかを確認し、コンソールに「最後に印刷された文字を削除する」と伝えます。 次のようなものを使用してそうします:(phpの例) echo str_repeat($neg_character, strlen($last_percentage_update_string)); echo $new_percentage_update_string; 画面に行をいっぱいにせずに、新しい文字列を前の文字列の正確な位置に印刷します それ以外の場合は、常にbashおよびphpスクリプトを使用して他の方法で同じことを行う方法を探します(少なくともdebian9コンソールとphp7で実際の実際の例を含めてください)
9 linux  bash  php  console 

3
readによって駆動されるwhileループ内でプロンプトとしてreadを使用しますか?
各反復の開始時に複数の変数を読み取り、ユーザーからの入力をループに読み込む必要があるユースケースがあります。 私が探索する方法がわからない解決策への可能な道- 割り当てには、標準入力の代わりに別のファイルハンドルを使用します for代わりにループを使用する... | while read ...... forループ内に複数の変数を割り当てる方法がわかりません echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

4
Linuxはユーザーをどのように識別しますか?
つまり、2人のユーザーが同じ名前を持っている場合、システムは、ファイルのアクセス許可を適用するときに、実際には異なるユーザーであることをどのようにして知るのでしょうか。 /home/old-archシステムを再インストールする前に家の名前を変更することを検討しているときにこの疑問が浮かびました(私は/home独自のパーティションにあり、フォーマットしていません)/home/arch。それにより、新しい、元の状態に戻すことができました。新しいシステムが私のファイルに対する古い許可を与えるのか、それとも私を別のものとして認識するのかと思ったarch。

5
文字列の一部を認識しながら文字列を検索し、文字列を返す
たとえば、文字列があります "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 私の文字列には必ず部分文字列IceCreamが含まれていることはわかっていますが、その後に何があるかわかりません。 それは私の例のように123かもしれませんし、何か違うかもしれません。 次のコマンドを使用して、grepを使用して文字列に「Icecream」サブストリングが存在するかどうかを検出できますが echo $string | grep -oF 'Icecream'; どちらが印刷されます Icecream 部分文字列全体を出力するコマンドを使用したいのですが、私の例では Icecream123 もちろん、アイスクリームに続くものはランダムで事前にわかっていないので、私はただ行うことができません $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

3
ファイルの最後から最後のカンマ区切りを削除するにはどうすればよいですか?
Linuxでファイルから最後のカンマ区切りを削除するにはどうすればよいですか? ファイルの例: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536", 予期された結果: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536"

3
Debian 9に新しいカーネルを手動でインストールする適切な方法は何ですか?
一人でこれを行うには十分な自信がなく、サーバーが起動しないなどの危険を冒しています。 カーネルを以下からアップグレードしたいと思います。 $ uname -r 4.9.0-6-amd64 $ uname -v #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) カーネルバージョン4.15または4.16。どちらをお勧めします。 私は利用可能なバージョンをリストする方法を知っていると思います: $ apt-cache search linux-image | grep amd64 linux-headers-4.9.0-6-amd64 - Header files for Linux 4.9.0-6-amd64 linux-headers-4.9.0-6-rt-amd64 - Header files for Linux 4.9.0-6-rt-amd64 linux-image-4.9.0-6-amd64 - Linux 4.9 for 64-bit PCs linux-image-4.9.0-6-amd64-dbg - Debug symbols for linux-image-4.9.0-6-amd64 …
9 debian  kernel 

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