hacks/unix/manコマンド

2009年05月05日

このエントリーをはてなブックマークに追加

/etc/logrotate.d/mysql-serverを見たら発見した


とあるサーバにてMySQLのログがローテートされてなかったのでDebianのlogrotate設定を参考にしてみた。
そこには見慣れないpsのオプションがあった。


$ cat /etc/logrotate.d/mysql-server
...(省略)...
                  if ps cax | grep -q mysqld; then
                    exit 1
                  fi
...(省略)...

「ps cax」?何だこれは。
axを指定する事はあっても、cを指定した事がなかった。


$ man ps
...(省略)...
       c               Show the true command name. This is derived from the
                       name of the executable file, rather than from the argv
                       value. Command arguments and any modifications to them
                       (see setproctitle(3)) are thus not shown. This option
                       effectively turns the args format keyword into the comm
                       format keyword; it is useful with the -f format option
                       and with the various BSD-style format options, which
                       all normally display the command arguments. See the -f
                       option, the format keyword args, and the format keyword
                       comm.
...(省略)...

実際にやってみよう。

cなし

$ ps ax | grep mysqld
 3033 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe --skip-character-set-client-handshake
 3073 ?        Sl     0:50 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock --skip-character-set-client-handshake
 3074 ?        S      0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
17052 pts/9    S+     0:00 grep mysqld
cあり

$ ps cax | grep mysqld
 3033 ?        S      0:00 mysqld_safe
 3073 ?        Sl     0:50 mysqld

なるほど。そう言う事か。
これは便利だ。


cを知らなかった頃


今まで無駄な事をやっていた事に気づかされる。

$ ps ax | grep mysqld | grep -v grep
  • 「grep mysqld」がpsの一覧に表れてしまう
  • grepコマンドを一覧から除外するために「grep -v grep」
$ ps ax | egrep '[m]ysqld'
  • psの一覧からgrepを除外したい
  • 「egrep '[m]ysqld'」と正規表現を書く事により、
    psの結果には「egrep '[m]ysqld'」が存在し、
    「egrep '[m]ysqld'」の条件にはマッチしなくなる
  • ※grepではなくegrep

いずれの方法でも欠点があった。
mysqldのプロセスとは関係のないプロセス、たとえばファイル名に「mysqld」が含まれるファイルを編集しているプロセスがあった場合にマッチしてしまう。

これをすっきり解決する方法が「cオプション」だった。

続きを読む


編集
@hansode at 19:35|PermalinkComments(0)TrackBack(0)

2007年08月02日

このエントリーをはてなブックマークに追加

しばらく使ってないうちにオプションが増えていた。

Usage:
/usr/bin/dh-make-perl [ --build ] [ --install ] [ SOURCE_DIR | --cpan MODULE ]
Other options: [ --desc DESCRIPTION ] [ --arch all|any ] [ --version VERSION ]
               [ --depends DEPENDS ] [ --bdepends BUILD-DEPENDS ]
               [ --bdependsi BUILD-DEPENDS-INDEP ] [ --cpan-mirror MIRROR ]
               [ --exclude|-i [REGEX] ] [ --notest ] [ --nometa ]
               [ --requiredeps ] [ --core-ok ]

オプションを見る限り、コマンドラインオプションで依存パッケージ を指定出来るようになったみたいだ。manで調べてみる。

$ man dh-make-perl
       --depends DEPENDS
           Manually specify the string to be used for the module's dependen-
           cies. This should be used when building modules where dh-make-perl
           cannot guess the Perl dependencies (such as modules built using
           Module::Install), or when the Perl code depends on non-Perl bina-
           ries or libraries. Usually, dh-make-perl will figure out the depen-
           dencies by itself.

なるほど。

依存ライブラリの数だけ --depends オプションを使うのかと思ったらそうではない。 --dependsは一回だけ使える。

$ dh-make-perl --build --cpan [module] --depends '[package], [package], [package]...'

例としてPlaggerのdebパッケージ作成時のオプション 依存パッケージ多過ぎ。依存しているパッケージはさらに何かに依 存しているので、それぞれのパッケージを作るのは多大な時間が費 やされる。今までにどれくらい費やしたか覚えて居ない…。

dh-make-perl --build --cpan Plagger --depends '${perl:Depends}, ${misc:Depends}, libcache-cache-perl(>=1.04), libcache-fastmmap-perl, libclass-accessor-perl, libconfig-ini-simple-perl, libdata-ical-perl, libdata-serializer-perl, libdatetime-format-epoch-perl, libdatetime-format-ical-perl, libdatetime-format-mail-perl, libdatetime-format-strptime-perl, libdatetime-format-w3cdtf-perl, libdatetime-locale-perl, libdatetime-locale-perl(>=0.32), libdatetime-perl(>=0.35), libdatetime-timezone-perl(>=0.56), libdbix-class-perl, libemail-address-perl, libencode-detect-perl(>=1), libencode-perl(>=2.1), libfile-copy-recursive-perl, libfile-find-rule-perl, libfile-grep-perl, libfile-homedir-perl, libflickr-api-perl, libhatena-keyword-perl, libhtml-format-perl, libhtml-parser-perl, libhtml-parser-perl(>=3.51), libhtml-resolvelink-perl, libhtml-resolvelink-perl(>=0.02), libhtml-scrubber-perl, libhtml-tidy-perl(>=1.07), libhtml-tree-perl, libhtml-treebuilder-xpath-perl, libhttp-cookies-mozilla-perl, libimage-info-perl, libip-country-perl, libipc-run-perl, libkinosearch-perl, liblingua-en-summarize-perl, liblingua-ja-summarize-extract-perl, liblingua-zh-handetect-perl, libmail-imapclient-perl, libmailtools-perl, libmime-lite-perl, libmime-types-perl(>=1.16), libmodule-pluggable-fast-perl, libnet-delicious-perl, libnet-dns-perl, libnet-movabletype-perl, libnet-netsend-perl, libnet-smtp-tls-perl, libpalm-palmdoc-perl, libpoe-component-client-dns-perl, libpoe-component-client-http-perl, libpoe-component-ikc-perl, libpoe-component-irc-perl, libpoe-perl, libregexp-common-profanity-us-perl, libsearch-estraier-perl, libsoap-lite-perl, libspreadsheet-writeexcel-perl, libsvn-core-perl, libswf-builder-perl, libtemplate-perl(>=2.13), libtemplate-plugin-javascript-perl, libtemplate-provider-encoding-perl(>=0.04), libterm-encoding-perl, libtest-pod-coverage-perl, libtest-pod-perl, libtext-csv-pp-perl, libtext-emoticon-perl, libtext-hatena-perl, libtext-kakasi-perl, libtext-language-guess-perl, libtext-markdown-perl, libtext-original-perl, libtext-tags-perl, libtext-wrapi18n-perl, libtime-duration-parse-perl, libtimedate-perl, libuniversal-require-perl(>=0.1), liburi-fetch-perl(>=0.07), liburi-find-perl, libwebservice-bloglines-perl(>=0.11), libwww-babelfish-perl, libwww-mechanize-perl, libwww-mixi-perl(>=0.48), libwww-perl, libxango-perl(>=1.04), libxml-atom-perl(>=0.20), libxml-atom-perl(>=0.23), libxml-feed-perl(>=0.09), libxml-feed-perl(>=0.12), libxml-foaf-perl, libxml-liberal-perl(>=0.14), libxml-libxml-perl, libxml-rss-liberal-perl, libxml-rss-libxml-perl(>=0.23), libyaml-perl(>=0.39), libyaml-syck-perl, libyaml-syck-perl(>=0.1), perl, perl(>=2.1), perl-base, spamassassin'
続きを読む


編集
@hansode at 01:40|PermalinkComments(0)TrackBack(0)

2007年03月06日

このエントリーをはてなブックマークに追加

偶然-sをつけて実行したら見慣れぬ出力結果。


$ man netstat

netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w]
   --statistics , -s
       Display summary statistics for each protocol.

TCPの状態を表示

$ netstat -s -t

UCPの状態を表示

$ netstat -s -u

普段使っているのに決まったオプションしか使ってないとこうなる。 使い慣れたコマンドのmanを読み、知らないオプションを見つけた 時は不思議な感覚に襲われる。




編集
@hansode at 16:55|PermalinkComments(1)TrackBack(0)
このエントリーをはてなブックマークに追加

ファイル名を指定ではなく、標準入力からファイルの種類を判別。

$ [command] | file -

ハイフンがミソ




編集
@hansode at 13:25|PermalinkComments(1)TrackBack(0)

2006年06月13日

このエントリーをはてなブックマークに追加

『wgetやfetchのように手軽にftp putしたい』と思った。

$ curl -u [user]:[pass] -T [file] ftp://[host]/
$ curl -u [user]:[pass] -T [file] ftp://[host]/[path]

これで行けた

$ man curl
       -T/--upload-file 
              This  transfers  the  specified local file to the remote URL. If
              there is no file part in the specified URL, Curl will append the
              local file name. NOTE that you must use a trailing / on the last
              directory to really prove to Curl that there is no file name  or
              curl will think that your last directory name is the remote file
              name to use. That will most likely cause the upload operation to
              fail.  If this is used on a http(s) server, the PUT command will
              be used.

              Use the file name "-" (a single dash) to use stdin instead of  a
              given file.

              You can specify one -T for each URL on the command line. Each -T
              + URL pair specifies what to upload and to where. curl also sup-
              ports "globbing" of the -T argument, meaning that you can upload
              multiple files to a single URL by using the  same  URL  globbing
              style supported in the URL, like this:

              curl -T "{file1,file2}" http://www.uploadtothissite.com

              or even

              curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/



編集
@hansode at 12:30|PermalinkComments(0)TrackBack(0)