トップページunix
1001コメント272KB

くだらない質問はここに書き込め!なんでもアリ33

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
UNIX板は、2chのサポートセンターではありません。
批判、要望は以下へ。
2ch批判要望 http://qb.2ch.net/accuse/

NGワード
* UNIXって何? (http://pc3.2ch.net/test/read.cgi/unix/998779290/)
* UNIXとLinuxの違いは何? (http://pc3.2ch.net/test/read.cgi/unix/1024558135/)
* 2ch閉鎖の危機をUNIX板が救ったという話{は本当? | を知った。有り難う! | のflashはどこ?}

禁止事項
* 既出・内容なし・マルチポスト・アスキーアート各種・ネタage・宿題の丸投げ

注意事項
* 荒らしは無視が鉄則
* Unixと関係ない質問/話題は、よけいな相手をせず適切な板に誘導。
* シュッ・シュッ

書く前にぐぐれ http://www.google.co.jp/
2ch総合検索サイト http://2ch.dyn.to/

過去ログなどは >>2-5
0482名無しさん@お腹いっぱい。NGNG
>>481
何度も出てるな。
Solaris スレで銃タンに教えてもらってこい。
0483名無しさん@お腹いっぱい。NGNG
今年新卒の私は3つ上の先輩に
 Solaris→OS
 SunOS→カーネル
って習いました。でもなんか違う気がしてる…。
テスト仕様書にはSolarisって書いてあるんだけど
unameするとSunOSって出る。
忘れようとしてたけど、また気になって寝れない。
0484483NGNG
>482
すいません。スレ違いの質問に釣られてしまいました。
0485名無しさん@お腹いっぱい。NGNG
1〜100までの素数をリストアップするcshのシェルスクリプト教えてください。
0486名無しさん@お腹いっぱい。NGNG
C で書け。
0487名無しさん@お腹いっぱい。NGNG
#include<stdio.h>
int main(void){
int i, j, prime;
for(i=2; i<100; i++){
prime=1;
for(j=2; j<=i/2; j++)
if(!(i%j))prime=0;
if (prime)printf("%dは素数\n", i);
}
return 0;
}
0488名無しさん@お腹いっぱい。NGNG
マウスを別のターミナルまで移動すれば、そのターミナルが
アクティブになるよね?つまり、別のターミナルを使うために
マウスをいじったわけだが、これをマウスを使うのではなく、
キーボードの操作からやるにはどうすればいいのかな?
0489488NGNG
説明が足りなかったね。
#kterm &
とコマンドをうつんじゃなくて、もともと複数のターミナルが
存在していて、一方のターミナルからもう一方のターミナルを
使用するとき、という意味。
0490名無しさん@お腹いっぱい。NGNG
>>489
使ってるwmのman見れ
0491名無しさん@お腹いっぱい。NGNG
>>485
1から100までの素数がかかれているファイルを使うのは反則でつか?
0492 ◆5c5udzFPUI NGNG
確かよ。デーモン君のイカした壁紙提供してるジャパニーズがいたよな。
俺、お気に入りに入れていたんだけどこないだのサッサー騒動でクリーン
インストールしたからわからなくなっちゃったんだよ。
もう一度教えてくれ!!
0493名無しさん@お腹いっぱい。NGNG
×イカした
○イカれた
0494名無しさん@お腹いっぱい。NGNG
Solarisの/bin/shにはletがなかった。
...要するに暇なんです。
#!/bin/sh
isPrime() {
n=${1};
odd=`echo ${n} % 2 | bc`;
if [ ${odd} -eq 0 ]; then return 0; fi
i=3; flag=0;
while [ `expr ${i} \* ${i}` -le ${n} ]; do
tmp=`echo ${n} % ${i} | bc`;
if [ ${tmp} -eq 0 ]; then flag=1; break 1; fi
i=`expr ${i} + 2`;
done
if [ ${flag} -eq 1 ]; then return 0; else return 1; fi
}
while :; do
TMP="/tmp/hoge";
dialog --title "素数のなにか" \
--clear --inputbox "number (0 to exit)" -1 -1 2>| /tmp/hoge

if [ -f ${TMP} ]; then num=`cat ${TMP}`; rm -f ${TMP};
else echo "error"; exit 0; fi

if [ -z ${num} ] || [ ${num} -lt 1 ]; then exit 0;
else isPrime ${num}; res=$?; fi

if [ ${res} -eq 1 ]; then dialog --clear --msgbox \
"ひょっとすると${num}は素数のような気がするかもしれません!!" -1 -1;
else echo "false"; sleep 1; fi
done
0495名無しさん@お腹いっぱい。NGNG
csh じゃないじゃん
0496名無しさん@お腹いっぱい。NGNG
禁止事項:宿題の丸投げ
0497名無しさん@お腹いっぱい。NGNG
#!/bin/sh

cat <<EOF | gcc -xc - -o /tmp/prime.$$ && /tmp/prime.$$ && rm -f /tmp/prime.$$
#include<stdio.h>

int main(void){
int i, j, prime;
for(i=2; i<100; i++){
prime=1;
for(j=2; j<=i/2; j++)
if(!(i%j))prime=0;
if (prime)printf("%dは素数\n", i);
}
return 0;
}
EOF
0498名無しさん@お腹いっぱい。NGNG
>>495-496
だから正答を書かないように苦労してるんじゃないか。
0499名無しさん@お腹いっぱい。NGNG
>>497 ありがとうございます。
      助かります。
 
>>496 シェルスクリプト 教えてくれる掲示板ってご存知ですか?
0500名無しさん@お腹いっぱい。NGNG
499はありがとうございますといっているところをみると
497がcshのスクリプトだと思っているのだろうか
0501497NGNG
>>499
( ゚д゚)ポカーン
0502名無しさん@お腹いっぱい。NGNG
わらた
0503名無しさん@お腹いっぱい。NGNG
お前らイイ!

イイヨー!!
0504名無しさん@お腹いっぱい。NGNG
正解はこれ

#!/bin/csh
primes 1 100
0505名無しさん@お腹いっぱい。NGNG
Emacs ??????????Emacs ???????????????
????????????DOS???????????????
0506名無しさん@お腹いっぱい。NGNG
文字化け?
0507エスパーNGNG
>>505
Demacs
0508名無しさん@お腹いっぱい。NGNG
>>505
mifes
0509名無しさん@お腹いっぱい。NGNG
すみません。Emacs に関しての質問です。Emacsで下の方に
ファイルネームが表示されますが、その左に
-u:--
とある時と
--(DOS)--
とある時があります。これはどう違うのでしょうか。
0510名無しさん@お腹いっぱい。NGNG
改行コード
0511名無しさん@お腹いっぱい。NGNG
510さん

もうちょっと詳しく教えて頂けたら嬉しいです。お願いします。
0512510NGNG
emacs使ってないんでよく知らんが多分改行コードが
0x0d 0x0a だと DOS って出るんじゃないの?
バイナリエディタとかでみてみ
0513名無しさん@お腹いっぱい。NGNG
510さん

早速のお返事どうもありがとうございました。エディタはEmacs しか
使った事がなかったのですが、とりあえずバイナリエディタを探してみます。
改行コードについても調べてみます。
0514名無しさん@お腹いっぱい。NGNG
513はバイナリエディタを普通のエディタの一種だと思ってる





間違いない
0515名無しさん@お腹いっぱい。NGNG
禿丸エディタとかの仲間みたいなもんか
0516名無しさん@お腹いっぱい。NGNG
 │  ヽ( ,_ノ`)ノ 私のバイナリエディタを進呈しよう (下半身略
0517名無しさん@お腹いっぱい。NGNG
>>513
hd -C file
0518名無しさん@お腹いっぱい。NGNG
(´-`).。oO(M-x hexl-find-file...)
0519名無しさん@お腹いっぱい。NGNG
ところでお舞いら、どんな方法でドットファイルのバックアップを行っておりますか。

-----
#!/bin/bash


BACKUPLIST=".Xmodmap .Xresources .bashrc .canna .emacs .emacs-w3m .ircrc .mlclockrc .mlterm .ratpoisonrc .screenrc .xsession elisp .vimrc"

cp -uvr $HOME/${BACKUPLIST} .
-----

rsyncつかうほど大きなファイルもないので、こんなことしていますが、このスクリプトに、汚い表現、バグなどあったら教えていただけるとありがたいでつ。

それとも、やっぱりrsync使った方がいいのでしょうか。

単に、tar czvf `date +%y+%m+d`.tgz ${BACKUPLIST}したほうがよいかな。


0520519NGNG
tarコマンドが間違っているから、自分で直さんと
0521名無しさん@お腹いっぱい。NGNG
>>519
すなおに .?*じゃだめなのか?
0522519NGNG
もしかして>>519のスクリプト使えない?さっきは使えたような気がしたけど、よくみたら使えるはずがない。

わけわかめ。たすけt。
for f in $BACKUPLIST;do
cp -uvr $HOME/$f .;
done

でいいの?
0523名無しさん@お腹いっぱい。NGNG
subversion 使ってる。少し前は cvs だた。
0524519NGNG
>>521
ドットファイル以外も含む予定なんで。elispは.elispに改名すればいいけど。
0525522NGNG
for文だと効率わるい?

いちいち
cp foo .
cp bar .

よりもcp foo bar .のほうがいいとは思うんだが。
BACKUPLISTを、foo,barにすると見にくい。
いちいち
foo,\
bar,にするのもながったらしい。どうすべきか。
0526名無しさん@お腹いっぱい。NGNG
>>525
効率を気にするほどのファイル数なの?
つーか別にそこがボトルネックにはならんだろ
0527名無しさん@お腹いっぱい。NGNG
ヒアドキュメントとかじゃダメなのか?
0528522NGNG
>>526
いや別に効率を気にする程ではないけど、効率の酔い方法を覚えた方がいいかなぁと思って。
で、こんどは

変数にfoo,barをいれたところで、それを展開する方法が、さっきはわかったのにいまはわからなくなった。

HOGE="a,b"
echo $HOME/${HOGE}

さっきはこれでちゃんと
/home/hoge/a
/home/hoge/b
とでたはずなのに。でも逝けない。どこがさっきと違うんだろう。


0529522NGNG
>>527
ども。いま調べてみます。
0530名無しさん@お腹いっぱい。NGNG
>>528
むしろそれで逝けたら驚く. そんなシェルがあるのか?
素直にforでまわしとけ. ',' じゃなく' 'でくぎるんだぞ, '\n'でもいいけど.
0531519NGNG
>>528
うん。でもさっきはそれで逝けたような気がした。混乱して記憶が断片化したんだな。どうも。寝る。
for使わない方法で誰か知っていたら教えて下さい。
0532522NGNG
$ cp -uvr `echo $BACKUPLIST | sed "s:^: :g;s: : $HOME/:g" ` .


これって…汚すぎるかな。汚すぎるね。正規表現よくわかっていないもんね。
0533名無しさん@お腹いっぱい。NGNG
echo $HOME/${HOGE}
echo $HOME/{$HOGE}
の違い
0534530NGNG
>>533
それができるシェルって何? zsh?
手元の bash じゃできない.
0535名無しさん@お腹いっぱい。NGNG
手元のbashじゃできる。 2.05b
cshでは確実に出来るはず。

というわけで驚いて下さい >>530
0536名無しさん@お腹いっぱい。NGNG
擬似電卓プログラムの作成(awkプログラミング)

整数の2項演算(plus, minus, multiply, divide)を 対象として,
例えば,2+3などの文字列を受け取り,
その場で計算して答え(この場合は5)を表示する。
0537エスパーNGNG
>>1
> 禁止事項
> * 既出・内容なし・マルチポスト・アスキーアート各種・ネタage・宿題の丸投げ
0538名無しさん@お腹いっぱい。NGNG
awk '{system("echo " $0 "| bc") }'

これで○もらえたら嫌だな…。
0539名無しさん@お腹いっぱい。NGNG
>>533
$ HOGE=".bashrc,.emacs"
$ echo $HOME/{$HOGE}
/home/unko/{.bashrc,.emacs}
$ cp $HOME/{$HOGE} .
cp: cannot stat `/home/unko/{.bashrc,.emacs}': そのようなファイルやディレクトリはありません

ということで、できません。
0540名無しさん@お腹いっぱい。NGNG
>>536
#shutdown -p now

real:
dash to caliculator;
0541名無しさん@お腹いっぱい。NGNG
>>538
はたからなんだけど
bc丸投げでワロタ
0542名無しさん@お腹いっぱい。NGNG
* 丸投げには丸投げで対処
0543522NGNG
結局これが一番シンプルだろうか。
$ (cd;cp -uvr $BACKUPLIST $OLDPWD)

0544名無しさん@お腹いっぱい。NGNG
>>536
% cat calc.awk
#!/usr/bin/awk -f
BEGIN {
 for (n = 0; n < 256; n++)
  chr[sprintf("%c", n)] = n
}
{
 gsub(/ +/, "", $0)
 system("w3m -dump http://www.google.com/search?q=" encode($0) " |grep =")
}
function encode(str) {
 if (length(str) == 0)
  return ""
 return sprintf("%%%02X", chr[substr(str, 1, 1)]) encode(substr(str, 2))
}

% ./calc.awk
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
[calc_img] 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
exp(4atan(1)sqrt(-1))
[calc_img] exp(4 atan(1) * sqrt(-1)) = -1
0545名無しさん@お腹いっぱい。NGNG
>>539
ま、メタキャラクタはシェルが解釈し、展開してからコマンドに渡すわけで。
0546名無しさん@お腹いっぱい。NGNG
>>545
この場合は展開の順番が重要ってこと。
0547名無しさん@お腹いっぱい。NGNG
引数に取ったファイルの絶対 path を出力するコマンドは、ありますか?
man で調べたら realpath と言うのがありましたが、
自前のコマンドでは問題有りなので。
0548名無しさん@お腹いっぱい。NGNG
>>547
#include <stdio.h>
#include <stdlib.h>
#include <sys/param.h>
#include <unistd.h>

int main(int argc, char **argv)
{
  char resolve_path[MAXPATHLEN];
  if (argc != 2) {
    fprintf(stderr, "usage: %s: path\n", argv[0]);
    exit(1);
  }
  if (realpath(argv[1], resolve_path) == NULL) {
    perror(resolve_path);
    exit(1);
  }
  puts(resolve_path);
  return 0;
}
0549547NGNG
一応、同じようなプログラムは、自分で書て使っていたのですが、
自前のコマンドが、使えない環境での shell script で必要になったので、
どうすればと、思ったのです。
basename みたいな感じのです。

# システム管理者を叩き殺さなければだめですか?
0550名無しさん@お腹いっぱい。NGNG
何のためにリアルなPATH がいるの?
basename 知ってるならdirname は知ってるよね?
その環境のOS は? OS によっては realpath(1) なんてのがあるけども
cd と pwd -P とか使えばいいのかな?
0551名無しさん@お腹いっぱい。NGNG
TERGET_DIR=`dirname $1`
pushd $TERGET_DIR
DIRPATH=`pwd -P`
popd
REALPATH=${DIRPATH}/`basename $1`

こんなかんじ?
0552名無しさん@お腹いっぱい。NGNG
すみませんが教えてください。

シェルスクリプトで、対話的な動作から、バックグラウンド動作に
自動で入っていくツールを書いています。

#!/bin/sh
echo this is test code.
nohup sh -s hoge <<EOF >> nohup.log 2>&1 &
    echo this is in nohup code.
    while [ -f hoge ]; do
        date
        sleep 10
    done
    echo finish
EOF
echo this is out of nohup.
echo end.

一応、hogeファイルがある間ループして、なくなったら処理して終了、
という目的は達成できそうなのですが、ps でチェックしたときに
プログラム名が「sh」になってしまって、killしたいときに、どれを
殺せばいいかわからなくなってしまいます。

シェルスクリプトの中から、psで見える自分の名前を変更することは
できないでしょうか。

環境はbash + Linuxです。
0553名無しさん@お腹いっぱい。NGNG
>>552
http://pc5.2ch.net/linux/
0554名無しさん@お腹いっぱい。NGNG
イタチGUY
0555名無しさん@お腹いっぱい。NGNG
>>552
そういえばpsででてくる名前か何かを変えるシステムコールがあったような。
inetdで使われてる。
それを使ってるコマンドもまたあったような。

まぁ板違い
0556名無しさん@お腹いっぱい。NGNG
>>555
いくらでもあるだろ。
基本的にargv[]書き変えりゃいいだけだ。
setproctitle(3)があればそれを使え。
0557名無しさん@お腹いっぱい。NGNG
555じゃないけど、
argvって書き換えてもいいんだよね。
文字列りてらると同じような領域に記憶されるのと勝手に勘違いしてた。
ベンキョになりました。

0558名無しさん@お腹いっぱい。NGNG
>>556
> 基本的にargv[]書き変えりゃいいだけだ。

本当ですか?
0559555NGNG
>>556
そうそうそれそれ

NetBSD1.61のinetdがクランチすると
おかしくなるのを調べてた時知りました。

http://www.freebsd.org/cgi/man.cgi?query=setproctitle&apropos=0&sektion=0&manpath=FreeBSD+5.2-RELEASE+and+Ports&format=html
argv[0]うんぬんかんぬんって書いてある。
0560名無しさん@お腹いっぱい。NGNG
execve の第2引数の事かな?
0561名無しさん@お腹いっぱい。NGNG
>>552-554
直前にbackground実行したプロセスのPIDは$!に入っているから

hoge >log 2>&1 &
pid=$!
while ps $pid >/dev/null 2>&1; done
  sleep 10
done

とかやればいいんじゃねえの? 別に板違いでもないだろう?
0562名無しさん@お腹いっぱい。NGNG
標準入力は以下のとおりです。
# cat test.txt
aaa.aaaタブxxxxx
bbb.cccタブxxxxx

で、一列目で"."が何バイト目で出現するかをリストとして出したいです。

awk 'BEGIN {FS="\t"}
{num=index("$1",".")}
{printf " %s\t%s\t%s\n", num,$1,$2}' ./test.txt

とやると、全てnumが"0"で返ってきてしまいます。
どうすればうまくnumの値を取れるでしょうか?
0563名無しさん@お腹いっぱい。NGNG
> {num=index("$1",".")}
{num=index($1,".")}
0564名無しさん@お腹いっぱい。NGNG
ある port が使用中かどうか判断するスマートな方法ないでしょうか。
netstat -n | grep port
ってのはエレガントでないし(;´Д`)
0565名無しさん@お腹いっぱい。NGNG
>>562
そっかー。何を考えてたんだろう・・・。
アホな質問に答えてくれてありがとうございます。
0566名無しさん@お腹いっぱい。NGNG
UNIXてどーゆう意味すか?
0567名無しさん@お腹いっぱい。NGNG
>>564
http://linux2ch.bbzone.net/index.php?FaqAfterInstall#content_1_48
そんなシステムコールがあるんなら俺も知りたい。
でも、結局スナップショットでしかないから意味ないんだろうな。
0568名無しさん@お腹いっぱい。NGNG
>>567
> そんなシステムコールがあるんなら俺も知りたい。
チミはbind(2)を知らないのかね?
0569名無しさん@お腹いっぱい。NGNG
>>564
bind(2)が失敗してEADDRINUSEなら使用中
0570名無しさん@お腹いっぱい。NGNG
>568
バインド知ってるよ。
エラーかどうかで判断するの?
それこそスマートじゃない気がする。
すでにバインドしてるPIDってわかるの?
0571名無しさん@お腹いっぱい。NGNG
>>564
netstat -n のソース嫁
0572名無しさん@お腹いっぱい。NGNG
>>570
使用済みである事を調べることは本質的じゃないという事だ。やりたいことは未使用のポートを使用(bind)することだろう。

藻前自身が>>567で書いているように、未使用という状態はスナップショットでしかないから余り意味が無い。
bind(2)して使用中にしておけば、開放するまでは使用中という状態が保証される。
0573名無しさん@お腹いっぱい。NGNG
>>570
> すでにバインドしてるPIDってわかるの?
システム依存。FreeBSDだったらsockstat(実体はfstat)のソース嫁。
0574名無しさん@お腹いっぱい。NGNG
>>572はエスパー?
0575名無しさん@お腹いっぱい。NGNG
>>572は伊東?
0576564NGNG
> 使用済みである事を調べることは本質的じゃないという事だ。やりたいこと
> は未使用のポートを使用(bind)することだろう。
そです。

> bind(2)して使用中にしておけば、開放するまでは使用中という状態が保証される。
今回はここまで大げさな話でもなかったので >>567 にあった
fuser -s -n tcp port
でいこうと思います。

レスくれた香具師らどーもでした。
0577名無しさん@お腹いっぱい。NGNG
dd(1)
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=dd&dir=jpman-5.2.0%2Fman§=0
を使って古いHDD(/dev/ad1)から新しいHDD(/dev/ad0)に
コピーを作っているのですが、

dd if=/dev/ad1 of=/dev/ad0

遅いです。
もうひとつコピーするのでmanページにあるオプションを指定して
少しでも早くしたいのですが、どう指定すればよいのでしょうか?
0578名無しさん@お腹いっぱい。NGNG
>>577
それだと512byte毎にsystem call発行するからな。
dd bs=16M 〜とかにしてみれ。
0579名無しさん@お腹いっぱい。NGNG
あ、16M の M は小文字かも。
0580名無しさん@お腹いっぱい。NGNG
ターミナルと端末エミュレータの違いを教えてください。
0581名無しさん@お腹いっぱい。NGNG
unixtimeって何ですか?
■ このスレッドは過去ログ倉庫に格納されています