忍者ブログ
物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

■ 参考 : Multi-threading Job

submitファイルに
request_cpus = 8
と書けばいいっぽい

これで並列化できて、計算時間が短縮できる!









PR


xmlという拡張子を持ったファイルを再帰的にリストアップしたいとき
find /home/hoge/Dropbox -name "*.xml"




表示順をファイルの更新順にしたいとき
-print0でfindの結果を出力する
xargsでlsに渡す
lsは -tで時間順にする(古いものが先に表示される)、-1(いち)でファイル名のみをフルパスで表示する
find /home/hoge/Dropbox -name "*.xml" -print0 | xargs -0 ls -1t








readlink -f [シンボリックリンク]

返り値はフルパスになっている










-1 (ハイフン いち)をつける
ls -1


ファイルの作成順にファイル名のみを並べたいときは
ls -1t







pngのファイル名が_で区切られていたとき、それの6番目のフィールドの数字でソートしたいとすると・・・・
ls ./*png | sort -t_ -k6

6番目がなにかはawk -F_ '{print $6}'とかしたら確認できる








ls -l --time-style=+'%Y/%m/%d %H:%M:%S' ./








hoge="aaa"
foo="BBB"

# aaaと表示される
echo $hoge

# AAAと表示される
echo ${hoge^^}

# BBBと表示される
echo $foo

# BBBと表示される
echo ${foo,,}


(知らなかったーーーーー まぁ使う機会がなかったから知らなかったんすけど・・・)












手元のローカルからリモート同士をscpしたいときは、-3オプションを付ければいい
scp -3 -r username@hoge:/home/username/aaa username@foo:/home/username/

■ 参考 : scpでリモートサーバーからリモートサーバーにファイル転送






(タイトルにDebian8って付いてるのは今回触ったサーバーがDebian8だったからです。おそらくDebian10でもそのまま動くと思われる)


■ inofity-toolsのインストール
% sudo apt install inotify-tools
■ あるディレクトリを監視する
% inotifywait -m -e "ATTRIB" --format '%T %w%f (%e)' --timefmt '%F %T' -r ./
この例ではカレントディレクトリ以下を再帰的に監視する
そこにのファイルがアクセス件やタイムスタンプなどのメタデータが変更されたときに、画面に表示される
touch hoge.txt
とかでテストできる


-rオプション
再帰的にディレクトリを調べる

-mを付けると、監視をずっと継続してくれる(おそらくmonitorの略)
これを付けないと1度画面表示したら終了してしまう

--formatは画面表示の形式を選べる
--timefmtは時間の表示形式
(今回はこれらはログとして残すだけなのであんまり関係ない)

-eで選べるイベントはヘルプによると
Events:
access file or directory contents were read
modify file or directory contents were written
attrib file or directory attributes changed
close_write file or directory closed, after being opened in
writable mode
close_nowrite file or directory closed, after being opened in
read-only mode
close file or directory closed, regardless of read/write mode
open file or directory opened
moved_to file or directory moved to watched directory
moved_from file or directory moved from watched directory
move file or directory moved to or from watched directory
create file or directory created within watched directory
delete file or directory deleted within watched directory
delete_self file or directory was deleted
unmount file system containing file or directory unmounted
日本語の説明↓
使うのは
modify : ファイルが修正されたとき
create : ファイルが新規作成されたとき
くらいかな?

■ 参考 : inotify-toolsでファイルやディレクトリを監視する


さらに-oでファイルを指定すると、inotifyで出力されるログの出力先を指定できる
とりあえず /tmp/inotify.log とかでいいか?
-o /tmp/inotify.log

-qオプション
イベントのみを画面に表示したいとき



■ 監視ファイルの上限数

■ 参考 : NASのバックアップ対象ディレクトリをinotifyで監視して更新されたディレクトリのみをrsyncでミラーリング

自分の環境では8192ファイルになっていた
一応、上限は上げておいたほうが良いかも


本番環境ではなぜか65536になっていた・・・
これならまぁ十分でしょう




■ ファイルの拡張子に応じて動作を変更したい
inotifywaitのオプションにはそれらしきものはなかったので、ファイル名からそれを取り出して対応する
#!/bin/bash -e

LOGFILE=/tmp/inotify.log
DIR_WATCH=hoge

/usr/bin/inotifywait -m -r -e "ATTRIB" --format '%T %w%f (%e)' --timefmt '%F %T' $DIR_WATCH |
while read line; do
 echo "one event was detected." >> $LOGFILE 2>&1
 echo "$line" >> $LOGFILE 2>&1
 fname=`echo $line | awk '{print $3}'`
 extension=${fname##*.}

 [[ "$extension" == "png" ]] && {
 echo "process started.">> ${LOGFILE} 2>&1
 hogehoge.py $fname >> ${LOGFILE} 2>&1
 echo "process finished.">> ${LOGFILE} 2>&1
||{
 echo "$extension is out of support." >> ${LOGFILE} 2>&1
}
done
みたいな感じでよいのだろうか?

これをこの後サービス化するので、変なファイルを食わせたりしてエラーがきちんと起こるかどうかテストしてた
エラーが起こった時にプロセスが無限ループに入って、トラブらないかが問題

■ 参考 : 特定のフォルダに画像を保存するだけで、予め設定した縦横ピクセル数や画質の画像をオンデマンドで自動的に出力する処理をbashで書いてみる


■ 参考 : inotify-tools/inotify-tools (github)




■ サービス化

バックグラウンドで動かすには nohupと&を付けたら良さそう
けど、常時立ち上がってて、かつプロセスが死んだ時は勝手に立ち上がってほしい

(たぶんそういうのをサービス化とかデーモン化と言うんだろう、と理解してるが合ってるんだろうか?)

調べた感じ、inotifyにはその機能はデフォルトで入ってて、 -dを付けて走らせればいいと書いてあるがそれをやってもうまく行かない
よくわからないので、シェルスクリプトの中でinotifywaitを使って、それをサービスとして登録することにする


■ 参考 : systemdでデーモン化

■ 参考 : 今回のお題 - inotify でディレクトリを監視してみる

(どうでもいいけど、2つめの記事は2009年の記事らしい。内容の密度が半端ない。それに対して最近のアドセンスで稼ごうとしてる記事たちの内容の希薄さよ・・・)


一般的なsystemd関連のページ

■ 参考 : 自作したシェルスクリプトを Linux の systemd サービスとして起動する方法


(このあとsystemdのことをあれこれ調べて書いたけど、間違って消してしまったぁああああああああああ)

/etc/systemd/system 以下にサービスを作成する
ファイル名はサービス名.serviceにしておく
[Unit]
Description="serivice of monitoring directory and launching something"
Documentation=
# After=

[Service]
Type=simple
User=controls
Group=controls
Restart=on-failure
#Restart=always
RestartSec=2s
ExecStart=/home/hoge/run.sh

StandardOutput = syslog
StandardError = syslog
SyslogIdentifier = hogehoge

[Install]
WantedBy = multi-user.target
■ サービスの起動などのコマンドメモ
# サービスが認識されているかのチェック
systemctl list-unit-files --type=service

# サービスの自動起動をオンにする
sudo systemctl enable hoge

# サービスの状態を確認する
sudo systemctl status hoge

# サービスを止める
sudo systemctl stop hoge

# サービスを開始
sudo systemctl start hoge
なんかトラブルが起こってそうなら、statusの画面で一番下にエラーメッセージが表示される





(2022/10/17 追記)

サービスの設定ファイルを修正したときは

sudo systemctl restart hoge

ではダメ
Warning: Unit file of hoge.service changed on disk, 'systemctl daemon-reload' recommended.
みたいな警告が出ているはず

このときは警告に従って
sudo systemctl daemon-reload
とすればOK






■ (code=exited, status=217/USER)というエラーが出たら、これはサービスのファイル中のUserがおかしいとき

困ったら、sudo tail /var/log/syslog を見てみる





■ (code=exited, status=203/EXEC) というエラーが出たら、

これはpermissionの問題なので、
cd /etc/systemd/system
chmod 644 hoge.service
これを744にすると、systemdから
Please remove executable permission bits. Proceeding anyway.
のようなエラーが出てきた





(2023/02/15 追記)

rsyncでコピーしたファイルに対して、inotifyを使おうとしたがpermissionなどを含めてコピーする必要があった

crontabでrsyncすると、sudo権限が使えない

rsync -rlOtcv ....
みたいなオプションを使ったら解決した

■ 参考 : Jenkinsで成果物(artifact)をrsyncでコピーしようと思ったらエラーでJOBが失敗






sudo chown -Rh username:username new_dir

みたいな感じ

-Rは再帰的に変更する
-hはシンボリックリンクは、シンボリックリンクのみを変更する(なしだとシンボリックリンクをたどった先も変更する)

username:usernameは ユーザー名:グループ名
ls -ltとかで確認できる








awkのセパレーターはデフォルトでは スペース になってるはず
それを他のに変えるには、
awk -F- 'print $2'
みたいな感じで -F オプションを使う

2つ以上指定したいときは | で分ける
この例だとaとbがセパレーターになってる。これは鬼便利そう
1文字ずつじゃなくて、文字列でも指定できる。その場合は | で分けないとだめ
awk -F'a|b' 'print $2'
または
awk -F'[ab]' 'print $2'
みたいな感じで -F オプションを使う

-Fの引数は、2文字以上だと正規表現として認識されるらしい








■ 参考 : シェルスクリプトでファイルに特定の文字が含まれているかどうかを高速に判定する方法

if grep 99 test.txt >/dev/null; then
echo EXIST.
fi

または

grep -q 99 test.txt && echo EXIST.

grep -qのほうが早いと↑の記事には書いてあった

とりあえずメモ





まずはtarで圧縮/解凍するときのコマンドメモ
gzipは単体のファイルには行えるが、ディレクトリには使えない(tarの内部でgzipを呼び出してはいるらしい)
# hogeというディレクトリをhoge.tar.gzに圧縮
tar czf hoge.tar.gz hoge

# hoge.tar.gzという圧縮ファイルを解凍する、名前は付けなくても自動的についた
tar xz hoge.tar.gz


これをscpの前後にやると30分掛かっていたディレクトリの転送が全部で10分ほどで終わった
ディレクトリの中身は30000個のファイルで、全部で2GB程度
圧縮するのに5分くらいかかって、転送自体は数分で終わった、解凍は一瞬で終わる


他にも転送時の暗号化を緩いものにするとかいう選択肢があるらしい
イントラネット内のファイル転送などのときは利用できるかもしれない

-c aes128-cbc -C

をscpにつける
今回は元から圧縮していたので、転送速度に大きな変化はなかった

■ 過去記事 : 大容量ファイルのSCP転送を高速にする方法





本来はこれをワンライナーでやりたいけどなぁ・・・
ローカルからリモートならワンライナーでできるっぽいけど、逆のリモートからローカルへのscpはどうしたらいいのかわからん。

メモだけしとく
(たぶんexample.comのあとにコロンが足りてない気がする?)

■ 過去記事 : SSH経由のディレクトリ転送を効率的に行う





(2021/09/14 追記)

■ scpの途中で通信が止まったときに続きから再開したい
# scpじゃなくてrsyncを用いればいい
rsync --partial --progress --rsh=ssh user@hoge.com:hoge.txt ./







scp -rp hoge.txt some_server:


pオプションを付ければいい







■ #から始まるコメント行のみを抽出する
awk " /^#/ {print $1}” hoge.txt

■ #から始まるコメント行を除外するを抽出する
awk " !/^#/ {print $1}” hoge.txt

いつもの "{}" の{の前に
/^#/ または !/^#/ をつければOK









1つ前の記事で、ssh公開鍵のパスフレーズを省略できるようになったので
sshfs関連のスクリプトをcrontabで定期的に走らせるようにした

テストで動かしてみたら、ちゃんと動かない
エラーメッセージを見てみたら、
ssh_exchange_identification: Connection closed by remote host
read: Connection reset by peer
と出ていた


状況
1. 単純にssh myname@hogehoge って打つと、きちんとhogehogeにパスフレーズを省略して接続できる
2. 他のcrontabはきちんと動いている


解決方法は今、模索中
まったくわからん

考えてること
1. crontabで走るので、usernameは自分がメインで使ってるusernameじゃない?
2. sshするときに多段sshをしている。~/.ssh/configが見れないのでどこにsshするのかわからない?
3. crontabで走るときは、自分のアカウントじゃないアカウントで動くので ~/.ssh以下を見るための権限がない?(configじゃなくて、秘密鍵も見れない?)

もうちょっと調査する






(2020/07/09 追記)

結局、このエラーの原因はまだ不明
sshfsでサーバーとの接続を切れたときに自動的に復旧するオプションがsshfsにあるっぽいので
今回はそれを使うことで対応する




関係ありそうな記事をメモしておく

■ 参考 : ssh_exchange_identificationと言われてknown_hosts消したりhosts.allowいじっても直らない時に確認してほしいこと

■ 参考 : ピアによって接続がリセットされる

■ 参考 : Read from socket failed: Connection reset by peer


「/etc/sshのssh_host_dsa_keyとssh_host_rsa_keyのパーミッションが600以外だとこのエラーが出るようです。」とあるが、
通常のsshではログインできるので、今は関係なさそう





(2021/02/23 追記)

解決した。

ssh鍵とか ~/.ssh/config などssh時に必要なファイルを /root/.ssh 以下にコピーすればいけた
こうすればrootでも見れる

というのも↑で書いてあるけど、パーミッションの問題で自分のアカウントの上にある ~/.sshがrootでは見えないのが原因っぽかった




(クリックしてブログの収益化に貢献オナシャス)










セキュリティ的にOKなのかはわからんが、以下の記事を見つけた

■ 参考 : SSH で毎回パスフレーズを入れるのが面倒だと思ったときには
eval `ssh-agent`

ssh-add ~/.ssh/id_rsa_hoge

でパスフレーズを聞かれるので入力する
id_rsa_hoge は各自の秘密鍵に置き換えること

eval `ssh-agent`がなにかわかったら追記する





(2021/12/26 追記)

コメントで親切な方が教えてくれたので追記
以下と同じ。
1. ssh-agentを実行する。
2. その出力をシェルのコマンドだと思って実行する。

意図は、ssh-agetを実行する。ssh-agentは自分への接続方法をシェル変数にセットするためのコマンドを表示したあと、バックグラウンドで走り、sshの認証をうけおう。sshは認証が必要なときに、シェル変数をたよりにssh-agentに接続して代理で認証してもらうようを依頼する。









基本的に.bashrcをそのまま.zshrcにリネームすれば解決すると思ってたらいくつかエラーが出た
・プロンプトのフォーマットが異なる
・cdした後にlsする関数がそのままでは動かなかった
・ls --colorが効かない





.zprofile に書くか .zshrc に書くかは違うらしい
が、インタラクティブなシェルを使う機会はほぼないと思うので、.zshrcでおk




■ zshの設定ファイルの基本的なことがわからん

ので、とりあえず↓を見ながら片っ端から同じ設定をしていく(取捨選択はしつつ)

■ 参考 :Zsh初心者がzshrcを色々調べたの晒してみる


に沿って色々と設定していくが、lsの色設定がうまく反映されない
そもそも ls --color=auto と打つとエラーが出る
調べてみたら、macのlsとlinuxのlsは別物らしい(なんか昔同じことが起こって記事を書いたような・・・)
下で、macでlinuxのlsとかを使うコマンドをインストールする方法をまとめた

■ 参考 : Macのターミナルで色つき表示色々


■ ヒストリーから検索可能
control+rで、historyから部分一致を見つけてくれる
conrtol+rを押してから、.zとか打つと.zが入ったコマンドを見つけてきてくれる
便利





■ プロンプトのフォーマットが異なる

これは好みやけど、自分は
[usename@hostname:~/work/2020/0623]
というプロンプトをずっと(なぜか)使ってるので、それをそのまま採用する
tmp_host_name=`hostname | awk -F- '{print $1}'`
PS1="[%n@$tmp_host_name:%~]"
一応、これで再現できた
hostnameは %M とか %m ではうまく行かなかったので、awkで切り出してきた

■ 参考 : Terminal: zshプロンプトのカスタマイズ(git 対応)




■ cdした後にlsする関数がそのままでは動かなかった
function chpwd() { ls }
を.zshrcに追記する

zshにはhook関数というのがあるらしい
特定の動作をした直前/直後に呼び出す関数をユーザーが設定できる
chpwd()がその一つ

■ 参考 :zshでhook関数を登録する





■ lsの色が好みじゃない

.zshrcでlsの色を設定する方法は2つある
LSCOLORS

LS_COLORS

LSCOLORSはMacに入っているlsの色を変更するオプション
例えば
export LSCOLORS=Exfxcxdxbxegedabagacad
みたいな感じのオプションで色を指定できる

もう一つのLS_COLORSはMacの場合だと、そういうオプションを設定していれば補完の色を指定できる
例えば
export LS_COLORS='di=33;01:ln=31:ex=32;01'
みたいな感じ

LS_COLORSには黄色があるけど、LSCOLORSには黄色がない
そして、自分はlsでディレクトリを黄色表示にしたい!!

そういうときはmac portでcoreutilsをインストールして、それらのコマンドをPATHに入れればOK
$ sudo port install coreutils
インストールが終わったら、表示が出るけど
デフォルトでインストールされているコマンドよりも、coreutilsでインストールしたコマンドを優先するときは、/opt/local/libexec/gnubin/ のディレクトリをPATHの前の方に入れよ、と出る
ほかは特に何もしなくても今インストールした gls が優先されてるっぽい
他のコピーのコマンドとかも新しいものになってるっぽい








(2020/10/17 追記)

前まで「cdしたらlsしたい」というのはずっとやってきた
やり方は .zshrcに
function chpwd(){ls}
と書いておけばOK

けど、このままだと、ファイル数を多すぎる場合に出力が大変になる・・・
なので出力を制限してみた
下の例だと30行よりも多い場合はheadで制限して何行省略されたかを出力する

ひとつ嫌な点は、通常出力だとlsやけど
ls | headしたらls -lみたいな表示になってしまうこと・・・
l | head | awk '{print "$1\t"}'とか改行せずにタブを挟んで解決しようとしたがダメだった

■ 参考 : 【zsh】設定ファイル(.zshrc)を用意する
function chpwd() {
 tmp1=`ls -U | wc -l`
 tmp2=30
 if [ $tmp2 -lt $tmp1 ]; then
  ls -U --color=always | head -$tmp2
  echo "*** $(( tmp1 - $tmp2 )) out of $tmp1 files are omitted ***"
 else
  ls
 fi
}
調べてみたら、lsで複数行表示を強制する -Cというオプションがあるっぽい
これを使えば通常のlsと同じ表示が再現できそう

■ 参考 :chpwd内のlsでファイル数が多い場合に省略表示する

というか↑の記事がほぼ完璧・・・
glsがあるなら使うと書いてあるけど、それは↑で書いたように
/opt/local/libexec/gnubin/ にPATHを通しておけばgslかlsを気にする必要はなさげ

改良版
かなり↑の記事の影響を受けた

■ 参考 : 【zsh】設定ファイル(.zshrc)を用意する
function chpwd() {
 tmp1=`ls -U | wc -l`
 tmp2=20
 if [ $tmp2 -lt $tmp1 ]; then
   ls -UC --color=always | head -2
   echo " ..."
   ls -UC --color=always | tail -2
   echo " *** $(( tmp1 - $tmp2 )) out of $tmp1 files are omitted ***"
 else
  ls
 fi
}




(2020/10/18 追記)

iTerm2を起動してからtmuxに入ると
iTerm2で~/.zshrcが読み込まれて、tmuxでも~/.zshrcが読み込まれる

なのでPATHが重複する・・・


■ 参考 : tmux利用時にPATHが重複する問題

調べてみたら、~/.zshrcに以下のように書いておけばOK
typeset -U PATH
他にも
if [[ -z $TMUX ]]; then
 PATH=(任意のディレクトリ)/bin:PATH
fi
という案もあるらしいが、1行で済むならそっちのが楽






(2023/10/04 追記)

ファイルをscpすることが何度もあるので、それをaliasにしておきたい
ただ、引数が必要なので関数として定義する($1を使うとaliasの中でも引数を使えるという記事があったけど、うまくいかず・・・ $1の前後にスペースが必須なのかも?)

以下コード例
dateという引数を受け取って、空だったら何もしない
空じゃなかったら、何か処理をする
alias scp_hoge='_scp_hoge'
function _scp_hoge() {
 date=$1
 if [ -n "$date" ]; then
  # do somwthing related to $date
 else
  echo "error : scp_hoge requires the date (such as 0930)"
 fi
}







$ touch .zprofile

.zprofileに以下を追記
autoload -U compinit
compinit

$ /bin/zsh
$ source ~/.zprofile
$ ls - [ここでタグを押す]

とりあえず試してみたらわかるヤバさ(便利さ)


source ~/.zprofileが必要なのは、シェルを一時的に切り替えただけやとこのファイルが読み込まれないから
デフォルトシェルにしたら不要










■ pngをepsに変換する

ImageMagickのconvertコマンドでやる
convert hoge.png eps2:hoge.eps

出力先のファイル名の前に eps2: をつけるのが大事
これがないと、ファイルのサイズが10倍くらい大きくなっちゃう
eps: でもダメっぽい



■ pdfからepsに変換する
pdftops -eps hoge.pdf

でhoge.epsが生成される

pdftopsというコマンドはport経由でインストールした
sudo port install poppler










こんな感じ
sh-4.2$ echo $(( 100 + 008 * 300 ))
sh: 100 + 008: value too great for base (error token is "008")
sh-4.2$ echo $(( 100 + 009 * 300 ))
sh: 100 + 009: value too great for base (error token is "009")
sh-4.2$ echo $(( 100 + 007 * 300 ))
2200
sh-4.2$ echo $(( 100 + 005 * 300 ))
1600

■ 参考 : 先頭0埋めの値の演算


原因は、頭に0が付いている数字は8進数だと考えられるらしい(どういうことかわからぬ・・・)

exprを使えば008とかでも計算できるらしいが、exprは遅いからなぁ〜・・・

まぁ、ひとまずこういうことも起こるということを覚えとけばこのトラブルは回避できそう







関連記事

■ 過去記事 : 【condor】について調べたのでメモ





condorは1つのジョブを走らせて、それを見届けてくれる
DAGmanはcondorの拡張版みたいなものっぽい

ジョブA, B, Cと3つのジョブを走らせるとして、
Aが終わったらBを、Bが終わったらCを走らせる
みたいなそれぞれのジョブを関連付けて走らせることができる

詳しくは↓にある図を見てもらうとすぐに分かるかと
■ 参考 : Workflow management with DAGMan


ジョブA→B→CみたいなのはLinear型と呼ばれるらしい
上記のページのDAGman用サブミットファイルは
######DAG file######
##### Define Jobs ###
##### JOB JobName JobDescriptionFile
JOB A0 namd_run_job0.submit
JOB A1 namd_run_job1.submit
JOB A2 namd_run_job2.submit
JOB A3 namd_run_job3.submit

##### Relationship between Jobs ###
##### PARENT JobName CHILD JobName
PARENT A0 CHILD A1
PARENT A1 CHILD A2
PARENT A2 CHILD A3
みたいな感じ

最初にジョブの名前とそれぞれのサブミットファイルを定義
その後でジョブの関連を書くっぽい



あとはジョブA〜Cの前後にプリプロセスとポストプロセスを走らせることもできるらしい
######DAG file######
##### Define Jobs ###
##### JOB JobName JobDescriptionFile
JOB A0 namd_run_job0.submit
JOB A1 namd_run_job1.submit
JOB A2 namd_run_job2.submit
JOB A3 namd_run_job3.submit

##### Relationship between Jobs ###
##### PARENT JobName CHILD JobName
PARENT A0 CHILD A1
PARENT A1 CHILD A2
PARENT A2 CHILD A3

##### PRE or POST processing of a job
##### SCRIPT PRE/POST JobName ProcessScript
SCRIPT PRE A0 pre-script-temperature.sh
SCRIPT POST A3 post-script-energy.sh
シェルスクリプトになってるけど、ファイルの入出力があるならすべて絶対パスで書く必要がありそう


他の例として、
Aが終わったらBとCを走らせる
BとCが終わったら、Dを走らせるとかしたい場合は

■ 参考 : Node Job Submit File Contents

# File name: diamond.dag
#
JOB A diamond_job.condor
JOB B diamond_job.condor
JOB C diamond_job.condor
JOB D diamond_job.condor
PARENT A CHILD B C
PARENT B C CHILD D





(2021/11/08 追記)

ここのDAGの例も参考になるかも

■ 参考 : 2.10.7.9 DAG Splicing


どこにも書いてなかったのでこれもメモ
condor_submit_dagで走らせたジョブの関連の仕方は
condor_q -dag
で見るとわかりやすい





■ 参考 : スラッシュを置換してみる

によると、#を区切り文字に使えばいいらしい
そうすると s/aaa/bbb/g が s#aaa#bbb#g と書ける
aaaの中に/が入ってても動くようになる
echo "/123/" | sed "s#/#abc#g"
abc123abc





ffmpeg -i input.mp3 -vn -af "atempo=1.2" output.mp3

で1.2倍





■ 参考 : 【 du 】コマンド――ディスクの使用量を表示する

オプションメモ
-h : 数字をわかりやすくする、KBとかMBとかGB
-c : トータルを表示する
-d1 : どこまで深く表示するかを選べる、-d2とかみたいに
du -h -c -d1 .









プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST

print "先月子供が産まれました!"

# 最終更新 2022/10/25
カウンター
カウンター カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

flickr難民の写真置き場
(20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)

教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定
(阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)

英語論文執筆用の例文検索サービス
(とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)


Template "simple02" by Emile*Emilie
忍者ブログ [PR]