BLOGTIMES
» ArchiveList (Tag for "sh / linux" )
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
2023/02/17

xargs で複数のコマンドを実行する

sh  cli 

xargs を使って複数のコマンドを一度に実行する方法がないかと思って調べてみました。

sh -c と組み合わせて、以下のような感じで実行しているパターンが多いようです。
例えばこの例だと find で探したファイルに対して chown でオーナーを変えつつ、パーミッションも同時に変更することができます。

find . -type f | xargs -i sh -c 'chown root "{}" && chmod 600 "{}"'

参考


    at 15:58 |
    2022/11/16

    Ubuntu が contains a file system with errors で起動しなくなった場合の対処法

    ubuntu  linux 
    Ubunt の fs error - Ubuntu が contains a file system with errors で起動しなくなった場合の対処法

    使っている Ubuntu の VM が以下のようなファイルシステムエラーを吐いて通常起動しなくなってしまったので、対処方法をメモ。

    /dev/sda1: recovering journal /dev/sda1 contains a file system with errors. check forced. /dev/sda1: Inodes that were part of a corrupted orphan linked list found. /dev/sda1 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY. (i.e.,without -a or -p options) fsck exited with status code 4 The root filesystem on /dev/sda1 requires a manual fsck BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.3) built-in shell (ash) Enter 'help' for a list of built-in commands. (initramfs)

    勝手にシングルユーザーモードになっているようなので、以下のように fsck による /dev/sda1 の修復をかけて無事に修復することができました。

    fsck /dev/sda1 -y sync reboot

      at 18:51 |
      2022/10/29

      実際にサーバのトラブルーシューティングができる練習環境 SadServers

      systemmanagemant  networking  linux 

      SadServers という実際に Linux サーバのトラブルーシューティングを体験できる演習環境を見つけたのでメモ。
      実際にサーバ運用をしたことがあれば、Easy や Medium あたりは楽しんで挑戦できると思いますが、Hard はかなり難しいです。

      SadServers - Troubleshooting Linux Servers

      Troubleshoot and make a sad server happy!
      "Like LeetCode for Linux"
      Capture The Flag challenges. Train and prove your debugging skills.
      Practice for your next SRE/DevOps interview.
      Get a full remote Linux server with a problem and fix it.

      この演習環境のアーキテクチャについては GitHub - fduran/sadservers: SadServers.com Public で解説されていますが、1 回ごとに EC2 でインスタンスが立ち上がるようになっているようです。


        at 23:55 |
        2022/04/18

        Core Utilities 9.1 がリリースに

        linux  cli 

        Linux などの mv や cp などの基本的なコマンドの実装である GNU Coreutils のバージョン 9.1 がリリースされていたのでメモ。
        こんなツール、まだバージョンアップする余地があるの?という感じもしますが、現在でもアップデートされ続けているんですよね。

        基本コマンドをカバーするGNU Core Utilitiesがバージョンアップ | TECH+

        ddがFreeBSDと同じ動作するエイリアスのサポートや、dircolorsが環境変数LS_COLORSのカラーコードに従って表示するオプション、環境変数COLORTERMを参照するようになった。改良点はcpやmv、installを使用してディレクトリをコピーする際は、競合状態を回避するためにopenat()システムコールを使用。printfによるマルチバイト文字の数値表示をサポートした点が目立つ。


          at 23:41 |
          2021/08/15

          bash の変数と改行

          sh 

          シェルスクリプトで echo をするときに、変数をダブルクオートで囲った場合とそうでない場合で挙動が違うことに気付いたのでメモ。

          具体的には以下のような感じで、変数内に改行が含まている場合の改行の扱いが変わるようです。
          かれこれ 20 年くらいシェルスクリプト書いていますが、こういう決まりがあることに気付いてませんでした。

          $ hoge=`cat <<EOF > aaa > bbb > ccc > EOF > ` $ echo $hoge aaa bbb ccc $ echo "$hoge" aaa bbb ccc $ echo $hoge | wc -l 1 $ echo "$hoge" | wc -l 3

            at 18:41 |
            2021/05/22

            git リポジトリのリモート URL を一撃で書き換える ( Linux 編 )

            git  sh 

            git のサービス等を乗り換えたりする場合には、ローカルリポジトリのリモート URL を書き換える必要が出てきます。

            1つずつやっても良いのですが、いろいろと面倒なので、現在の URL の一部を置換することリモート URL を書き換えるワンライナーを書いてみました。通常、サービスの乗り換えの場合にはリポジトリ名は URL の一部のみが変わるだけだと思うので、これで十分機能するはずです。

            ここではリモートの URL が https://example.com/foo/bar.githttps://example.jp/foo/bar.git に変更されると仮定すると、以下のような感じでリモート URL の変更が可能です。

            git remote set-url origin $(git remote get-url origin | sed "s|example\.com|example\.jp|")

            ちなみに、Windows の場合は PowerShel を使って同様の操作ができます。


              at 22:28 |
              2021/05/13

              SH-60L の試作機の飛行試験を開始

              SH-60L 

              海自の SH-60K の能力向上型試作機(完成すれば SH-60L)の飛行試験が始まったようです。

              見た目は SH-60J と SH-60K のようなわかりやすい見た目の変化もないようですが、どこかで見にいきたいところです。


                at 22:55 |
                2021/04/27

                意図的にバグコミットして、大学がプロジェクトから ban される

                dishonesty  linux  softwareengineering 

                ミネソタ大学の博士課程の学生が脆弱性に関する実践的な研究をするために、Linux カーネルに Use After Free のバグを埋め込んだパッチを送って論文を書いた件が、大きな問題になっていたのでメモ。

                ソフトウェア関連の研究に携わっている者として、人ごとではない深刻な事態だと受け止めています。研究をしていると、やってみたいという衝動に駆られるけれども倫理上の理由で実行できないということはよくあります。

                問題の論文(On the Feasibility of Stealthily Introducing Vulnerabilities in Open-Source Software via Hypocrite Commits)についてはすでにwithdraw(取り下げ)になっているようです。

                大学においてはヒト対象実験については倫理指針が定められていて、事前審査を受けなければ実施することができませんが、ソフトウェアの世界にも倫理審査が必要な時代が来てしまうのかもしれません。以下のメールで述べられている Linux コミュニティの意見は厳しいですが至極真っ当な意見だと思います。

                Re: [PATCH] SUNRPC: Add a check for gss_release_msg - Greg KH

                Our community welcomes developers who wish to help and enhance Linux. That is NOT what you are attempting to do here, so please do not try to frame it that way.

                Our community does not appreciate being experimented on, and being"tested" by submitting known patches that are either do nothing on purpose, or introduce bugs on purpose.
                If you wish to do work like this, I suggest you find a different community to run your experiments on, you are not welcome here.

                Because of this, I will now have to ban all future contributions from your University and rip out your previous contributions, as they were obviously submitted in bad-faith with the intent to cause problems.

                参考


                  at 22:59 |
                  2021/02/06

                  高負荷サーバでは net.core.somaxconn の設定に注意

                  linux  tuning  networking 

                  外部から多数のコネクションを受け付けるサーバが遅いと思ったら、コネクションを取りこぼしていました。

                  具体的には net.core.somaxconn の値が Linux 5.4 以前はデフォルトが 128 とかなり小さな値で、これがボトルネックになってしまっていました。このカーネルパラーメーターは TCP ソケットの listen() のバックログのキューの深さを表しているので、多数の接続を受け付ける場合にはこれを大きくしておく必要があります。

                  現在の設定値を確認するのはこんな感じでできます。

                  # sysctl net.core.somaxconn net.core.somaxconn = 128

                  そして、値の変更はこんな感じでできます。

                  echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf sysctl -p

                  プロセスが起動するときに net.core.somaxconn の値を読み込んでいることがあるので、値の反映後に httpd などの daemon も再起動してやる必要もあります。

                  参考

                  /proc/sys/net/ipv4/* Variables

                  somaxconn - INTEGER
                  Limit of socket listen() backlog, known in userspace as SOMAXCONN.
                  Defaults to 4096. (Was 128 before linux-5.4)
                  See also tcp_max_syn_backlog for additional tuning for TCP sockets.

                    at 15:22 |
                    2020/12/27

                    date -d "1 month 1 day ago" とやると危ない!

                    linux  cli  humanerror 

                    date コマンドは -d オプションを使うと、たとえば今から 30 日前のような相対的な日付を簡単に得ることができます。
                    これについては常識みたいなものですが、今更ながら思わぬハマりポイントを見つけてしまったのでメモ。

                    $ date --iso-8601=seconds 2020-12-27T16:28:55+09:00 $ date -d '1 month ago' --iso-8601=seconds 2020-11-27T16:28:55+09:00

                    まず ago の挙動について、coreutils のマニュアルを確認すると、-1 を掛ける(符号を反転させる)という意味だということが分かります。
                    問題は、実はこの効力が unit ごとであるということです。

                    つまり1ヶ月と1日前という場合にうっかり -d "1 month 1 day ago" と書いてしまうと、1ヶ月後の1日前になってしまうことになります
                    複数の単位を組み合わせる場合には ago は使わずに符号を書いた方が誤解がないですね。

                    $ date --iso-8601=seconds 2020-12-27T16:28:55+09:00 $ date -d "1 month 1 day ago" --iso-8601=seconds 2021-01-26T16:28:56+09:00 $ date -d "1 month ago 1 day ago" --iso-8601=seconds 2020-11-26T16:28:56+09:00 $ date -d "-1 month -1 day" --iso-8601=seconds 2020-11-26T16:28:56+09:00

                    参考

                    Relative items in date strings (GNU Coreutils)

                    Following a relative item by the string ‘ago’ is equivalent to preceding the unit by a multiplier with value -1.


                      at 17:04 |
                      «Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
                      » ArchiveList (Tag for "sh / linux" )