Unix & Linux

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

7
〜(バックアップファイル)で終わるファイルのリストを避けます
私の要件は、~(バックアップファイル)で終わるファイルを除く、ディレクトリ内のすべてのファイルをリストすることです。 私はコマンドを使用しようとしました: ls -l | grep -v ~ 私はこの出力を取得します: asdasad asdasad~ file_names.txt normaltest.txt target_filename testshell1.sh testshell1.sh~ testshell2.sh testshell2.sh~ testtwo.txt testtwo.txt~ test.txt test.txt~ これらのファイルのみを取得したい: asdasad file_names.txt normaltest.txt target_filename testshell1.sh testshell2.sh testtwo.txt test.txt
20 ls  filenames 

5
Bashで単一の感嘆符を入力するとどうなりますか?
Bashは、この質問に対する回答で説明されているように、履歴の展開に感嘆符を使用します(たとえばsudo !!、前のコマンドラインをで実行しますsudo)。ただし、次のコマンド(つまり、単一の感嘆符)の実行内容を説明する場所は見つかりません。 ! 何も印刷せずに1で終了するように見えますが、なぜそうなるのかわかりません。私はオンラインでBashのマニュアルページを見ましたが、「予約語」であるという事実以外には何も見つかりませんでした}。 } エラーを出力します: bash: syntax error near unexpected token `}'

3
Linuxネットワークトラフィックがeth0のみを通過するのはなぜですか?
サーバー側にeth0の2つのNICがありますか?192.168.8.140およびeth1?192.168.8.142。クライアントは192.168.8.142にデータを送信しiftop、eth1のトラフィックを表示する予定ですが、表示しません。すべてのネットワークはeth0を経由するため、2つのNICをテストするにはどうすればよいですか? すべてのトラフィックがeth1ではなくeth0を経由するのはなぜですか?インターフェイスごとに1 Gbit / sを取得できると期待していました。セットアップまたは構成の何が問題になっていますか? サーバ ifconfig eth0 Link encap:Ethernet HWaddr 00:00:00:19:26:B0 inet addr:192.168.8.140 Bcast:0.0.0.0 Mask:255.255.252.0 inet6 addr: 0000::0000:0000:fe19:26b0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:45287446 errors:0 dropped:123343 overruns:2989 frame:0 TX packets:3907747 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:66881007720 (62.2 GiB) TX bytes:261053436 (248.9 MiB) Memory:f7e00000-f7efffff eth1 …

2
bash履歴で一連のコマンドを実行するためのショートカットはありますか?
私に次の些細な例があると仮定しますhistory: ... 76 cd ~ 77 ./generator.sh out.file 78 cp out.file ~/out/ 79 ./out/cleaner.sh . 80 ls -alnh /out ... 私は、コマンドを実行したい場合は77、78、および791つのコマンドで、このためのショートカットが存在しませんか?私は試してみましたが!77 !78 !79、実行するためにそれらをすべて1行に配置するだけです。

1
一致を見つけた後、Grepの終了が遅いですか?
デバイス接続のbtmonをポーリングするbashスクリプトを作成しようとしています。私は実用的なソリューションを持っていますが、それはばかげて遅いです、そして、問題はgrepがマッチを見つけた後に終了するのが非常に遅いようです(約25秒)。高速化grepするか、まったく使用しないようにするにはどうすればよいですか? #!/bin/bash COUNTER=0 while : do until btmon | grep -m 1 '@ Device Connected' do : done let COUNTER=COUNTER+1 echo on 0 | cec-client RPI -s -d 1 sleep 5 echo as | cec-client RPI -s -d 1 until btmon | grep -m 1 '@ Device Disconnected' do : …
20 bash  grep 

2
`command 1> file.txt 2> file.txt`の動作が` command 1> file.txt 2>&1`と異なるのはなぜですか?
stdoutとstderrの両方を同じファイルにリダイレクトする場合、、command 1>file.txt 2>&1またはを使用してリダイレクトできますcommand &>file.txt。しかし、なぜcommand 1>file.txt 2>file.txt上記の2つのコマンドと動作が異なるのですか? 以下は検証コマンドです。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …

3
エイリアスまたは関数を介して、シェルで実際に実行されたコマンドを確認するにはどうすればよいですか
たとえば、bash関数(またはエイリアス)がありますfunction install() {sudo apt-get install $@}。コマンドを実行install dicelabすると、実際に実行されると予想されsudo apt-get install dicelabます。シェルによって実際に実行された内容はどこで確認できますか?私のより複雑なエイリアスが期待どおりに機能することを確認したいと思います。
20 bash  shell  debugging 

4
「実行のみ」のファイル許可の有効なユースケースは何ですか?
私はchmodとその8進数モードについて読んでいました。私はそれ1が実行のみであることを見ました。実行のみの権限の有効なユースケースは何ですか?ファイルを実行するには、通常、読み取りおよび実行権限が必要です。 $ echo 'echo foo' > say_foo $ chmod 100 ./say_foo $ ./say_foo bash: ./say_foo: Permission denied $ chmod 500 ./say_foo $ ./say_foo foo

1
POSIXは、コマンド置換内の引用されたヒアドキュメントに何を必要としますか?
で、この質問の誰かが使用して問題を報告し、ここで文書を内部に引用された区切り文字の単語で$(...)コマンド置換バックスラッシュ、\文書トリガーの内部の行末の改行結ぶラインの継続が、ここでは同じながら、文書外予想通りコマンド置換の作品を。 簡単なドキュメントの例を次に示します。 cat <<'EOT' abc ` def ghi \ jkl EOT これには、行末に1つのバックティックと1つのバックスラッシュが含まれます。区切り文字は引用符で囲まれているため、本体内で展開は発生しません。すべてのBourne-alikesで、これはコンテンツを逐語的に出力します。次のようにコマンド置換内に同じドキュメントを配置した場合: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" その後、それらは同じ動作をしなくなります。 dash、ash、zsh、ksh93、BusyBoxのはash、mksh、とSunOS 5.10 POSIXは、sh以前のように、すべて、文書の逐語的な内容を与えます。 Bash 3.2では、一致しないバックティックに対して構文エラーが発生します。一致したバックティックを使用して、コマンドとしてコンテンツを実行しようとします。 Bash 4.3は、「ghi」と「jkl」を1行にまとめますが、エラーはありません。--posixオプションでは、この影響を与えません。Kusalananda はpdksh、同じように振る舞うと言っています(ありがとう!)。 元の質問で、これはBashのパーサーのバグだと言いました。それは...ですか?[更新:yes ] POSIXからの関連テキスト(すべてシェルコマンド言語定義から)は、次のとおりです。 §2.6.3コマンドの置換: $(command)形式では、開き括弧から対応する閉じ括弧までのすべての文字がコマンドを構成します。commandには、任意の有効なシェルスクリプトを使用できます。ただし、不特定の結果を生成するリダイレクトのみで構成されるスクリプトは除きます。 §2.7.4ヒアドキュメント: 単語の一部が引用されている場合、区切り文字はwordの引用削除を実行して形成され、ヒアドキュメントの行は展開されません。 §2.2.1エスケープ文字(バックスラッシュ): <バックライン>の後に<改行>が続く場合、シェルはこれを行の継続と解釈します。<backslash>と<newline>は、入力をトークンに分割する前に削除されます。 §2.3トークンの認識: 場合io_hereトークンが文法によって認識されている(シェル文法を、一つ以上のすぐ隣次以降の行の)改行が一つ以上のここで、ドキュメントの本体を形成トークンとの規則に従って解析されなければなりませんHere-ドキュメント。 io_hereを処理していない場合、シェルは、入力内の次の文字に以下の最初の適用可能なルールを適用することにより、入力をトークンに分割します。... ... 現在の文字が<バックスラッシュ>、一重引用符、または二重引用符であり、引用されていない場合、引用されたテキストの最後までの後続の文字の引用に影響します。引用のルールは、引用で説明されています。トークンの認識中、実際には置換は行われず、結果のトークンには、入力に含まれる文字(<newline>を除く)が含まれます。引用テキストの。 これについての私の解釈は$(、終了するまでのすべての文字が)逐語的にシェルスクリプトを構成するということです。ヒアドキュメントが表示されるため、ヒアドキュメントの処理は通常のトークン化の代わりに行われます。ヒアドキュメントには、引用符で囲まれた区切り文字があり、その内容は逐語的に処理されます。エスケープ文字が含まれることはありません。しかし、このケースは単に対処されておらず、両方の動作が許容されるという議論を見ることができます。関連するテキストをどこかでスキップした可能性もあります。 この状況は他の場所でより明確になっていますか? (理論上)移植可能なスクリプトは何に依存できるはずですか? …

3
一部のユーザーのパスワードを変更すると、sudoパスワードも変更されますか?
私はLinux Mintシステムの唯一のユーザーであり、ログインに選択したパスワードはに割り当てられたものと同じであることに気付きましたsudo。 私の質問は次のとおりsudoです。ログインパスワードを変更すると、パスワードも変更されますか? そうでない場合、どのようにsudoパスワードを変更できますか?
20 sudo  password 

4
「eval echo」を使用するのは常に安全ですか?
を使用するevalと、任意のコードの実行が許可されるため、多くの場合推奨されません。ただし、を使用するeval echoと、残りの文字列がの引数にechoなるため、安全である必要があります。これは正しいですか?
20 bash  echo 

3
sudoer特権がタイムアウトしたかどうかを確認するにはどうすればよいですか?
私はsudoとしてコマンドを実行し、sudo権限がタイムアウトになった場合にのみテキスト行をエコーするスクリプトで作業しているので、sudoでコマンドを実行する場合にのみ(rootではなく)ユーザーがパスワードを再入力する必要があります。 どうすれば確認できますか?$(id -u)sudoとして実行している場合でも、現在のユーザーIDが返されるため、0と一致するかどうかを確認できないことに注意してください... これを静かにチェックする方法が必要です。
20 sudo 

2
圧縮されたハードドライブイメージが非常に大きい
次のコマンドを使用して、新しくインストールしたデュアルブート(UbuntuとWindows)のイメージを作成しました(これはしばらくの間、小さなイメージに使用していました)。 dd if=/dev/sda | gzip > /mnt/drive.img.gz このドライブでは、500Gのうち60G未満が使用されます。それでも、その画像ファイルは現在409Gの大きさです。 どう?gzipはこれらのゼロをすべて圧縮するべきではありませんか?私が言ったように、それは新しくインストールされたシステムです。そんなに散らかっていません。 今では、ファイルが60Gになるとは思っていませんでしたが、400Gは私にとって非常に大きいようです。


2
高度に投票されたワンライナーのネストされた二重引用符
3.5Kを超える票を含むStackOverflowの回答にDIRは、現在のbashスクリプトのディレクトリに割り当てるためのこの1つのライナーが含まれています。 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ネストされた二重引用符に困惑しています。私が知る限り、次のフラグメントは二重引用符で囲まれています。 "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...そして、=($( dirnameおよび))の右側にある他のものはすべて引用符で囲まれていません つまり、2番目、4番目、および6 "番目の"文字は、それぞれ1番目、3番目、および5 番目の文字を「閉じる」と仮定します。 二重引用符で"${BASH_SOURCE[0]}"何が達成されるのか理解していますが、他の2組の二重引用符の目的は何ですか? 一方、(および高い得点にもかかわらず)上記のスニペットが正しくない場合、名目上の意図を達成する正しい方法は何ですか? (名目上の意図ではpwd、最初にcd-ingの後に返された値をで返されたディレクトリに収集dirname "${BASH_SOURCE[0]}"し、cdサブシェルで-ing を実行し$PWD、親シェルのが変更されないようにします)。

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