Unix & Linux

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

1
$ @のパラメーター展開はshシェルでサポートされていませんか?
私はAUに関する質問への回答を投稿しました$@が、shシェルでのパラメーター展開が機能しないことがわかりました。 <infile xargs -d'\n' sh -c 'echo "${@%%/*}"' _ しかし、それはで正常に動作しbashます。これはshシェルの予想される動作ですか、そこでシェルを拡張するにはどうすればよいですか? さらに、-n1オプションでxargs一度にコマンドに渡すことができるのは1行だけであることはわかっていますが、sh展開できるかどうかに興味がありました$@。 <infile xargs -d'\n' -n1 sh -c 'echo "${0%%/*}"' infile 含む: A1 /B1/C1 A 2/B2/C2 A3/B3/C3
8 bash  shell  dash 


2
xtermのスクロールバックバッファーにファイルとしてアクセスする
どういうわけか、xtermのスクロールバックバッファーに(読み取り専用)ファイルまたはキャラクターデバイスとしてアクセスできますか? 中心的な問題(x / yの「問題」を回避するため)は次のとおりです。実行したばかりのコマンドが非決定的な出力を生成することがあり、その出力をT型にすることを事前に考えずに何らかの方法で使用したい場合があります。 。現在、これを行う唯一の方法(私が承知していること)は、マウスを使用してテキストを選択し、1次選択することです。
8 xterm 

2
dmesgで何かが見つかった場合にプロセスを強制終了する無限ループを作成するにはどうすればよいですか?
一部またはすべての値を返すwhile場合dmesgは、決定されたプロセスを強制終了するループを作成する必要があります。 これが私が持っているものです。 #!/bin/bash while [ 1 ]; do BUG=$(dmesg | grep "BUG: workqueue lockup" &> /dev/null) if [ ! -z "$BUG" ]; then killall someprocessname else break fi done 代わりに! -zやるべきかわからない[ test -n "$BUG" ] -nを使用すると、バイナリを期待することについて何かが示されます。 BUGのロックアップがすべてのプロセスを停止するため、スクリプトが機能するかどうかはわかりませんがdmesg、コンピューターが完全に停止するまでにはまだ数行あります。おそらく、追いつき、プロセスを強制終了できます。
8 linux  bash  scripting 

2
DebianまたはUbuntuにパッケージをインストールする前に、複数の依存関係が存在するかどうかを確認します
次のコマンドを実行することで、パッケージをDebianまたはUbuntuにインストールするために必要な複数の依存関係がリポジトリに存在するかどうかを確認できることはすでに知っています。 apt policy first-package second-package ... last-package このコマンドは、各パッケージが現在インストールされているかどうかも通知します。 私の質問は、現在インストールしていないサポート対象バージョンのDebianまたはUbuntuに複数の依存パッケージが存在するかどうかをすばやく確認する方法です。そのOSが現在インストールされていないため、依存関係パッケージがローカルとオフラインに存在するかどうかを確認できませんが、必要な依存関係パッケージが端末からデフォルトのリポジトリに存在するかどうかを確認したいと思います。 この情報の用途の1つは、Ubuntuにインストールされているアプリケーションが最新バージョンのUbuntuにもインストールできるかどうかを確認してから、最新バージョンのUbuntuをインストールするか、既存のOSを最新バージョンにアップグレードすることです。

3
メディアキーをi3で使用するにはどうすればよいですか?
私はGnomeからManjaroのi3に移動しました。ウィンドウマネージャー、端末の色などの設定はほぼ完了です。しばらくして、音楽を聴くことに決めました。数分後、音量キーと再生キーが機能しないことに気付きました。 私はRazer Blackwidow Stealth 2014キーボードを持っているので、これらのメディアキーは実際にはファンクションキーと一緒になっています。例:再生/一時停止がオンF6でFn、のようにキーを押すと、メディアキーとして機能しFn + F6ます。

2
少ないページャーでファイルの終わりを超えてスクロールすることは可能ですか?
下部を下にスクロールすることは可能ですか? 理想的には、私は(画面の残りの部分は(チルダで充填することができる私は、ターミナルウィンドウの上部に表示していますファイルの最後の行を見ることができるようにしたいのですが~その平均が、)空白行/何もここを参照してくださいしないように以下で)。
8 less  scrolling  pager 

2
tbzファイルへのファイルの追加
何千もの.tbzアーカイブファイルを更新する方法を探しているので、これをシェルスクリプトで実行します。それぞれに1つのファイルを追加する必要があります。 私の質問は、各tbzの内容を抽出せずに、含まれているtarに含まれている新しいファイルで再圧縮することなく、これを行うより速い方法はありますか?コマンドはどのように見えますか? ありがとう

2
Windowsクライアントは、10秒以下の間隔でファイルを読み取る場合、Linux sambaファイルをローカルで更新しません
WindowsクライアントにLinux smb共有上のファイルを10秒以下の間隔で読み取らせた場合、Windowsクライアントはそのファイルの誤った(キャッシュされた?)情報を表示します。 これを複数のシステムで再現しました。 再現する手順の例: 1)Linux samba共有をセットアップします-この例では、Debianを使用してsambaをインストールします。例: sudo mkdir /test sudo chmod 777 /test smb.confの追加: [test] read only = no locking = no path = /test/ guest ok = yes 2)このディレクトリをWindowsクライアントのドライブとしてマップします(このテストではL:を使用します)。 3)Sambaサーバー上にテキストを含むファイルを作成します nano /test/test.txt ORIGINAL 4)Windowsマシンでシンプルなバッチファイルを作成し、5秒ごとにファイルを表示します。 copy con test.bat @echo off cls :1 type L:\test.txt timeout 5 goto 1 5)バッチファイルを実行します。5秒ごとにORIGINALと表示されます。 6)Linuxサーバーでファイルの内容を変更する …

1
カーネルに断片化されたメモリを圧縮させる方法
私は走っていFedora 26ます。 これは、アルゴリズムの教授から与えられた非常に奇妙な割り当てです。割り当ては言う: Cでのメモリの断片化: 以下を実行するCプログラムを設計、実装、および実行します。これは、3mそれぞれ800,000要素のサイズの配列のシーケンスにメモリを割り当てます。次に、すべての偶数番号の配列を明示的に割り当て解除し、mそれぞれサイズが900,000要素の配列のシーケンスを割り当てます。プログラムが最初のシーケンスの割り当てと2番目のシーケンスの割り当てに必要な時間を測定します。mプログラムで使用できるメインメモリのほぼすべてを使い果たすことを選択してください。」 これの全体的な目標は、メモリを断片化してから、連続したチャンクとして利用できる量よりもわずかに多くを要求し、オペレーティングシステムにメモリの最適化または最適化を強制することです。 クラスでは、メモリが視覚化されており、実際には隣接していないため、これをどのように行うべきかを尋ねました。彼は「[仮想メモリ]をオフにする必要があります」と答えました。他の何人かの学生は、クラスでこの「ガベージコレクション」に到達したときにどのように知るべきかを尋ね、彼は次のように述べました。 少し調べたところ、仮想メモリを無効にするのに最も近いのは、でスワップメモリ​​を無効にすることでしたswapoff -a。デスクトップ環境を無効にして、ネイティブターミナルからプログラムをコンパイルして実行しました(他のプロセス、特にデスクトップ環境のような重いプロセスからの干渉を避けるため)。私はこれをm行い、2番目の割り当てのタイミングが最初の割り当てよりも大きくなるポイントに到達するまで、プログラムを増やしながら実行しました。 私は増加してプログラムを実行し、m最終的に2番目の割り当ての時間が最初の割り当ての時間よりも多くなるポイントを見つけました。しかし途中で、2番目の割り当ての前にプロセスが強制終了されるポイントに到達しました。私dmesgはそれをチェックして、それがoom-killer によって殺されたことを確認しました。私はoom-killer に関するいくつかの記事を見つけて読み、カーネルによるメモリの過剰割り当てを無効にできることを発見しました。 私はこれを実行してプログラムを再度実行しましたが、今回のみm、2番目のタイミングが最初のタイミングよりも高いようなものを見つけることができませんでした。結局、mを大きくすると(割り当て超過が有効になっている場合よりもはるかに小さくなりますが)、mallocが失敗し、プログラムが終了します。 3つの質問があります。最初の質問はそれほど重要ではありません。 ガベージコレクションはこれの正しい用語ですか?私の教授はこれはガベージコレクションであると言っていますが、ガベージコレクションはプログラミング言語によって行われるものであり、これはより最適化されていると考えられると思い込んでいました。 Linuxシステムで彼が望んでいるような圧縮は可能ですか? スワップを無効にしても、メモリの割り当て超過が有効になっているときに、2番目の割り当ての時間が最初の割り当てよりも長くなる点に到達できたのはなぜですか?圧縮は実際に行われましたか?もしそうなら、メモリの割り当て超過を無効にした後、圧縮が発生するポイントに到達できなかったのはなぜですか?

2
変数に改行が含まれているかどうかをテストします(POSIX)
一部のシェルはこの種のテストを受け入れることを知っています: t() { [[ $var == *$'\n'* ]] && res=yes || res=no printf '%s ' "$res"; } var='ab cd' t var='abcd' t echo 実行時: $ bash ./script yes no POSIX(ダッシュ)と同等の機能とは 以下は信頼できるテスト方法ですか? nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' …

2
Linuxは、インターフェイスにfe80 :: / 64アドレスを割り当てます。それはfe80 :: / 10であるべきではありませんか?
LinuxはIPv6標準に従って、IPv6リンクローカルアドレスをインターフェイスに割り当てます。これらのインターフェイスには常に/ 64アドレスが割り当てられます。これは正しいです?私は彼らが/ 10でなければならないだろうと思います。/ 64アドレスが割り当てられるのはなぜですか?

1
Bash:ファイルにリダイレクトし、常に新規に作成します
bashでは、コマンドリンク echo test > actual.txt 呼び出されたファイルの内容actual.txtを「test」で置き換え、ファイルが存在しない場合は作成します。ただし、ファイルが存在する場合、bashはそれを開き、切り捨てて、新しい内容をファイルに書き込みます。 具体的には、リダイレクトコマンドはこのシナリオで失敗します。 ln -s /some/illegal/path link.txt echo test > link.txt Bash 4.4.12を使用すると、紛らわしいエラーメッセージが表示されますlink.txt: No such file or directory。 これを回避する1つの方法は、リダイレクトされたコマンドを実行する前に、必ずファイルを削除することです。 rm link.txt && echo test > link.txt しかし、この失敗モードを防ぐbashオプションまたはリダイレクト演算子の微調整があるかどうか疑問に思っていました。何か案は?

2
grub2 configからのコマンド「exec tail -n +3 $ 0」にはどのようなロジックがありますか?
カスタムメニューエントリを作成すると、次のコマンドが表示されなくなります。 exec tail -n +3 $0 ターミナルで試してみましたが、奇妙な結果になり、理解できません。このコマンドが正確に何をするのか、なぜgrubがそれを必要とするのか理解できません。説明して頂けますか?
8 shell  grub2  tail  exec 

1
Virtual Machine Managerはウェイランドでショートカットを何度も禁止したいと考えています
最近、ワークステーションをFedora 27で再インストールしました。それ以来、virt-managerは1つの奇妙なことをしています。 VMコンソールを開いてマウスをウィンドウに移動するたびに、ダイアログが表示され、次のメッセージが表示されます。 Virtual Machine Managerがショートカットを禁止したい Super + Escapeを押すとショートカットを復元できます。 [拒否]をクリックするか[許可]をクリックするかは関係ありません。どちらの場合も、Ctrl+ などのキーを押すWと、VMに送信されるのではなく、virt-managerによって処理されます。その場合、たとえば、編集中の行の単語を削除する代わりに、ウィンドウが閉じます。 Fedora 27にあるマシンを再インストールする前は、このダイアログボックスは表示されませんでした。 virt-managerに関して行ったことを思い出すことができる唯一の変更は、ユーザーがパスワードなしでシステム仮想マシンを管理できるようにするPolicyKitルールを追加することです。 # cat /etc/polkit-1/rules.d/51-org.libvirt.unix.manage.rules polkit.addRule(function(action, subject) { if (action.id == "org.libvirt.unix.manage" && subject.user == "error") { return polkit.Result.YES; polkit.log("action=" + action); polkit.log("subject=" + subject); } }); これらは私が現在持っているパッケージのバージョンです: # rpm -q libvirt-daemon virt-manager libvirt-daemon-3.7.0-3.fc27.x86_64 virt-manager-1.4.3-2.fc27.noarch もう1つの違いは、今はWaylandにいるということですが、以前はXを使用していました。「Xorg上のGnome」でログインすると、問題はなくなります。 この無用なダイアログがWaylandの下に表示されないようにして、Ctrl+ などのコマンドキーWをvirt-managerで処理せずにVMに送信するにはどうすればよいですか?

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