Unix & Linux

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

6
ベース名が親ディレクトリの名前である特定の拡張子を持つすべてのファイルを検索します
ベース名がファイルの親ディレクトリの名前と一致*.pdfするディレクトリ内のすべてのファイルを再帰的に検索したいと思い~/fooます。 たとえば、ディレクトリ構造~/fooが次のようになっているとします。 foo ├── dir1 │ ├── dir1.pdf │ └── dir1.txt ├── dir2 │ ├── dir2.tex │ └── spam │ └── spam.pdf └── dir3 ├── dir3.pdf └── eggs └── eggs.pdf 希望するコマンドを実行すると戻ります ~/foo/dir1/dir1.pdf ~/foo/dir2/spam/spam.pdf ~/foo/dir3/dir3.pdf ~/foo/dir3/eggs/eggs.pdf findまたは他のコアユーティリティを使用してこれは可能ですか?これは-regexオプションを使用して実行できるとfind思いますが、正しいパターンの書き方がわかりません。
9 find 

1
`w`、` who`、 `whoami`および` id`の異なる出力
コマンドラインプラットフォームでは、たとえば、Codecademyのプラットフォームのように、実行すると for cmd in w who whoami id do echo $cmd $cmd echo ========================= echo " " done 私は得る w 00:52:54 up 8 days, 14:10, 0 users, load average: 3.78, 2.98, 2.69 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ========================= who ========================= whoami ccuser ========================= id uid=1000(ccuser) gid=1000(ccuser) groups=1000(ccuser) …
9 users  who  w  whoami 

4
awkは一度に複数の変数に割り当てます
私は文字列から2つの数値を引き出し、それらを使用して変数に割り当てようとしていますawk(gawk私が特に使用しているものです)。tmuxバージョン文字列からメジャーバージョン番号とマイナーバージョン番号をawk変数に取り出したい: 入力:tmux 2.8; maj == 2そしてmin == 8 入力:tmux 1.9a; maj == 1そしてmin == 9 入力:tmux 2.10; maj == 2そしてmin == 10 私の入力がtmux -Vstdin からのものであると仮定すると、私は現在次のものを持っています: tmux -V | awk '{ maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2); min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2); # ...do something with maj and min... }' …
9 awk  gawk 

1
`apt`を使用した` rpm -K`と同等
何であるaptのと同等rpm -K *.rpm、-Kリポジトリの署名を検証することと定義されるman rpmとして最大RPMは? 状況の例: sudo rpm --import https://mirrors.example.com/rpm/RPM-GPG-KEY-release && rpm -K example.rpm
9 debian  rhel  apt  rpm  gpg 

1
awkが予期せず文字列からドットを削除する
.csvファイルに列(2番目の場所)を追加し、その列の値を文字列にして引用符で囲みます。 次のコマンドは列を追加しますが、引用符は付けません。 awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv 次のアプローチは引用符を組み込んでいますが、何らかの理由で最後の.(ドット)を値から削除します awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv したがって、私の値は「2.40」になります。 これについてどうすればいいですか?
9 awk  csv 

1
Debian GNU / Hurdでのソースコードのコンパイルは、Debian GNU / Linuxとどのように異なりますか?
iptablesのコンパイル中にlibnetfilter_conntrackgithubからソースをコンパイルしようとしましたが、これらのいずれもHURDソフトウェアリポジトリで利用できず、構成中にエラーが発生しました。iptableslibnetfilter_conntrack checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no checking whether ln -s works... yes configure: error: Linux only, dude! そして私のカーネルは、 $ uname -a GNU debian 0.9 GNU-Mach 1.8+git20190109-486/Hurd-0.9 i686-AT386 …
9 debian  compiling  c  hurd 

6
stdinの最後の行をstdin全体に付加
次のスクリプトについて考えてみます。 tmpfile=$(mktemp) cat <<EOS > "$tmpfile" line 1 line 2 line 3 EOS cat <(tail -1 "$tmpfile") "$tmpfile" これは機能し、出力します: line 3 line 1 line 2 line 3 実際のファイルではなく、入力ソースが標準入力だったとしましょう。 cat <<EOS | # what goes here now? line 1 line 2 line 3 EOS コマンドを変更する方法: cat <(tail -1 "$tmpfile") "$tmpfile" それで、この異なるコンテキストで、同じ出力を生成しますか? …
9 bash 

1
ダッシュで始まるCLI引数とともに使用すると、ティルダ(〜)が展開しないのはなぜですか?
私はVNCサーバー(x0vncserver)を実行しようとして数時間を失い、クライアントは奇妙なメッセージで接続を拒否しました。 No password configured for VNC Auth サーバーもこのエラーを出力します SVncAuth: opening password file '~/.vnc/passwd' failed さて、チルダがシェルによってもx0vncserverによっても拡張されないことに気づくまで、私は多くの時間を無駄にしました。次に、これらのテストを実行しました $ echo --PasswordFile=~/.vnc/passwd --PasswordFile=~/.vnc/passwd だが $ echo PasswordFile=~/.vnc/passwd PasswordFile=/home/tichomir/.vnc/passwd 何故ですか?引数がダッシュで始まる場合、シェルがチルダの展開を拒否するのはなぜですか?チルドは引用されていない限り常に拡張すると思いましたが、明らかに別のルールが関係しているのでしょうか?
9 bash  shell  tilde 

2
典型的なシステムコールインターフェイスでは、ファイルのサイズを(別のiノードに置き換えることなく)削減できますか?
open()ファイルを縮小する方法はありますか?もちろん、それらを追加モードで開くか、最後まで検索して書き込み、それらを拡張させることができます。ただし、私が知る限り、一般的なUNIXスタイルのシステムコールインターフェイスを介してファイルを圧縮する方法はありません。 これを行う唯一の方法は、私の知る限り、新しい短いファイルを作成しrename()て古いファイルの代わりにそれを偽造することです。 新しいファイルを作成して名前を変更するプロセスを実行する代わりに、ファイルを直接操作するファイルエディターを作成することが可能であることを示唆する回答を見たので、私は確認だけを望みました。 私は、libcおよびunixスタイルのシステムコールインターフェイスのファイルapiでは、ファイルシステムの実装を容易にするためのファイルの縮小ができず、おそらく断片化に寄与する可能性のある使用パターンを回避できないと思っていました。

3
サポートされていない「ショップ」オプションが.bashrcでエラーを発生させないようにするにはどうすればよいですか?
さまざまなバージョンのBashをさまざまなHPCノード、VM、または個人用ワークステーションで実行している可能性がある、比較的異種の環境で作業しています。私はログインスクリプトをGitリポジトリに配置しているので.bashrc、「もしこのホストなら...」タイプの面倒さをあまり使わずに、同じように全面的に使用したいと思います。 私のようなバッシュ≤拡大し4.1のデフォルトの動作cd $SOMEPATHにcd /the/actual/path押したときにTabキーを。バッシュ4.2以上では、あなたがする必要があるだろうshopt -s direxpandし、この動作を再度有効にし、それが利用可能になっていませんでした4.2.29まで。ただし、これはほんの一例です。別の、おそらく関連するshoptオプションcomplete_fullquote(それが何をするのか正確にはわかりませんが)もv4.2でデフォルトの動作を変更した可能性があります。 ただし、direxpand以前のバージョンのBashでは認識されないためshopt -s direxpand、自分のを使用しようとする.bashrcと、古いBashのノードにログインするたびにエラーメッセージがコンソールに出力されます。 -bash: shopt: direxpand: invalid shell option name 私は何をしたいのは、条件付きの周りをラップでshop -s direxpandバッシュの旧バージョン(擦れずに、堅牢な方法でバッシュ> 4.1にそのオプションを有効にするには、すなわち、ちょうどにエラー出力をリダイレクトしません/dev/null)。

1
行内の違いのみを示す差分
2つのファイルの行を比較したいのですが、出力のノイズを最小限に抑えるために、実際の行の違いだけを印刷したいと思います。 たとえば、以下の2つのファイルがあるとします。 a.txt a b c d e f g h i j k l m n o p q r s t u v w x y z b.txt a B c d e f g h i j k l m n o p q r s t …

1
2つのプログラムからのstdoutのリダイレクト
私はC ++コード(prog2)でメモリチェックツール(prog1)を実行しています。どちらの方法でも、膨大で詳細な出力が得られます。いくつかのバグを追跡するために、この出力をファイルに保存する必要があります。 stdoutをファイルにリダイレクトしてみました: prog1 prog2 > outfile.txt しかし、それによってprog2の出力を含むファイルが得られますが、prog1の出力はまだターミナルに送られます。 誰もが両方の出力をファイルに移動するように指定する方法を知っていますか?のように(prog1 prog2) > outfile.txt?

1
/ dev / tcp特殊ファイルを実際に提供しているUnixライクなシステムはどれですか?
/dev/tcp/<host>/<port>リダイレクトの一部のシェルによって具体的に処理される魔法のパスは知っています。しかしによるとman bash: bashが実行されているオペレーティングシステムがこれらの特殊ファイルを提供する場合、bashはそれらを使用します。そうでなければ、それは内部でそれらをエミュレートします[...] 現在使用しているLinuxボックスでは、/dev/tcp特殊ファイルが存在しないため、Bashがそれをエミュレートします。しかし、実際には/dev/tcp、Bashでサポートされているものと同じセマンティックを持つ特殊ファイルを提供するUnixライクなシステムはありますか?

3
アンパサンドを「可変化」する(プロセスのバックグラウンド)
アンパサンドを変数に入れ、それを使用してプロセスをバックグラウンドに送信する方法があるかどうかを知りたいです。 これは機能します: BCKGRND=yes if [ "$BCKGRND" = "yes" ]; then sleep 5 & else sleep 5 fi しかし、これら5つのラインを1つだけで達成するのはクールではないでしょうか。そのようです: BCKGRND='&' sleep 5 ${BCKGRND} しかし、それはうまくいきません。BCKGRNDが設定されていない場合は機能しますが、設定されている場合はリテラル「&」として解釈され、エラーになります。

5
systemd / initがない場合(たとえば、init = / bin / bashを使用する)に電源をオフにする方法は?
poweroffDBusを介してsystemdに接続できないと文句を言います(もちろん、生きていません)。私はにsync続いてkill $$、pid 1が死ぬとカーネルの電源が切れるのではないかと思ったが、カーネルパニックが発生した。次に、電源ボタンを押し続けて電源を強制的にオフにしました。 このシナリオで電源を切る最も適切な方法は何ですか?

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