Unix & Linux

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

5
実行前にシェルスクリプト全体を読み取る方法
通常、scrpitを編集する場合、スクリプトの実行中の使用はすべてエラーになりやすいです。 私の知る限り、bash(他のシェルも?)はスクリプトをインクリメンタルに読み取ります。したがって、スクリプトファイルを外部で変更すると、間違ったものの読み取りを開始します。それを防ぐ方法はありますか? 例: sleep 20 echo test このスクリプトを実行すると、bashは最初の行(10バイトなど)を読み取り、スリープ状態になります。再開すると、スクリプトには10​​バイト目から異なる内容が含まれることがあります。新しいスクリプトの行の途中にいる可能性があります。したがって、実行中のスクリプトは壊れます。
35 shell 

6
ルート権限でプログラムでファイルに書き込むための最も安全な方法は何ですか?
巨大なアプリケーションは、ある特定の時点で、ルート権限を必要とするファイルへの少数の書き込みを実行する必要があります。実際にはファイルではなく、ファイルとしてLinuxに公開されるハードウェアインターフェイスです。 アプリケーション全体にルート権限を付与しないようにするために、重要なタスクを実行するbashスクリプトを作成しました。たとえば、次のスクリプトは、出力としてハードウェアインターフェイスのポート17を有効にします。 echo "17" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio17/direction しかし、suid私のシステムのbashスクリプトでは無効になっているため、これを達成するための最良の方法は何でしょうか。 ここに提示されている回避策を使用してください sudoメインアプリケーションからを使用してスクリプトを呼び出し、それに応じてsudoersリストを編集して、スクリプトの呼び出し時にパスワードを要求しないようにします。にsudo権限を付与するのは少し不快ですecho。 でCプログラムを作成しfprintf、suid rootに設定します。文字列とファイル名をハードコーディングし、rootのみが編集できることを確認してください。または、テキストファイルから文字列を読み取り、同様に誰もファイルを編集できないようにします。 私が思いつかなかった他の解決策は、上記のものよりも安全または簡単ですか?

4
uniq --uniqueが存在するほどuniqが一意でないのはどうしてですか?
pastebinからのランダムファイルのコマンドは次のとおりです。 wget -qO - http://pastebin.com/0cSPs9LR | wc -l 350 wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l 287 wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l 287 wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l 258 -uフラグが何をしているのかについてのマニュアルページは明確ではありません。何かアドバイス?
35 uniq 

10
ファイルを「バイナリ」または「テキスト」として分類する便利な方法はありますか?
標準のUnixユーティリティはgrep、diffヒューリスティックを使用して、ファイルを「テキスト」または「バイナリ」として分類します。(たとえば、grep出力にはのような行が含まれる場合がありますBinary file frobozz matches。) zsh同様の「テキスト/バイナリ」分類を実行するためにスクリプトで適用できる便利なテストはありますか?(のようなもの以外grep '' somefile | grep -q Binary) (このようなテストは必ずヒューリスティックであり、したがって不完全であると認識しています。)
35 files  text 

2
Fedora 21でホスト名を永続的に変更する方法
新しいバージョンのfedoraでホスト名を変更するには、hostnamectlコマンドを使用する必要があると聞きました。さらに、最近(そして正常に)この方法でArch Linuxのホスト名を変更しました。ただし、実行時: [root@localhost ~]# hostnamectl set-hostname --static paragon.localdomain [root@localhost ~]# hostnamectl set-hostname --transient paragon.localdomain [root@localhost ~]# hostnamectl set-hostname --pretty paragon.localdomain 再起動後、変更は保存されません(多くの人が主張しているのとは反対です)。なにが問題ですか? 私は本当に/etc/hostname手動で編集したくありません。 また、これは完全にストックされたフェドラであることにも注意してください。コアアプリをインストールすることすらまだできていません。
35 fedora  hostname 


3
大きなファイルをソートするには?
Intel(R)Pentium(R)CPU G640 @ 2.80 GHzおよび8 GBのRAMを搭載したPCがあります。EXT3ファイルシステムを使用してScientific Linux 6.5を実行しています。 このセットアップでsort -u、200ギガバイトのファイルでできる最速の方法は何ですか? ファイルを小さなファイル(8 GB未満)にsort -u分割し、それらをまとめてから、別のサイズにsort -u再度分割するなどの必要がありますか?または、ソートスクリプト、限られた量のRAMでこれほど大きなファイルを処理できるプログラムはありますか?
35 sort 


3
マウントがバインドマウントの読み取り専用オプションを尊重しないのはなぜですか?
私のArch Linuxシステム(Linuxカーネル3.14.2)では、バインドマウントは読み取り専用オプションを尊重しません # mkdir test # mount --bind -o ro test/ /mnt # touch /mnt/foo ファイルを作成します/mnt/foo。の関連エントリ/proc/mountsは /dev/sda2 /mnt ext4 rw,noatime,data=ordered 0 0 マウントオプションは、要求されたオプションと一致しませんが、バインドマウントの読み取り/書き込み動作と最初にマウント/dev/sda2するために使用されるオプションの両方と一致します/ /dev/sda2 / ext4 rw,noatime,data=ordered 0 0 ただし、マウントを再マウントすると、読み取り専用オプションが尊重されます # mount --bind -o remount,ro test/ /mnt # touch /mnt/bar touch: cannot touch ‘/mnt/bar’: Read-only file system および関連エントリ /proc/mounts/ /dev/sda2 …

3
ファイルを変更不可にするにはどうすればよいですか?
ログイン中に、次のことができます。 mkdir foo touch foo/bar chmod 400 foo/bar chmod 500 foo 次にroot、(ではなく)vimを開き、編集しbar、で強制的に書き込みw!、ファイルが変更されます。 オペレーティングシステムでファイルの変更を禁止するにはどうすればよいですか? 2017年3月2日更新 chmod 500 foo赤いニシンです。ディレクトリに対する書き込み権限は、ファイルの内容を変更する機能とは関係ありません。ファイルを作成および削除する機能のみです。 chmod 400 foo/bar実際、ファイルの内容が変更されるのを防ぎます。ただし、ファイルのアクセス許可が変更されるのを防ぐことはできません -ファイルの所有者は、常にファイルのアクセス許可を変更できます(ファイルにアクセスできる場合、つまりすべての祖先ディレクトリでアクセス許可を実行できる場合)。実際、strace(1)は、これがvim(7.4.576 Debian Jessie)が行っていることを明らかにしています-vimはchmod(2)を呼び出してファイルの所有者に書き込み許可を一時的に追加し、ファイルを変更してからchmod( 2)再度書き込み許可を削除します。それが、chattr +iworks を使用する理由です。root のみがを呼び出すことができますchattr -i。理論的には、vim(または任意のプログラム)は、rootとして実行された場合、不変ファイルでchmodを使用するのと同じことをchattrで実行できます。

3
URLとそれに対応する出力ファイルのリストでwgetを使用するにはどうすればよいですか?
list_of_urls次のようになっているとします: http://www.url1.com/some.txt http://www.url2.com/video.mp4 私はそれを使用する方法を知っています: wget -i list_of_urls しかし、私list_of_urlsがこれを持っていて、PDFやビデオなどの適切なファイルがすべて返されたらどうなりますか? http://www.url1.com/app?q=123&gibb=erish&gar=ble http://www.url2.com/app?q=111&wha=tcha&mac=allit 単一のファイルの場合、これを行うことができます: wget -O some.txt "http://www.url1.com/app?q=123&gibb=erish&gar=ble" wgetURLのリストをダウンロードし、返されたデータを適切なローカルファイルに保存するにはどうすればよいですか?
35 files  wget  download  links 

6
マウスの加速だけでなく、マウスの感度を設定するにはどうすればよいですか?
マウスアクセラレーションとマウス感度の両方の設定をサポートする単一のデスクトップ環境が見つかりません。マウスの加速は必要ありませんが、マウスの速度を上げたいです。つまり、マウスを同じ距離だけ移動すると、マウスをどれだけ速く移動しても、ポインターは毎回同じ距離を移動します。 KDEでは、マウスの加速度を1倍に設定できますが、マウスの動きが遅すぎて、速度を上げる方法がわかりません。CLIソリューションを受け入れますが、xinputアクセラレーションを変更することしかできませんでした。私もxset、運が良かったのを覚えていません。
35 x11  kde  mouse  xinput 


3
バックティックを理解する( `)
私はコマンドを試しています $ b=5; echo `$b`; -bash: 5: command not found ただし、想定どおり5は出力されません。ここに何が欠けていますか? コマンドで `(バッククォート/バックティック)はどういう意味ですか?`内のコマンドを評価し、それらを出力に置き換えると言っているようです。

10
テキスト処理-2行ごとにコンマで結合します
ファイルに1000行以上あります。ファイルは次のように始まります(行番号が追加されます): Station Name Station Code A N DEV NAGAR ACND ABHAIPUR AHA ABOHAR ABS ABU ROAD ABR これをファイルに変換する必要があります。2行ごとに結合して、コンマ区切りのエントリにします。最終的なデータは次のようになります Station Name,Station Code A N DEV NAGAR,ACND ABHAIPUR,AHA ABOHAR,ABS ABU ROAD,ABR ... 私がやろうとしていたのは、シェルスクリプトを記述してから、echoそれらの間にカンマを入れようとすることでした。しかし、よりシンプルで効果的なワンライナーがsed/にあるかもしれませんawk。 何か案は?

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