Unix & Linux

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

11
シェルが「猫の無駄な使用」を自動的に修正しないのはなぜですか?[閉まっている]
多くの人々は、ラインに沿ってコードを含むonelinersとスクリプトを使用します cat "$MYFILE" | command1 | command2 > "$OUTPUT" cat技術的には/usr/bin/cat、コマンドが実行された場合にこれを回避できる新しいプロセス(多くの場合)を開始する必要があるため、最初は「catの無駄な使用」と呼ばれます。 < "$MYFILE" command1 | command2 > "$OUTPUT" シェルは起動するcommand1だけでstdin、指定されたファイルをポイントするだけです。 シェルがこの変換を自動的に行わないのはなぜですか?「猫の無用な使用」構文は読みやすく、無用な猫を自動的に取り除くのに十分な情報がシェルにあるはずです。catシェルはパスにバイナリを使用する内部代わりに、それを実装することができなければならないので、POSIX規格で定義されています。シェルには、1つの引数バージョンのみの実装と、パス内のバイナリへのフォールバックさえ含めることができます。

5
「for」と同じ行に「do」を配置する必要があるのはなぜですか?
1.まとめ わかりません。なぜE010 bashate ruleが必要なのですか。 2.詳細 私はファイルをリントするためにbashateを使用してい.shます。E010ルール: やると同じライン上にないため for bashate: 正しい: #!/bin/bash for f in bash/*.sh; do sashacommand "$f" done エラー: #!/bin/bash for f in bash/*.sh do sashacommand "$f" done 任意の有効な引数は、なぜ私が必要であるforとdo同じ行に? 3.役に立たない 私の質問に対する答えが見つかりません: グーグル コーディングのベストプラクティスに関する記事(例) bashateドキュメンテーション。私が見つけるだけ: 制御ブロックで物事の一貫性を保つのに役立つ一連のルール。これらは、継続のある長い行では無視されます。これは、一種の「興味深い」展開だからです。

3
シェルからエイリアスを永久に削除するにはどうすればよいですか
コンピューターの近くにいなかったとき、誰かがそれを手に入れてls、ルートフォルダーにエイリアスを設定しました。彼はそれをに設定しました'yes NeverGonnaGiveYouUp'。ルートフォルダーにimを入力するlsと、NeverGonnaGiveYouUpの無限ループが発生します。それは私を夢中にさせており、それを取り除く方法がわかりません。 私はすでに試したunaliasし、unalias -aしかし、それらは単に一時的に削除します。シェルを閉じて再度開くと、再び表示されます。このがらくたを取り除くにはどうすればよいですか?
28 shell  terminal  alias 

1
&&および||の後のbash行の継続はどこですか 文書化?
このコンストラクトをスクリプトでよく見て、自分で使用しましたが、ドキュメンテーションで見つけることができないように思われます。 例: [ -f file1 ] && [ -f file2 ] && echo "Both files exist." || echo "One or the other file doesn't exist." これは、次のように、改行の前にバックスラッシュを使用して行うこともできますman bash。 If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it …

2
BusyBoxコマンドは本当に組み込まれていますか?
私は有名なUnix Recovery Legendを読んでいたのですが、次のことを知りました: BusyBoxシェルを開いていて、BusyBoxバイナリ自体が削除された場合でも、BusyBoxバイナリに含まれるすべてのコマンドを使用できますか? BusyBoxファイル自体を開いて実行することはできないため、明らかに、のような別の実行中のシェルからこれらのコマンドのBBバージョンを使用bashすることはできませんbash。しかし、BusyBoxの実行中のインスタンス内からは、BBがコマンドを実行する2つの方法があるように思えます。 BusyBoxの新しいインスタンスを分岐して実行し、適切な名前を使用して呼び出し、ディスクからBusyBoxファイルを読み取ります。 指定されたコマンドを実行するために、いくつかの内部ロジックを分岐して実行できます(たとえば、関数呼び出しとして実行することにより)。 (1)がBusyBoxの動作方法である場合、BBバイナリが削除された後、特定のBusyBoxが提供するコマンドがBBの実行中のインスタンス内から利用できなくなることが予想されます。 (2)が機能する場合、BB自体が削除されたシステムの復旧にもBusyBoxを使用できます(ただし、BusyBoxの実行中のインスタンスにアクセスできる場合)。 これはどこにも文書化されていますか?そうでない場合、安全にテストする方法はありますか?

4
シェル関数のローカル変数の範囲
24.2を読んだ後。ローカル変数、varキーワードで変数を宣言するlocalことvarは、関数の波括弧で区切られたコードブロック内でのみ値にアクセスできることを意味すると考えました。 ただし、次の例を実行した後、私はそれが判明var読み、またアクセスすることができ、関数から書かれたコードのブロックによって呼び出される-すなわちたとえvar宣言されているlocalにouterFunc、innerFuncまだそれを読んで、その値を変更することができます。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 出力: global: before outerFunc: [var:] …

5
特定の戻りコードをすぐに返すUnixコマンド?
以下の私の例に似た何かをする標準のUnixコマンドはありますか $ <cmd here> 56 $ echo Return code was $? Return code was 56 $ <cmd here>forkで実行できるもので、プロセスの終了時に終了コードとして56を残すものでなければなりません。exitそしてreturnシェル組み込みコマンドは、私はそれから出たことで、彼らが起動したシェル自体に影響を与えるので、探しています何のためには適していません。<some cmd>は、シェル以外のコンテキストで実行できるものである必要がありますsubprocess。たとえば、を使用してPythonスクリプトから呼び出します。 たとえば、/usr/bin/false常にリターンコード1で直ちに終了しますが、そのリターンコードを正確に制御したいと思います。独自のラッパースクリプトを記述することで同じ結果を得ることができました $ cat my-wrapper-script.sh # i.e., <some cmd> = ./my-wrapper-script.sh #!/usr/bin/bash exit $1 $ ./my-wrapper-script.sh 56 $ echo $? 56 しかし、私のためにこれを行うことができる標準のUnixコマンドが存在することを望んでいます。


5
Linuxは実際のファイルと存在しない(例:デバイス)ファイルをどのように区別しますか?
これはかなり低レベルの質問であり、尋ねるのに最適な場所ではないかもしれないことを理解しています。しかし、それは他のどのSEサイトよりも適切であるように思えたので、ここに行きます。 Linuxファイルシステムでは、いくつかのファイルが実際に存在することを知って/usr/bin/bashいます。たとえば:は存在するファイルです。しかし、(私の知る限りそれを理解したように)、いくつかは、実際よりのような存在とされていない仮想ファイルを、例えば:/dev/sda、/proc/cpuinfoなど私の質問は(彼らは2つですが、あまりにも密接に別の質問であることを関連します): 読み取りコマンド(またはそのような)が発行されたときに、これらのファイルが本物である(したがって、ディスクから読み取る)かどうかにかかわらず、Linuxカーネルはどのように動作しますか? ファイルが本物ではない場合:例として、read from /dev/randomはランダムデータを返し、read from /dev/nullはを返しEOFます。どのようにこの仮想ファイルからどのデータを読み取るのか(したがって、データが仮想ファイルに書き込まれたとき/場合に何をするのか)-各ファイルに適切な別々の読み取り/書き込みコマンドへのポインタを持つ何らかのマップがありますか?または、仮想ディレクトリ自体についても?したがって、のエントリ/dev/nullは単にを返すことができEOFます。



5
Linuxにスワップをメモリに読み込ませる
Linuxカーネルは、16 GBの物理メモリのほとんどを使用するアプリケーションを実行すると、メモリからほとんどのページをスワップアウトします。アプリケーションの終了後、すべてのアクション(コマンドの入力、ワークスペースの切り替え、新しいWebページのオープンなど)が完了するまでに非常に時間がかかります。これは、関連するページを最初にスワップから読み込む必要があるためです。 Linuxカーネルに、各アプリケーションを手動でタッチ(および待機)せずに、ページをスワップから物理メモリにコピーするように指示する方法はありますか?私は多くのアプリケーションを実行しているので、待機は常に苦痛です。 swapoff -a && swapon -aシステムの応答性をよくするためによく使用しますが、これによりページのスワップがクリアされるため、次回スクリプトを実行するときにページを再度書き込む必要があります。 おそらくsysfsを使用して、スワップからすべてのページを読み取るようカーネルに指示するカーネルインターフェイスはありますか? 編集:私は確かにすべてのスワップをswapcachedにする方法を探しています。(デロバートに感謝!) [ PSserverfault.com/questions/153946/…およびserverfault.com/questions/100448/…は関連トピックですが、Linuxカーネルがスワップをクリアせずにスワップからメモリにページをコピーする方法についての質問には対応していません。
28 linux  kernel  memory  swap  sysfs 


2
sshを使用して初めてログインするときにユーザーにパスワードの変更を強制するにはどうすればよいですか?
sshを使用して初めてログインするときに、新しく作成したユーザーにパスワードの変更を強制しようとしています。セキュリティ上の理由から、私は彼が初めてログインするまで彼に安全なパスワードを与えたいです。これまでに次のことを行いました。 useradd -s /bin/bash -m -d /home/foo foo passwd foo 実行chage -d 0 fooすると、Your account has expired; please contact your system administratorsshログインのエラーのみが表示されます。
28 linux  bash  ssh  login  pam 

6
開いたままになっている削除済みファイルからディスク領域を解放する最良の方法
こんにちは私は削除された多くのファイルを持っていますが、何らかの理由で、削除されたファイルに関連付けられたディスクスペースは、ディスクスペースを取得しているファイルのプロセスを明示的に終了するまで利用できません $ lsof /tmp/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted) 上記の削除されたファイルによって占有されるディスク容量は、タブキーを使用してファイルパスをオートコンプリートしようとするとエラーが発生するなどの問題を引き起こします bash: cannot create temp file for here-document: No space left on device しかし、実行しkill -9 1623た後、そのPIDのスペースが解放され、エラーが発生しなくなりました。 私の質問は: ファイルが最初に削除されたときにこのスペースがすぐに解放されないのはなぜですか? 削除されたファイルに関連付けられたファイルスペースを取り戻すための最良の方法は何ですか? また、私が使用した誤った用語や、この状況に関するその他の関連情報および関連情報をお知らせください。

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