最新記事

ダイアログボックス(ncurses)の最小用語機能のリストはありますか?
terminal
ncurses
dialog
terminfo
termcap

ダイアログボックス(ncurses)の最小用語機能のリストはありますか?

ncursesダイアログライブラリ(どこでも利用可能)を使用しようとしています。ソースミラーはこちら)、ダイアログボックスを使用するか、stdin / out / errがcharブロックデバイス、ttys、およびどのtermcapsに接続されているかによって、stderrとプロンプトで印刷するかどうかをコードで動的に決定します。私は less で正しくレンダリングできるかどうかを検出するのにかなり信頼できるコードを盗み、termcaps ce、cd、cland cm、または を探して、そうhoでなければll愚かなモードに切り替えます。ただし、lessの要件はダイアログボックスより低くなる可能性があります(多く?)(少なくともyesnoボックスのみが必要です)。ダイアログやncursesに大文字を確認せずに端末に問題を処理できるかどうか尋ねる方法がなく、大文字がないとinitscrが失敗することに少し驚きました。 Emacsシェルのダイアログボックス(ansi-termではなく、obvsではうまく機能します)は意味のないテキストだけを吐き出し、愚かな端末(通常のxtermと同じ)なので、ここで進む機能は明らかにありません。alsrexport TERM=dumb 私はほとんどの場合UNIXプログラマーではありません。これを行う信頼できる標準的な方法はありますか?私を変に考えるのは、これが確認しやすいことではないということです。 明らかに、ダイアログを介してコードを書いて、それが呼び出すすべてのncursesエントリを記録しようとするかもしれませんが、それは痛いので、どこかで端末の機能要件の明確なリストを見つけることができないことを願っています。 修正する:だから私は「yesno」ダイアログをどれだけうまく得ることができるかをテストするために独自のカスタムterminfoエントリを作成することにしました。サイズが非常に小さいので、テストの数を減らす方が良いです。これを行う方法を理解するのは難しいです。したがって、THE FUTUREの他の人が簡単に要約した内容は次のとおりです。 以下はtermcap定義です。問題を特定する必要があります。 terminfo定義を使用していくつかの手順をスキップすることができますが、lessなどの古いソフトウェアはtermcapバージョンを使用しているため、そのスペースで作業する方が簡単です。 dialog --title Hi --yesno There 0 0現在ターミナル(またはncurses)で実行されているncursesアプリケーションがあるとし、TERM envvarが何であるかを調べてください。私は画面とemacs ansi-termで作業しているので、もちろんテストscreen中です。eterm-colordumb 作業したいバージョンのダンプを使用します(新しいバージョンが作業バージョンのサブセットになりたいのでテストを実行しています)。infocmp eterm > eterm2.infoこれにより、そのバージョンで使用したい情報が提供されます。 キャップに変えてinfotocap eterm2.info > eterm2.cap 内部を見て、次のように警告なしにほとんど実行されない最小限の制限ファイルであるかのように切り取ります。 # hacked eterm for testing dialog eterm2|gnu emacs term.el terminal emulation:\ :am:mi:xn:\ :co#80:li#24:\ :ce=\E[K:cd=\E[J:cl=\E[H\E[J:\ :ho=\E[H:\ :cm=\E[%i%d;%dH:\ :al=\E[L: 最初は名前もeterm2に変更しました。 再び情報に変換captoinfo eterm2.cap > eterm2.info mkdir infodbこのテスト情報がコンパイルされるローカルディレクトリを作成します。 export TERMINFO=$(pwd)/infodbtermcap / terminfoで見つけることができる場所を教えてください。 tic -Dローカルディレクトリを最初に出力する必要があります。 tic -s eterm2.infoこのディレクトリにコンパイルしてください export TERM=eterm2新しいハッカー端末の設定 ncurses アプリケーションを実行します。それ以外の場合は、dialog --title Hi --yesno There 0 0単に白黒で表示する必要があります。 他のコマンドを再度追加して変更を確認できますが、完了したらすべてがrm -rf infodb正しく実行されていることを確認してくださいexport TERMINFO=。export TERM= アップデート2: これは私が完成したコードであり、すべてのテストで動作するようです。 if(TermMode == TERM_UNINITIALIZED) { struct stat s; if((isatty(STDOUT_FILENO) && (fstat(STDOUT_FILENO,&s) == 0) && S_ISCHR(s.st_mode)) && (isatty( STDIN_FILENO) && (fstat( STDIN_FILENO,&s) == 0) && S_ISCHR(s.st_mode))) { // both stdout and stdin are char block device ttys, now check termcaps // mostly stolen from the gnu less source code, since it seems robust // https://github.com/gwsw/less/blob/22e4af5cccbfab633000c7d610f868a868ad6e1a/screen.c#L1280 char termbuf[2048]; char const* term = getenv("TERM"); int const TGETENT_OK = 1; if(tgetent(termbuf,term) == TGETENT_OK) { char sbuf[2048]; char* sp = sbuf; char* sr = 0; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wwrite-strings" // ce ce cl are required if((sr = tgetstr("ce",&sp)) && *sr && // eol clear (sr = tgetstr("cd",&sp)) && *sr && // eos clear (sr = tgetstr("cl",&sp)) && *sr) // screen clear { // cm or (ho and ll) if(((sr = tgetstr("cm",&sp)) && *sr) || // cursor move (((sr = tgetstr("ho",&sp)) && *sr) && // home ((sr = tgetstr("ll",&sp)) && *sr))) // lower left { // al or sr if(((sr = tgetstr("al",&sp)) && *sr) || // add line ((sr = tgetstr("sr",&sp)) && *sr)) // scroll reverse { // we've got what we need for ncurses dialog! TermMode = TERM_DIALOG; goto term_detected; } } } #pragma GCC diagnostic pop } // we're at least connected to a tty TermMode = TERM_STDIO; } else { // no interaction, so gotta just abort TermMode = TERM_ABORT; } term_detected: ; } とにかく、最小のタンクキャップが何であるかを知ることはまだ良いですが、少なくとも上記のものは作業負荷を軽減するので使用します。 ありがとう、クリス

Admin

ffmpegフレーム間のスムーズな切り替え
ffmpeg

ffmpegフレーム間のスムーズな切り替え

フレームレートの低い動画(1~3)があります。 30fpsの動画を作るのに使いたいです。適切なビデオフィルタを検索してください。これは、動き補間ではなく、隣接する2つのフレームの対応するピクセル間補間である。そのため、ffmpegを介してフレーム間のシームレスな切り替えを提供する29個のフレームを受信したいと思います。

Admin

このポートはどのシステムサービスを使用しますか?
systemd
port

このポートはどのシステムサービスを使用しますか?

systemdを使用するプログラムをインストールしました sudo netstat -lntp | grep 10700 tcp 0 0 127.0.0.1:10700 0.0.0.0:* LISTEN 2444/systemd tcp6 0 0 ::1:10700 :::* LISTEN 2444/systemd このプロセスをsystemdと呼びます。 ps aux | grep 2444 asd 2444 0.0 0.0 20124 10836 ? Ss Jan28 0:04 /lib/systemd/systemd --user プロセスを確認したり、少なくともそのポートを使用してシステムサービス名を解決したりできるコマンドは何ですか? 注:私がインストールしたいプログラムはedgedbです。 edgedb instance list ┌───────┬──────┬───────┬─────────────┬────────┐ │ Kind │ Name │ Port │ Version │ Status │ ├───────┼──────┼───────┼─────────────┼────────┤ │ local │ foo │ 10700 │ 2.9+b1d697b │ ready │ └───────┴──────┴───────┴─────────────┴────────┘ どのプロセスが作成されているかを知る必要がありますsudo ps aux | grep edge(またはfooまたはpostgresは何も表示しないため) 修正する:ああ、明らかにpostgresは、edgedbクライアントコマンドが実行されたときにのみ生成されます。 ps aux | grep postgres asd 912323 0.0 0.0 372924 107732 ? SN 04:15 0:00 /home/asd/.local/share/edgedb/portable/2.9/bin/postgres -D /home/asd/.local/share/edgedb/data/foo -c listen_addresses= -c unix_socket_permissions=0700 -c unix_socket_directories=/run/user/1000/edgedb-foo -c max_connections=1289 -c max_locks_per_transaction=256 -c log_min_messages=NOTICE -c log_statement=none -c log_line_prefix= asd 912325 0.0 0.0 372924 3548 ? SNs 04:15 0:00 postgres: checkpointer asd 912326 0.0 0.0 373260 9664 ? SNs 04:15 0:00 postgres: background writer asd 912327 0.0 0.0 372924 8944 ? SNs 04:15 0:00 postgres: walwriter asd 912328 0.0 0.0 374508 7844 ? SNs 04:15 0:00 postgres: autovacuum launcher asd 912329 0.0 0.0 71644 4944 ? SNs 04:15 0:00 postgres: stats collector asd 912330 0.0 0.0 374232 5992 ? SNs 04:15 0:00 postgres: logical replication launcher asd 912335 0.0 0.0 386380 44756 ? SNs 04:15 0:00 postgres: postgres V2f147ded60___edgedbsys__ [local] idle asd 912337 0.0 0.0 401464 66444 ? SNs 04:15 0:00 postgres: postgres V2f147ded60_edgedb [local] idle edgedb instance list ┌───────┬──────┬───────┬─────────────┬─────────┐ │ Kind │ Name │ Port │ Version │ Status │ ├───────┼──────┼───────┼─────────────┼─────────┤ │ local │ foo │ 10700 │ 2.9+b1d697b │ running │ └───────┴──────┴───────┴─────────────┴─────────┘ しかし、将来、どのシステムファイルがそのポートを使用しているかをどのように知ることができるかについての質問が残っています。

Admin

ドライブ全体のラベルとUUIDを設定するには?
linux
partition
parted

ドライブ全体のラベルとUUIDを設定するには?

一部のドライブでは、ドライブレベルにタグとUUIDが割り当てられていることがわかりました。 $ lsblk -dno PATH,LABEL,UUID /dev/sda SYSTEM 2019-02-12-05-40-19-00 /dev/sdb # No label & UUID /dev/sdbに対してこの値をどのように設定/変更しますか?どちらのドライブもGPTに分割されています。

Admin

rsyncを使用してNASから外付けハードドライブに新しいファイルをコピーする
bash
shell
rsync
file-copy

rsyncを使用してNASから外付けハードドライブに新しいファイルをコピーする

NASから外付けハードドライブに新しいファイルをコピーしたいです。これまでは、新しいファイルを手動でコピーしました。それではスクリプトを使ってそれを自動化したいと思います。しかし、これまでrsyncを使って試したことはすべて、新しいファイルだけでなくすべてのファイルをコピーするようです。次のコマンドを試してみました。 rsync -ar \ --ignore-existing \ --size-only \ --progress --info=progress2 \ --dry-run \ "/Volumes/NAS" "/Volumes/G-DRIVE mobile SSD R-Series" また、サイズだけでなくチェックサムなども使ってみました。誰かが私にこれらの行動や私の仕事をするために何をすべきかを説明してもらえますか?統計を印刷すると、常にすべてのファイルを転送するように表示されます。また、-iパラメーターを使用すると、各ファイルについて以下の情報を取得できます。 >f++++++++++

Admin

バイナリファイルをサイズ別に分割する最新の技術は何ですか?
history
split

バイナリファイルをサイズ別に分割する最新の技術は何ですか?

スキップ可能ないくつかの背景 約20年前、Web検索の費用がかかった時、Windows専用ユーザーだった時、CD/DVDが大容量記憶手段であり、友人や親戚とビデオファイルを共有するときにファイルを複数にコピーするには分割が必要な時もありました。 CD / DVDを別のコンピュータにコピーし、クリップを再結合するために使用しました。HJスプリット。魅力のように動作します。 やる気 scp20年が過ぎた今、私は最近Linuxでこれらのユーティリティが必要であることに気づきました。接続が遅いか信頼できないため、物理的に離れているLinuxシステム間でデータを簡単に転送できなかったためです。私が思いついた解決策は、ファイルを分割して部分を転送して再結合することでした。 これがHJSplitがWindowsでのみ機能することがわかった理由です。lxsplit存在し、魅力のように動作するので、すべて良いです。 私の質問 しかし、lxsplit2008年以降に廃棄されたため、15年間に別の(より良い?)ソリューションが登場した可能性があります。 Linuxでは、この領域(大容量のバイナリファイルの分割と再マージなど)の最先端の技術は何ですか? 追加のやる気 また、概念的にファイルを分割して再結合するのは非常に簡単な作業だと思います。私はそれを試して数時間以内に何かを得ましたが、少なくともlxsplit。lxsplit (1)2つのシステム間で大容量ファイルを転送する元のジョブの代替ワークフローには興味がありません。はい、今日はあるシステムからDropbox / Onedrive / GoogleDriveなど何でもアップロードし、別のシステムからダウンロードできます。

Admin

ソース IP アドレスを維持しながら DNAT パケットを送信できません。
linux
debian
iptables
routing
openvpn

ソース IP アドレスを維持しながら DNAT パケットを送信できません。

私は2台のDebianコンピュータを持っています。1つはプロキシに設定され、もう1つはルータに設定されています。ルーターと呼びます。私の目標は、DNATパケットがProxy1のWANからOpenVPNトンネルを介してルーターに移動することです。ルーターとプロキシ1はどちらもインターネットにアクセスでき、異なるWAN IPを持ち、別々のシステムです。 Proxy1 には次の規則があります。 iptables -t nat -A PREROUTING -m tcp -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ip route add 10.0.0.2/32 dev tun0 Proxy1とルータで「tcpdump -s 0 -w tcpdump.log -i any」を実行すると、パケットがWANから来ていることがわかります。 この問題の最も奇妙なことは、MASQUERADEルールを次のように変更することです。 iptables -t nat -A POSTROUTING j MASQUERADE その後、DNATが適用され、パケットがルータに表示されます。ただし、マスカレーディングはパケットの送信元アドレスを変更するため、ルータは最終送信元 IP を認識できません。ソース アドレスが 10.0.1.2 に変更された場合、パケットがルータに到達しますが、ソース アドレスが維持されている場合、パケットがルータに到達しない理由は理解できません。 代理人情報: Debian GNU/Linux 8 (提示) カーネルバージョン: Linux 3.16.0-4-amd64 x86_64 プロキシIP:202.89.75.110 Proxy1で「ip Route get 10.0.0.2」を実行すると、次のものが返されます。 10.0.0.2 dev tun0 src 10.0.1.2 cache Proxy1で「ip link; ip -4 address; ip -4 Route; ip -4 rule」を実行した結果: 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3c:95:70:75 brd ff:ff:ff:ff:ff:ff 5: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100 link/none 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet x.x.x.x/25 brd x.x.x.127 scope global eth0 valid_lft forever preferred_lft forever 5: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 inet 10.0.1.2/29 brd 10.0.1.7 scope global tun0 valid_lft forever preferred_lft forever default via x.x.x.1 dev eth0 10.0.0.2 dev tun0 scope link 10.0.1.0/29 dev tun0 proto kernel scope link src 10.0.1.2 x.x.x.0/25 dev eth0 proto kernel scope link src x.x.x.x 0: from all lookup local 32765: from all fwmark 0x65 lookup 101 32766: from all lookup main 32767: from all lookup default ルータに関する情報は次のとおりです。 Debian GNU/Linux 10(スポイラー) カーネルバージョン: Linux 4.19.0-6-amd64 x86_64 ルーターIP:71.115.98.227 ルータで「ip link; ip -4 address; ip -4 Route; ip -4rule」を実行した結果: 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp2s0: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 70:85:c2:d5:84:96 brd ff:ff:ff:ff:ff:ff 3: eno1: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 70:85:c2:d5:84:94 brd ff:ff:ff:ff:ff:ff 4: tun1: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100 link/none 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: enp2s0: mtu 1500 qdisc mq state UP group default qlen 1000 inet 10.0.0.1/24 brd 10.0.0.255 scope global enp2s0 valid_lft forever preferred_lft forever 3: eno1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 71.115.98.227/21 brd 71.115.105.255 scope global dynamic eno1 valid_lft 38916sec preferred_lft 38916sec 4: tun1: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 inet 10.0.1.1/29 brd 10.0.1.7 scope global tun1 valid_lft forever preferred_lft forever default via 71.115.98.1 dev eno1 10.0.0.0/24 dev enp2s0 proto kernel scope link src 10.0.0.1 10.0.1.0/29 dev tun1 proto kernel scope link src 10.0.1.1 71.115.98.0/21 dev eno1 proto kernel scope link src 71.115.98.227 0: from all lookup local 32765: from all fwmark 0x65 lookup 101 32766: from all lookup main 32767: from all lookup default ルータの「ipルートリストテーブル101」の出力: default via 10.0.1.2 dev tun1 ルータには、これらのパケットをサーバに送信する次の規則があります。 iptables -t nat -A PREROUTING -m tcp -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80 iptables -P FORWARD ACCEPT 10.0.0.2 のサーバはルータの LAN にあります。ルータで転送をイネーブルにします。ルータはLANのゲートウェイです。 cat /proc/sys/net/ipv4/ip_forward 1を返す 新しい openvpn サーバー構成は次のとおりです。 dev tun1 port 1194 proto udp4 ifconfig 10.0.1.1 10.0.1.2 secret static_p1.key Proxy1 の新しい openvpn クライアント構成は次のとおりです。 remote 71.115.98.227 1194 udp dev tun0 ifconfig 10.0.1.2 10.0.1.1 script-security 2 route-up /etc/openvpn/proxyroute.sh secret static_p1.key

Admin

root以外のユーザーがTunデバイスを作成できるようにする方法
networking
network-interface
udev

root以外のユーザーがTunデバイスを作成できるようにする方法

プログラムを作業していて、プログラムを開いて/dev/net/tun公開する必要がありioctl()ますが、rootがない場合は権限が拒否されます。適切なudevルールがこの問題を解決するのに役立つと思います。/etc/udev/rules.d/my_net_tun.rulesそのルールを使用してファイルに新しいudevルールを作成し、udevルールをKERNEL=="tun", MODE="0666", SYMLINK+="static_node=net/tun"再ロードしようとしましたが、権限はまだ拒否されました。私の考えでは、私のルールに何か問題があると思います。この問題をどのように解決できますか?

Admin

他のサービスが再ロードされたときに開始するように systemd サービスを構成する
systemd

他のサービスが再ロードされたときに開始するように systemd サービスを構成する

ワンタイムサービスBのユニット構成でWantedBy = installディレクティブとBefore =ユニットディレクティブを使用すると、他のサービスAが(再)起動したときにBを開始できます。しかし、Aがリロードされる前に起動するようにB.serviceを設定する方法がわかりません。 ReloadPropagatedFrom =ディレクティブを見てみました。これは、A.serviceを再ロードするとB.serviceが起動するのではなく、B.serviceが再ロードされることを意味します。

Admin

スナップを使用してGimpをインストールして実行する方法[閉じる]
terminal

スナップを使用してGimpをインストールして実行する方法[閉じる]

閉鎖。この質問には詳細または明確性。現時点では回答は許可されていません。 この質問を改善したいですか?詳細を追加して質問を明確にしてください。この記事を編集してください。 閉鎖3年前。 この問題を改善する 私が欲しい: ユーザーにsnapがインストールされているかどうか尋ねます。スナップショットをインストールして終了するスクリプトを実行しない場合は、続行します。 gimpをインストールした後、gimpのインストールが完了したことを知らせるメッセージが表示されます。 ユーザーにGIMPを実行するかどうか尋ねます。その場合はgimpを実行し、そうでない場合はスクリプトを終了してください。

Admin

WSLのUbuntuで.pemファイルに対する正しい権限をどのように設定しますか?
chmod
windows-subsystem-for-linux

WSLのUbuntuで.pemファイルに対する正しい権限をどのように設定しますか?

実行中で、Ubuntu 20.04 LTS既存のWSLファイルを使用して.pemSSHを介してリモートシステムに接続しようとしていますWindows Terminal。最初はファイルに無効なアクセス権があり、SSHで拒否されました(記録によると)。 構成アクセスを使用しようとすると、chmodエラーメッセージは表示されませんが、必要なものを取得できません(ユーザーへの読み取りアクセスのみ可能)。 tim@unit:/mnt/c/Users/tim/OneDrive/Keys$ chmod -v 0400 InitialKeyPair.pem mode of 'InitialKeyPair.pem' changed from 0555 (r-xr-xr-x) to 0400 (r--------) tim@unit:/mnt/c/Users/tim/OneDrive/Keys$ ls -l InitialKeyPair.pem -r-xr-xr-x 1 tim tim 1704 Feb 24 12:24 InitialKeyPair.pem どうなりますか?

Admin