編譯時如果遇到 relocation truncated to fit 錯誤,那編譯時就加入
-shared-intel -mcmodel=medium
例如:
ifort -shared-intel -mcmodel=medium mycode.f90
如果用的是動態陣列,不會先知道用多大的陣列,可以編譯過關
但是執行時可能會遇到 segment fault 錯誤
那就執行程式前使用下列命令
ulimit -s unlimited
mkdir roms cd roms svn co --username CMD https://www.myroms.org/svn/src/trunk <---這是roms主程式 svn co --username CMD https://www.myroms.org/svn/src/test <---測試範例找一個範例來試,DAMEE_4,它在 test/DAMEE_4目錄下 DAMEE_4包含三個子資料夾Data scoord11 scoord22, 再到scoord11中 修改 build.bash
cd test/DAMEE_4/scoord11 vi build.bash export MY_ROOT_DIR=${HOME}/roms <--主要是看你的trunk是放哪 # 以下的平行設定只有用到openmp…因為只有一台多核心電腦,沒有cluster # export USE_MPI=on # distributed-memory parallelism # export USE_MPIF90=on # compile with mpif90 script ##export which_MPI=mpich # compile with MPICH library ##export which_MPI=mpich2 # compile with MPICH2 library # export which_MPI=openmpi # compile with OpenMPI library export USE_OpenMP=off # shared-memory parallelism # 說過了,慣用ifort export FORT=ifort #export FORT=gfortran # export FORT=pgi # 關掉debug,注意!!!netcdf 4以後版本一定要設USE_NETCDF4=on # 注意2!! netcdf4以後版本理論上會在netcdf/bin資料夾中有一個nc-config 確定一下它的位置在path中 # 也就是你可以直接 nc-config 即可成功執行,不需打路徑。如果沒辦法的話,就想辦法讓它能被執行吧。 # #export USE_DEBUG=on # use Fortran debugging flags export USE_LARGE=on # activate 64-bit compilation export USE_NETCDF4=on # compile with NetCDF-4 library #export USE_PARALLEL_IO=on # Parallel I/O with Netcdf-4/HDF5 # 下面這一行不打開,就沒有什麼要設定的啦… #export USE_MY_LIBS=on # use my library paths below改完之後執行 ./build.bash 會產生一個OceanO 可執行檔(如果沒有用open_mp的話,就是oceanS) 執行方法如下:
ln -s ../Data/netcdf4/* ./ export OMP_NUM_THREAD=4 <---看你要用幾個核心 ./oceanO < oecea_damee_4.in > log &注意:不知道為什麼,一定要把輸出結果轉到一個檔案…不然會segment fault。
./configure --prefix=/usr/local/zlib --shared make make install註:如果 --prefix=/usr/local/zlib 是讓zlib裝在 /usr/local/zlib 資料夾中。這樣裝的好處是方便管理,缺點是 lib 與 includ 所在地要另外告知系統(就是讓系統知道他們被放在/usr/local/zlib 中。通常我的作法是寫一個script放在/etc/profile.d中,內容如下:
#! /bin/bash ZLIBHOME=/usr/local/zlib if [ -z "${LIBRARY_PATH}" ] then LIBRARY_PATH="$ZLIBHOME/lib" export LIBRARY_PATH else LIBRARY_PATH="$ZLIBHOME/lib:${LIBRARY_PATH}" export LIBRARY_PATH fi if [ -z "${LD_LIBRARY_PATH}" ] then LD_LIBRARY_PATH="$ZLIBHOME/lib" export LD_LIBRARY_PATH else LD_LIBRARY_PATH="$ZLIBHOME/lib:${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH fi安裝szip-2.1
http://www.hdfgroup.org/ftp/lib-external/szip/2.1/src/szip-2.1.tar.gz tar zxvf szip-2.1.tar.gz cd szip export F77=ifort ./configure --prefix=/usr/local/szip make all make install二、安裝 hdf5 同zlib,如果我們不是裝在預設的資料夾,就需要告訴系統lib與includ放哪。拿上面的script一下即可。
export FC=ifort ./configure --prefix=/usr/local/hdf5 --enable-fortran --enable-hl --enable-shared --with-szlib=/usr/local/szip --with-zlib=/usr/local/zlib make make check make install make check-install
wget http://www.hdfgroup.org/ftp/lib-external/jpeg/src/jpegsrc.v6b.tar.gz tar zxvf jpegsrc.v6b.tar.gz cd jpeg-6b export F77=ifort ./configure --prefix=/usr/local/libjpeg make all # 需要自行新增資料夾… mkdir /usr/local/libjpeg/bin mkdir /usr/local/libjpeg/man mkdir /usr/local/libjpeg/man/man1 make install mkdir /usr/local/libjpeg/include make install-headers mkdir /usr/local/libjpeg/lib make install-lib四、安裝 hdf4
#因為gdal要新版,epel裏的太舊,所以要自己裝,重點是,如果這個 hdf4 打算讓gdal用,就必需加上下面三行 export CFLAGS="-fPIC" export CXXFLAGS="-fPIC" export LIBS="-lm" export F77=ifort ./configure --prefix=/usr/local/hdf4 --with-szlib=/usr/local/szip --disable-netcdf --disable-fortran --enable-shared #./configure --prefix=/usr/local/hdf4 --with-zlib=/usr/local/zlib --with-szlib=/usr/local/szip --with-jpeg=/usr/local/libjpeg --enable-fortran make make check make install # 因為hdf4的bin裏也有叫做ncdump 與ncgen的執行檔,和netcdf取同樣名子,所以把它改掉。 cd /usr/local/hdf4/bin mv ncdump h4dump mv ncgen h4gen
yum install libcurl-devel.x86_64 wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.1.1.tar.gz tar zxvf netcdf-4.3.1.1.tar.gz cd netcdf-4.3.1.1 ./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --enable-dap CPPFLAGS="-I/usr/local/hdf5/include -I/usr/local/zlib/include" LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib" make make check make install wget http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.2.tar.gz tar zxvf netcdf-fortran-4.2.tar.gz cd netcdf-fortran-4.2 #./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-shared CPPFLAGS="-I/usr/local/netcdf/include -I/usr/local/hdf5/include -I/usr/local/zlib/include" LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib -L/usr/local/netcdf/lib" #因為系也另外裝了netcdf,所以要注意LD_LIBRARY_PATH裏的順序,我們裝的netcdf要放前可,不然會用到系統裝的,會有問題。 #所以如果用上面的方法出現錯誤,可能是這個原因,那就改用下面的方法 CPPFLAGS="-I/usr/local/netcdf/include -I/usr/local/hdf5/include -I/usr/local/zlib/include" \ LD_LIBRARY_PATH=/usr/local/hdf5/lib:/usr/local/zlib/lib:/usr/local/netcdf/lib:${LD_LIBRARY_PATH} \ LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib -L/usr/local/netcdf/lib" \ LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl" \ ./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-shared --prefix=/usr/local/netcdf安裝 netcdf 4.1.3
yum install curl-devel.x86_64 ./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --enable-dap CPPFLAGS=-I/usr/local/hdf5/include LDFLAGS=-L/usr/local/hdf5/lib make make check make install
./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --with-hdf5=/usr/local/hdf5 make make check make install
R1="-R114.5/150.5/14.5/55.5" slonl=117 slonr=125 slatt=27 slatb=18 FN500m=taidpv626_500m.xyz OFN=decetop.dat DELTX="-I5m/5m -S2m -N1" grd2xyz ETOPO2v2g_f4.nc -fg $R1 | gawk '! ($1 > L && $1 < R && $2 > B && $2 < T) {printf"%8.4f %8.4f %7.1f\n", $1, $2, -1*$3}' L=$slonl R=$slonr T=$slatt B=$slatb > $OFN gawk '{print $1, $2}' decetop.dat | psxy $R1 -JM5i -S+0.01 -W0.001c -Ba10f5SWne -P -K > decetop.ps pscoast -R -JM -B -G104 -Df -O -W0.01,104 >> decetop.ps cat $FN500m >> $OFN makecpt -Cseis -T-8000/8000/500 -Z > colors.cpt nearneighbor $OFN $R1 $DELTX -Gbath.grd 1>/dev/null 2>&1 grdview bath.grd $R1 -JM5i -Qi100 -V -Sc -Ccolors.cpt -P -K > bath.ps pscoast -R -JM -B -G104 -Df -O -W0.01,104 >> bath.ps grd2xyz bath.grd -fg $R1 | gawk '{printf"%8.4f %8.4f %7.1f\n", $1, $2, $3}'> resample_$OFN ps2epsi decetop.ps decetop.eps eps2jpg -d 600 -f decetop.eps ps2epsi bath.ps bath.eps eps2jpg -d 600 -f bath.eps rm -f decetop.ps decetop.eps bath.ps bath.eps
#!/usr/bin/perl # 及時封鎖使用 "暴入法" 入侵的使用者(SSH) # 技術支援: http://www.vixual.net/ # 原著者是 vixual (應該是吧!) # chmod 755 block_ssh.pl # 編輯 /etc/hosts.allow,加入 # sshd : ALL : spawn (/root/bin/block_ssh.pl %c %d) # 這樣就完成了,如有必要,請自行修改 block_ssh.pl 裡相關的參數。 # 以上取自原作者的網站 # ==相關參數== #記錄 ssh 連線的 LOG 檔,預設: /var/log/secure $log_file = "/var/log/secure"; #於多久的時間內嘗試登入(秒),預設: 1 小小時 $time_range = 1 * 60 * 60; #於 $time_range 所設定的時間內,嘗試登入失敗多少次立即封鎖 IP,預設: 10 次 $drop_count = 10; #寄件通知,預設收件者: root@localhost $mail = 'cmd@www.lapom.no-ip.org'; #寄件程式的位置 $sendmail = "/usr/sbin/sendmail"; #==== use Time::Local; $ip = $ARGV[0]; $daemon = $ARGV[1]; $count = 0; $ip =~ s/::ffff://; %month = ( Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5, Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11 ); $time = time(); ($second,$minute,$hour,$day,$month,$year) = localtime($time); #取得登入失敗的 logg @list = `cat $log_file | grep "sshd.*Failed password.*$ip "`; for(my $i = $#list; $i >= 0; $i--){ #取得 log 的時間 my($log_month,$log_day,$log_time) = split(/ +/,$list[$i]); my($log_hour,$log_minute,$log_second) = split(/:/,$log_time); #前一年的記錄 if($log_month > $month){ $log_year = $year - 1; }else{ $log_year = $year; } #將時間轉為秒數 $log_time = timelocal($log_second,$log_minute,$log_hour,$log_day,$month{$log_month},$log_year); if($time < $log_time + $time_range ){ $count++; }else{ last; } } if($count > $drop_count){ #封鎖 IP `iptables -I INPUT -p tcp -s $ip --dport 22 -j DROP`; if($mail){ #寄件通知 $hostname = `hostname`; $month++; $year += 1900; chomp($hostname); open(MAIL, "| $sendmail -t") || die "Can't open $sendmail !\n"; print MAIL qq|To: $mail\n|; print MAIL qq|Subject: [$hostname]封鎖 $ip\n|; print MAIL qq|Content-Transfer-Encoding: 8bit\n|; print MAIL qq|Content-type: text/plain\; charset=Big5\n\n|; print MAIL "\n時間: $year-$month-$day $hour:$minute:$second\n----\n使用者 \"$ip\" 嘗試以 SSH 登入伺服器,共失敗 $count 次,已於防火牆封鎖該 IP。\n\n"; print MAIL @list; close(MAIL); } } exit;
#****************************** #ssh client menu script by CMD # 2010.02.25 #****************************** # specify PC's IP address here # 把常用的電腦IP加在這裏 PC[1]="192.168.69.247" PC[2]="192.168.69..243" PC[3]="192.168.69..122" PC[4]="192.168.69..141" #*********************************** # do not need to be changed from here REPEAT_LOOP=1 while [ "$REPEAT_LOOP" = 1 ]; do clear echo " Lazy ssh....." I=0 for Spc in "${PC[@]}";do I=`expr $I + 1` echo " $I. ssh to $Spc." done I=0 for Spc in "${PC[@]}";do I=`expr $I + 1` echo " X$I. ssh -X to $Spc." done echo " X|x. EXIT." echo " " echo -n "Please type a selection: " read usr_choice &> /dev/null if (( $usr_choice > 0 && $usr_choice <= $I )) ; then echo "ssh ${PC[$usr_choice]}..." ssh ${PC[$usr_choice]} elif ([ $usr_choice = "X" ] || [ $usr_choice = "x" ]) ; then echo "Exiting ......" exit else tmp=`echo "$usr_choice" | sed s/X// | sed s/x// ` if (( $tmp > 0 && $tmp <= $I )) ; then echo "ssh -X ${PC[$tmp]}..." ssh -X ${PC[$tmp]} else echo "Invalid Choice. Please try again." REPEAT_LOOP=1 fi fi done
ulimit -s unlimited
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
/etc/security/limits.conf 加一行: * hard stack unlimited
gawk '{print $1, $2, $5, $6}' file
gawk '{print $1, $2, $5*10, $6*10}' file
SCALE=10 gawk '{print $1, $2, $5*$SCALE, $6*$SCALE}' file
SCALE=10 gawk '{print $1, $2, $5*sca, $6*sca}' sca=$SCALE file
gawk 'sum=sum+$1 {print $1, sum}' sca=$SCALE file
gawk 'sum=sum+$1; ss=ss+$2 {print $1, sum, $2, ss}' sca=$SCALE file