<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    搬磚頭

    Knocking on Heaven's Door
    posts - 34, comments - 6, trackbacks - 0, articles - 0

    2007年3月5日

    RedHat Linux操作系統修改時區的方法
    Most modern Linux distributions have user-friendly programs to set the timezone, often accesible through the program menus or right-clicking the clock in a desktop environment such as KDE or GNOME. Failing that it’s possible to manually change the system timezone in Linux in a few short steps.
    It’s possible to change the system timezone in Linux in a few short steps.
    Steps
    1. Logged in as root, check which timezone your machine is currently using by executing `date`. You’ll see something like “Mon 17 Jan 2005 12:15:08 PM PST -0.461203 seconds”, PST in this case is the current timezone.
    2. Change to the directory to /usr/share/zoneinfo, here you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the “Americas” directory.
    3. If you wish, backup the previous timezone configuration by copying it to a different location. Such as `mv /etc/localtime /etc/localtime-old`.
    4. Create a symbolic link from the appropiate timezone to /etc/localtime. Example: `ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime`.
    5. If you have the utility rdate, update the current system time by executing `/usr/bin/rdate -s time.nist.gov`. (This step can be skip!)
    6. Set the ZONE entry in the file /etc/sysconfig/clock file (e.g. “America/Los_Angeles”)
    7. Set the hardware clock by executing: ` /sbin/hwclock –systohc`
    Tips
    · On some versions of RedHat Linux, Slackware, Gentoo, SuSE, Debian, Ubuntu, and anything else that is “normal”, the command to display and change the time is ‘date’, not ‘clock’
    · On RedHat Linux there is a utility called “Setup” that allows one to select the timezone from a list, but you must have installed the ‘redhat-config-date’ package.
    Warnings
    · Some applications (such as PHP) have separate timezone settings from the system timezone.
    · On some systems, /etc/localtime is actually a symlink to the appropriate file under the /usr/share/zoneinfo directory (rather than a copy of that file).
    · On some systems, there is a system utility provided that will prompt for the correct timezone and make the proper changes to the system configuration. For example,Debianprovides the “tzsetup” utility.
    Here is an example of changing the timezone: (Logged in as root)
    In order to manually change the timezone, you can edit the /etc/sysconfig/clockfile and then make a new soft link to /etc/localtime. Here is an example of changing the timezone manually to “America/Denver”:
    1. Select the appropriate time zone from the /usr/share/zoneinfo directory. Time zone names are relative to that directory. In this case, we will select “America/Denver”
    2. Edit the /etc/sysconfig/clocktext file so that it looks like this:
    ZONE=”America/Denver”
    UTC=true
    ARC=false
    Of course, this assumes that your hardware clock is running UTC time…
    3. Delete the following file: /etc/localtime (backup it when you need it !)
    4. Create a new soft link for /etc/localtime. Here is an example of step 3 and step 4:
    # cd /etc
    # ls -al localtime
    lrwxrwxrwx 1 root root 39 Mar 28 07:00 localtime -> /usr/share/zoneinfo/America/Los_Angeles
    # rm /etc/localtime
    # ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
    # ls -al localtime
    lrwxrwxrwx 1 root root 34 Mar 28 08:59 localtime -> /usr/share/zoneinfo/America/Denver
    # date
    Fri Mar 28 09:00:04 MST 2003


    針對中國時區,修改操作如下
    1.   修改文件 /etc/sysconfig/clock內容:
    ZONE=Asia/Shanghai
    UTC=false
    ARC=false
    2.     rm /etc/localtime
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    還有其他方法修改時區,不過是基于圖形化界面的命令: tzselect 、 timeconfig
    本文為鏡像,原貼在此:http://www.btk4ever.com/?p=10443

    posted @ 2009-04-28 09:35 生活在別處 閱讀(2162) | 評論 (0)編輯 收藏

    朋友搬到個新地方,沒有寬帶了,但是能收到些加密的無線網絡,挺想蹭網的,本人由于是所謂“挨踢”人士,自當義不容辭出手相助。

    我也只是想了解下WEP破解這事,目的也只是提醒大家一下要加強無線網絡安全,千萬不要干啥非法的事情,當然有本事的話,就把屁股擦干凈。

    其實前兩年我就知道WEP加密是極不安全的,而且也出于好奇做過密鑰破解的嘗試,但是由于破解軟件特別挑網卡,結果自然就是半途而廢了。這次到網上 再度查了點相關資料,發現這事情已然變得相當的簡單了,基本上只需要 BackTrack3 就可以搞定了。Backtrack 是一個黑客操作系統,其實也算是一個linux的黑客版,主要是安裝了很多實用的軟件和黑客工具,偏向于安全侵入方面的。

    我是下載了一個BackTrack3 的usb版本,并且下了最新的掃描工具spoonwep2,系統自帶的是spoonwep也能用,但是據說新版更好使,更方面。整個過程挺簡單的,機器設 置成usb可引導啟動,然后啟動進入usb上的BackTrack系統,都是圖形界面的,打開spoonwep2工具,掃描周圍的無線信號,選擇信號強 的,有客戶端連接,并且DATA包比較多的信號來破解吧,這樣應該可以快點,據說XX分鐘就能破解了。沒有客戶端連接的無線信號,據說有些AP也是同樣可 以破解的,無非是攻擊方式的變化以及花費的時間更長而已。

    我的經歷是,晚上10點多開始破一個無線信號,等了一個多小時,進度開始變緩慢,因為本來連著的兩個客戶端下線了,估計困搞去了…,很無奈,我也不 能傻等,只得也睡覺去了。第二天早上起來,1o點多的時候,才抓滿了要求的數據包,整個密鑰破解過程倒是瞬間完成,然后我看到的密碼是”1111111″ ,囧 rz,看來設無線密碼的人都很懶。這個過程還是挺漫長的,可能是沒選擇對正確的攻擊方式,導致數據包獲取的過程很長。假如有客戶端在BT下載,估計快很 多,要是只是qq聊天,那就要耗很久了。不過整個過程,已經相當的傻瓜化了。

    這事也不能說的太細,想了解詳細的人,網上查去吧,順便提供一個教程

    至于如何加強無線安全,有這么幾點(網上找的)

    如果你需要你的AP很難被破解,建議:
    1)用WPA 加密方式,并且使用不可能被字典猜到的密碼,目前還是基本可靠的
    2)如果只支持 WEP加密,那么,盡量考慮用隱藏 SSID的方式,這樣可以增加破解難度
    3)如果只支持 WEP加密,那么,可以考慮使用中文名字作為SSID,這樣基本問題不大。
    4)一般破解時候,大家都會選擇常用的頻道,例如 6頻道, 第三步顯示頻道的時候,你的AP也會被列出來,那么第一個目標失敗的時候,黑客往往會選擇第二個容易下手的目標, 但是如果你選擇了8、 4、這些奇怪的頻道,那么狠客往往懶得重新進入該頻道的監控模式,你就可以逃過一劫。不過, 某些廉價AP,往往對6 頻道做了優化,這個頻道信號最強….這就沒辦法了。
    5)有空換換你的密碼:)

    還有其他幾點也可以做,如減低信號、關閉DHCP、MAC地址綁定,當然這些措施也只是增加難度而已。

    最后提一下,蹭網是有風險的,無線信號不加密的,人家未必就是大善人或者菜鳥,而且還有人專門釣魚的,加大信號,設置簡單密碼,專門等蹭網的人來,數據包一抓,等著被玩吧。

    本文為鏡像,原貼在此:http://www.btk4ever.com/?p=10423

    posted @ 2009-04-28 09:33 生活在別處 閱讀(1190) | 評論 (0)編輯 收藏

    考慮把Live Space的日志轉移到Wordpress 架的blog去,郁悶的是Live Space并不支持通用的導出格式,要是一條條日志復制過去的話,這工作量也實在是夠嚇人的。只好到網上找解決辦法了,真搞不定的話,只能放棄Live Space的日志了。結果很不幸,被我找個一個Live Space Mover的工具,很華麗的搞定了動遷的工作。在此向作者Wei Wei致敬了,隨便介紹推廣一下。

    Live Space Mover 工具的說明在這里:http://b2.broom9.com/?page_id=519

    這個工具是通過Python腳本抓取live space的日志和留言,保存為wordpress支持的通用xml文件。最后將文件通過wordpress后臺管理提供的導入功能,將日志遷移過去。

    具體操作步驟就參照作者blog里的user guide,非常詳細的。

    大致過程是這樣:

    1.安裝Python的環境,并下載Beautiful Soup的類庫

    2.Google Code下載最近的Live Space Mover 工具(幾個python腳本)

    3.按照作者的要求,對space進行設置,主要是開放訪問權限和設置日期格式

    4.命令行方式執行腳本,開始日志抓取(腳本參數參照user guide)

    –如執行過程出現超時或者假死情況(我都碰到了…),關閉重新執行腳本即可,工具有cache文件,會從斷點開始繼續的

    5.將生成的xml文件導入wordprss

    工具目前還有一點瑕疵,下面這段話來自作者的blog,關于目前工具無法解決問題的說明,看來又是live space的怨念。

    After the live space updates in Dec 2008 (live space mover version 1.7), there are some limitations for comments, including:

    1. can’t get the accurate time of comments, sometimes even incorrect;

    2. can’t get the email and url of comment authors.

    These are both due to the ridiculous design of Live Space. If you have any idea about how to solve these 2 problems, please let me know.

    本文為鏡像,原貼在此:http://www.btk4ever.com/?p=10025

    posted @ 2009-02-17 17:00 生活在別處 閱讀(893) | 評論 (0)編輯 收藏

    已部署的一個JAVA程序最近需要改成定期執行,于是就放到crontab調度,結果遇到了中文亂碼問題。腳本在shell環境下直接運行沒有問 題。到網上收了一下,碰到這個問題的還真不少,結論是crontab執行時不會攜帶用戶的環境變量,缺失一些系統變量。需要在腳本里額外添加缺失的環境變 量,針對中文問題,需要聲明 LANG參數

    在腳本開頭增加:
    LANG=”zh_CN.GB18030″
    export LANG

    由于是中文問題,設置的編碼要和系統設置的一致,具體可以到/etc/sysconfig/i18n 查看對應的環境變量

    本文為鏡像:原帖在此:http://www.btk4ever.com/?p=10040

    posted @ 2009-02-17 16:55 生活在別處 閱讀(1417) | 評論 (0)編輯 收藏

    據說在oracle 10g的版本,在數據庫實例正常啟動open的情況下,直接通過命令類似" drop database 'dbname' "這種方式就可以刪除一個數據庫實例。
    這里說的是oracle 9i的情況下,不依賴其他工具的情況下,手工刪除一個數據庫實例。
    操作步驟為網上查來的,并經過我驗證通過,操作之前請確保該實例已經被停止,具體步驟見下:
    ========================
    To delete a database,
    First:
    Select "rm -f "||name from v$controlfile
    union
    select "rm -f "||name from v$datafile
    union
    select "rm -f "||member from v$logfile;
    Second:
    Clean up above output & make it executable
    Third:
    If installation follows OFA standard:
    remove directory $ORACLE_BASE/admin/$ORACLE_SID
    Fourth:
    Delete archive log directory (if archive mode)
    ============================
     

    posted @ 2008-11-11 11:49 生活在別處 閱讀(1646) | 評論 (0)編輯 收藏

    找一篇靠譜的教程來跟著做,是相當重要,不然就會吃藥,網上文章都是抄來抄去的,不然怎么死的都不知道個。
    我比較衰,找了一篇不是很靠譜的來做,結果越到了不少小問題。
    關于手工建庫,參照下面兩篇,應該是比較靠譜的。
    另外一篇比較靠譜的文章,地址如下:http://www.ixdba.net/hbcms/article/14/336.html
    ===============================================

    Red Hat Enterprise 3 + Oracle 10g Release 2

    $su – oracle

    1--- 設置系統環境變量:

    ORACLE_HOME=/opt/oracle/product/10.2

    ORACLE_BASE=/opt/oracle

    ORACLE_SID=dbtest

    ......

    2--- 系統規劃:

    實例名稱ORACLE_SID=dbtest

    數據庫名稱DB_NAME=dbtest

    3--- 手工創建如下目錄:

    /opt/oracle/admin/dbtest/cdump

    /opt/oracle/admin/dbtest/bdump

    /opt/oracle/admin/dbtest/udump

    /opt/oracle/admin/dbtest/pfile

    /opt/oracle/oradata/dbtest/

    /opt/oracle/oradata/dbtest/archive

    4--- 建立密碼文件:

    orapwd file=/opt/oracle/product/10.2/dbs/orapwd_dbtest password=superman

    5---修改參數文件:

    格式:/opt/oracle/product/10.2/dbs/init.ora

    實例:/opt/oracle/product/10.2/dbs/initdbtest.ora

    內容如下:

    ---------------------------------------------------

    dbtest.__db_cache_size=331350016

    dbtest.__java_pool_size=4194304

    dbtest.__large_pool_size=8388608

    dbtest.__shared_pool_size=138412032

    dbtest.__streams_pool_size=0

    *._kgl_large_heap_warning_threshold=8388608

    *.audit_file_dest='/opt/oracle/admin/dbtest/adump'

    *.background_dump_dest='/opt/oracle/admin/dbtest/bdump'

    *.compatible='10.2.0.1.0'

    *.control_files='/opt/oracle/oradata/dbtest/control01.ctl','/opt/oracle/oradata/dbtest/control02.ctl','/opt/oracle/oradata/dbtest/control03.ctl'

    *.core_dump_dest='/opt/oracle/admin/dbtest/cdump'

    *.db_2k_cache_size=33554432

    *.db_block_size=8192

    *.db_domain=''

    *.db_file_multiblock_read_count=128

    *.db_files=4000

    *.db_name='dbtest'

    *.db_recovery_file_dest_size=4294967296

    *.db_recovery_file_dest=''

    *.log_archive_dest='/opt/oracle/oradata/dbtest/archive'

    *.log_checkpoints_to_alert=FALSE

    *.open_cursors=300

    *.parallel_execution_message_size=65535

    *.parallel_max_servers=128

    *.pga_aggregate_target=209715200

    *.processes=150

    *.recyclebin='OFF'

    *.remote_login_passwordfile='EXCLUSIVE'

    *.replication_dependency_tracking=FALSE

    *.session_cached_cursors=100

    *.sga_target=500m

    *.shared_pool_size=100m

    *.undo_management='AUTO'

    *.undo_retention=0

    *.undo_tablespace='UNDOTS'

    *.user_dump_dest='/opt/oracle/admin/dbtest/udump'

    *.workarea_size_policy='AUTO'

    _allow_resetlogs_corruption=true

    ---------------------------------------------------

    可將此文件復制到:/opt/oracle/admin/dbtest/pfile/init.ora

    6--- 登陸oracle

    > sqlplus “/ as sysdba”

    7--- 啟動實例:

    SQL> startup nomount pfile=/opt/oracle/admin/dbtest/pfile/init.ora

    8--- 創建數據庫的腳本:

    -----------------------------------------------------------

    CREATE DATABASE dbtest

    LOGFILE

    GROUP 1 ('/opt/oracle/oradata/dbtest/redo01.log','/opt/oracle/oradata/dbtest/redo01_1.log') size 100m reuse,

    GROUP 2 ('/opt/oracle/oradata/dbtest/redo02.log','/opt/oracle/oradata/dbtest/redo02_1.log') size 100m reuse,

    GROUP 3 ('/opt/oracle/oradata/dbtest/redo03.log','/opt/oracle/oradata/dbtest/redo03_1.log') size 100m reuse

    MAXLOGFILES 50

    MAXLOGMEMBERS 5

    MAXLOGHISTORY 200

    MAXDATAFILES 500

    MAXINSTANCES 5

    ARCHIVELOG

    CHARACTER SET UTF8

    NATIONAL CHARACTER SET UTF8

    DATAFILE '/opt/oracle/oradata/dbtest/system01.dbf' SIZE 1000M EXTENT MANAGEMENT LOCAL

    SYSAUX DATAFILE '/opt/oracle/oradata/dbtest/sysaux01.dbf' SIZE 1000M

    UNDO TABLESPACE UNDOTS DATAFILE '/opt/oracle/oradata/dbtest/undo.dbf' SIZE 500M

    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/opt/oracle/oradata/dbtest/temp.dbf' SIZE 500M

    ;

    -----------------------------------------------------------

    9--- 運行如下文件(安裝下面的先后順序)

    /opt/oracle/product/10.2/rdbms/admin/catalog.sql

    /opt/oracle/product/10.2/rdbms/admin/catproc.sql

    10--- 創建相關表空間與用戶:

    CREATE TABLESPACE USERS DATAFILE '/opt/oracle/oradata/dbtest/users01.dbf' SIZE 1000M;---數據表空間

    CREATE TABLESPACE INDX DATAFILE '/opt/oracle/oradata/dbtest/indx01.dbf' SIZE 1000M;---在建立索引的時候把此表空間作為存儲空間,即單獨用一個表空間來存儲索引,這是個好習慣,雖然我們沒有辦法建立一個默認的索引表空間!

    CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE users ;---測試用戶

    GRANT CONNECT,RESOURCE TO test;

    11--- 一點注意的地方:

    1>.相關文件的目錄要設置正確,有數據文件,控制文件,參數文件等,還有就是它們的位置要與控制文件中指定的要一致。

    2>.init.ora中的undo_tablespace的名字必須要與create database的相同,包括大小寫等注意。否則很麻煩,報的錯誤你都不知道是不是在忽悠你!總之,一句話,控制文件中的內容要和init文件中的內容以及要和實際文件的實際情況要相同。

    3>.分析數據庫出錯可以到/opt/oracle/admin/dbtest/bdump/alert_dbtest.log中查找。

    ===============================================

     補充:

       我碰到的一個問題,在普通用戶sqlplus登錄時,碰到下面的告警提示  

        Error accessing PRODUCT_USER_PROFILE
    Warning: Product user profile information not loaded!
    You may need to run PUPBLD.SQL as SYSTEM

     請按照提示,以SYSTEM用戶登入SQL*Plus,然后執行PUPBLD.SQL,這個文件通常在$ORACLE_HOME/sqlplus/admin目錄中。
    SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql

    posted @ 2008-11-11 11:47 生活在別處 閱讀(682) | 評論 (0)編輯 收藏

    切割合并文件在linux下用split和cat就可以完成。下面舉些實例進行說明。
    1.文件切割
    文件切割模式分為兩種:
         文本文件
         二進制模式。
    1.1文本模式
    文本模式只適用于文本文件,用這種模式切割后的每個文件都是可讀的。文本模式又分為兩種:
         按最大文件大小切割;
         按文本行數切割。
    1.1.1最大文件大小切割
    split -C 5k duanxin split
    將文本文件duanxin按每塊最大5k的大小進行切割,不打碎行。輸出文件名類似splitaa, splitab……
    1.1.2 按文本行數切割
    split -l 100 duanxin split
    每個分塊100行,不考慮大小。日志分析時應該有用。
    1.2 二進制模式
    split -b 5k duanxin split
    每個分塊(當然,最后一個不保證)大小都是5k,基本不可讀。任何類型文件都可以用這種切割模式。
    2.文件合并
    cat split* >newduanxin
    不管用什么方式切割,合并方法不變。
    3.其它
    split可以用-a選項指定輸出文件名的長度。如
    split -l 100 -a 3 duanxin split
    則輸出文件出類似于splitaaa,splitaab。不指定時默認為2。
    用-b或-C指定分塊大小時,可用的單位有,b for 512bytes, k for 1Kbytes, m for 1 Megbytes.

    參考資料
    man split
    -----------------------------------------------------------
    找東西的時候發現網上都是講這個的,就隨手貼一下,據說分割還可以用DD命令
    我的需求用split好像是搞不定的,希望從文本的指定行數進行分割,最終找到一個方法,見下:
    sed -n '1001,2000p' ur-file >newfile
    隨后就發現,sed超級有用,有興趣的自己了解吧,附送一個介紹sed用法的文章:

    posted @ 2008-11-11 11:25 生活在別處 閱讀(3914) | 評論 (0)編輯 收藏

     

    今天晚上上網,打開網頁都很困難,查了查發現開著BT,關掉以后就正常。
    這種鳥事情,以前也碰到過,應該是TCP/IP并發連接數的問題,一查果然又被重置到了10。
    昨天是10號,是微軟每月發布安全補丁的日子,記得是有裝補丁個,估計就是那個補丁搞得鬼了。
    各位打了補丁的同志,去修改下系統連接數吧!

    posted @ 2008-07-11 21:46 生活在別處 閱讀(299) | 評論 (0)編輯 收藏


        今天試圖在gtalk上傳個文件,搗騰半天也耍不起來,最后驚奇的發現,原來中文版的gtalk是被閹割過的,少掉了不少功能。話說,google.cn也就是谷歌,也是被閹割過的,在這個和諧的國度里,就算你輸入google.com,你也去不了想去的地方,咱這里有偉大的GFW和DNS挾持。百度么,天生就閹掉的,谷歌至少還有行字“據當地法律法規和政策,部分搜索結果未予顯示。”讓你知道這玩意是太監,百度么看上去是個女人。
        我并不是google飯,但是google有些服務我倒一直在用。gmail、gtalk、reader、bookmark、picasa,還有那個工具條,有些東西用起來還挺爽的。但是你一旦知道,你常用的東西,有些是被閹割過的,總會有點疙瘩個。當然,有些閹割不能怪罪我們偉大的和諧國,比如把gmail語言換成英文,就會多出選項個。
        最后順帶提一下電影的閹割版,內地的剪刀手功力是相當的深厚,不僅可以把那玩意割掉,還不經意留下幾個彩蛋,提升一下片子的深度,贊一記個。
        最后的最后,問候一記GFW,上個月幾個網站又上不去了,連sourceforge也走掉了,罪過罪過!

    posted @ 2008-07-09 16:33 生活在別處 閱讀(362) | 評論 (0)編輯 收藏

    原帖地址在此:http://www.geektalks.cn/article.php?story=20080602125246318


    telnet發電子郵件的目的很多,我們暫且假設一番:如果你不幸落入恐怖份子之手,他們只有一臺瘦得不行的電腦,總之除了telnet程序啥都沒有,在恐怖份子去吃羊肉泡饃而疏于照看你的大好時機,你如何發電子郵件通知外界呢?



    當然,首先你要有一個支持中繼轉發的SMTP的帳號,幸運的是,現在即使免費的郵箱也會提供這個。

    假設你有一個geekx@126.com的郵箱,密碼是xgeek,則會話如下:(紅色的話是你要說的

     $ telnet smtp.126.com 25 # 25 為標準SMTP端口

    Trying 220.181.15.111...
    Connected to smtp.126.com (220.181.15.111).
    Escape character is '^]'.
    220 126.com Anti-spam GT for Coremail System (126com[071018])

    helo 126.com # 打個招呼先

    250 OK
    auth login # SMTP需要認證
    334 dXNlcm5hbWU6 # 這是個base64編碼的明文,翻譯過來是“username:"
    Z2Vla3g= # base64編碼的明文,翻譯過來是“geekx"
    334 UGFzc3dvcmQ6 # 這是個base64編碼的明文,翻譯過來是“password:"
    eGdlZWs= # base64編碼的明文,翻譯過來是“xgeek"
    235 Authentication successful
    mail from:<geekx@126.com>
    250 Mail OK
    rcpt to:<superman@savetheworld.com> # 發給XXX
    250 Mail OK
    data #開始寫信
    354 End data with <CR><LF>.<CR><LF>

    subject:Help!!
                                      #這里空一行再寫正文
    The world is under attack,

    Terrorists are eating yang—rou—pao—mo...
                                      #寫完信后空一行
    .                  #寫一個句點表示信的結束

    250 Mail OK queued as smtp1,C8mowLC7fAy8GydISdAtCw==.834S2 1210522683
    quit
    221 Bye #SMTP小姐跟你說再見
    Connection closed by foreign host.

    那么,如何知道你的用戶名和密碼的base64編碼呢?當然是預先要記在腦子里,如果實在記不下的話,用uuencode翻譯一下吧:

     $ echo -n 'geekx' | uuencode -m xxx # -m 指定 base64編碼

    begin-base64 664 xxx
    Z2Vla3g=
    ====

    好了,在恐怖份子吃完午飯回來之前,你已經成功地把信發給超人啦。

    posted @ 2008-06-12 10:28 生活在別處 閱讀(518) | 評論 (0)編輯 收藏

    history|grep halt
    cat .bash_history|grep halt

    不同的系統history文件是不一樣的,
    一般是$HOME目錄下

    查找find / -name "*history"
    主要是root及oracle下的

    Redhat的root
    /root/.bash_history

    /var/log下呀
    查看wtmp文件
    who wtmp.n

    posted @ 2008-04-24 14:26 生活在別處 閱讀(143) | 評論 (0)編輯 收藏

    一、一些重要的概念(關于Linux系統的一些重要特性)
        由于我們用Windows太多,我就感覺我自己除了會點鼠標之外對于Windows系統沒有太多的了解,甚至沒有Linux多.
        1、文件系統結構
        2、文件類型
           一切都是文件,包括普通文件、設備文件、目錄等等
        3、運行級別
           Linux有6個運行級別
        4、管道
        5、重定向
        6、交換分區
        7、根目錄下各個目錄的意義
    二、文本編輯
        1、vi的用法
    三、常用的命令
        1、基本
        包括:cd   clear  alias  unalias  date  ls  pwd  man exit  echo
        2、文件管理
        包括:cat  more  rm  head  tail  grep  cp  mv  wc find
        3、目錄管理
        包括:mkdir  rmdir  rm  find  file  du  df
        4、權限命令
           如何設定我們用戶和文件以及系統的權限。
           包括:chmod  chown  chgrp umask
        5、系統命令
           包括:mount  umount  uname  free  env
                 uptime  setup  xinetd  top  kill  關機命令
        5、常用的網絡命令
           關于網絡管理以及使用的一些命令
    四、安裝與卸載(限于Redhat以及相似系統)
         1、RPM命令
         2、Oracle9i安裝卸載以及基本管理
    五、相關工具的命令
        1、FTP
        2、Telnet
    六、常見的系統設置
        1、運行級別
        2、共享(NFS)
        3、修改Swap
        4、設定系統環境變量(JDK安裝)
        5、系統備份(打包、壓縮以及解壓縮)
        6、常見的標志(權限:r w x s t 標志:l b c d)
    七、Shell編程
        1、Shell變量和參數
        2、環境變量
        3、位置參數
        4、運算符
        5、常用語句
        6、函數
        7、控制
        8、運行方式
    八、Linux安裝
    九、Crontab簡單應用

    以前的存檔,源未知

    posted @ 2008-02-21 14:24 生活在別處 閱讀(303) | 評論 (0)編輯 收藏


    1) 重啟后生效
    開啟: chkconfig iptables on
    關閉: chkconfig iptables off

    2) 即時生效,重啟后失效
    開啟: service iptables start
    關閉: service iptables stop

    需要說明的是對于Linux下的其它服務都可以用以上命令執行開啟和關閉操作。

    在開啟了防火墻時,做如下設置,開啟相關端口,
    修改/etc/sysconfig/iptables 文件,添加以下內容:
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT

    posted @ 2008-02-21 14:22 生活在別處 閱讀(852) | 評論 (0)編輯 收藏

    碰到了問題,找到了解決,存檔一下
    關鍵字: jdk 字符集 linux
    原因:首先,JFreeChart和中文驗證碼的亂碼問題和jsp的編碼無關,是由于Java虛擬機找不到字體文件造成的,所以同類的Swing或者AWT的中文亂碼問題也適用

    環境:
    JDK1.5(JDK版本很重要,如果是1.4.2版本的話,JRE目錄下的字體配置文件不大一樣)
    RedHat4.0
    Tomcat5.0

    解決方法:
    1.確認%JavaHome%/jre/lib/fonts目錄下存在zysong.ttf
    2.在%JavaHome%/jre/lib/fonts目錄下執行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
    3.確認/usr/share/fonts/zh_CN/TrueType目錄存在,如果不存在則mkdir創建
    4.確認/usr/share/fonts/zh_CN/TrueType目錄下存在zysong.ttf
    5.在%JavaHome%/jre/lib目錄下,執行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
    6.重新啟動tomcat,大功告成!

    需要下載zysong.ttf

    posted @ 2008-02-21 14:19 生活在別處 閱讀(702) | 評論 (0)編輯 收藏

  • Ctrl + Shift + T:打開類型:顯示"打開類型"對話框來在編輯器中打開類型。"打開類型"選擇對話框顯示工作空間中存在的所有類型如類、接口等
  • Ctrl + Shift + R:打開資源:打開"打開資源"對話框以打開工作空間中的任何資源。在Package Explorer中不必瀏覽文件便可快速打開任意一個文件。使用這個快捷鍵可以打開一個對話框,在里面輸入你想查找的文件或者通配符既可。
  • Ctrl + O: 快速大綱:打開當前所選類型的輕量級大綱圖。在一個文件中直接打開一個成員變量(如字段、方法),尤其是有許多類似的方法名的時候這個快捷鍵將變得非常有用。
  • Ctrl + L, 輸入行數: 轉至行:打開一個對話框,允許您輸入編輯器應該跳至的行號。僅適用于編輯器。輸入行號,可以快速跳轉到源文件中的第N行,
  • Ctrl + Q:上一個編輯位置:顯示上一個編輯操作的發生位置,返回到最近的修改位置。即使你查看不同的文件時,你也可以使用該快捷鍵來找到你最近對文件的修改位置。尤其是在文件比較大時,顯得更為有用。
  • Ctrl + T: 快速類型層次結構:打開當前選擇的類型的輕量級層次結構查看器,可以實現快速轉到一個supertype或者subtype.
  • Ctrl + E:快速跳轉到另外一個編輯器。注意Ctrl + F6也可以實現這個功能,在使用的時候可以注意一下他們的異同。
  • Ctrl + ./Ctrl +,:在一個文件中快速定位到一個問題(如錯誤、警告等)
  • Alt + and Alt + :來回跳轉至你所查閱的文件
  • F3: 快速轉到一個類型聲明。同時也可以按住ctrl健并點擊該超鏈接變量或者類或者你想查看的任何聲明都可以。

  • 更多
    ctrl+space
    alt+上下箭頭
    ctrl+alt+上下箭頭
    ctrl|+/
    ctrl+d

    posted @ 2007-11-02 17:01 生活在別處 閱讀(310) | 評論 (0)編輯 收藏

    以前碰到過,要tomcat開機啟動的問題,后來用root用戶啟,但是風險很大
    這次碰巧看到了解決辦法,趕緊收了下來
    原帖名字:ubuntu7.04 安裝tomcat6
    來源:http://tristonxu.spaces.live.com/blog/cns!6C727D52D9679258!382.entry

    終于搞定了,如果僅僅安裝tomcat,那是很容易的,問題是如何讓他隨ubuntu啟動運行,這才是問題的關鍵!現在終于搞定了,唉...俺還是比較笨,居然用了兩天的時間才解決,而且問題解決之后,才發現之前原來一直是在成功的門前徘徊。想想,人生何嘗不是這樣,有多少人用一輩子的時光在成功的門前晃蕩...
    呵呵~還是趕緊把它記錄下來吧,年紀大了阿...

    一、安裝之前
    1、下載tomcat
    最新的tomcat是apache-tomcat-6.0.13.tar.gz,下載地址是:http://tomcat.apache.org/download-60.cgi

    安裝之前要先安張jdk,最好選擇JDK5.0以上版本吧。

    二、安裝ing
    1、解壓apache-tomcat-6.0.13.tar.gz到安裝目錄下。
    根據俺的實際情況,我把tmcat安裝在/opt目錄下
    shell>sudo tar zxvf apache-tomcat-6.0.13.tar.gz /opt
    解壓之后,會在/opt下生成一個apache-tomcat-6.0.13文件夾

    2、在/usr/local下建立一個軟鏈接
    shell>cd /usr/local
    shell>sudo ln -s /opt/apache-tomcat-6.0.13 tomcat6

    3、測試安裝
    運行啟動腳本,測試tomcat是否安裝成功
    shell>sudo /usr/local/tomcat6/bin/startup.sh
    然后打開FF,用http://localhost:8080 訪問tomcat。一般來講,會成功的。呵呵~

    三、讓tomcat開機啟動
    根據apache網站的Document說明(這個說明也寫得很差,嗚嗚!),要是tomcat作為一個守護程序運行,需要用到jsvc工具。(這個工具是啥玩意,俺也不懂,懶得研究,居然tomcat自帶,那就最好了)
    1、準備工作
    Tomcat安裝后,如果讓Tomcat用root身份啟動,Tomcat將會擁用root權限,這將可能給系統帶來安全隱患,黑客可能利用這個來攻擊我們的系統,所以我們得添加一個獨立運行此服務的用戶,用下面的命令:

    shell>sudo useradd -d /usr/local/tomcat6 -s /usr/sbin/nologin tomcat
    以上命令為系統增加一個tomcat用戶,并且設置為nologin

    設置用戶tomcat5對tomcat的權限
    shell>sudo chown -R tomcat:tomcat /usr/local/tomcat6
    shell> sudo chown -R tomcat:tomcat /opt/apache-tomcat-6.0.13

    2、安裝jsvc
    shell>cd /usr/local/tomcat6/bin
    shell>sudo tar xvfz jsvc.tar.gz
    shell>cd jsvc-src
    shell>sudo sh support/buildconf.sh
    如果成功,命令終端打印出下面report:
    support/buildconf.sh: configure script generated successfully

    [注:在此之前,我的系統安裝了autoconf,可以使用shell>sudo apt-get install autoconf 進行安裝]
    為configure添加執行權限
    shell>sudo chmod 755 configure
    shell>sudo ./configure --with-java=/usr/lib/j2sdk1.6-sun (這是俺系統的JDK安裝的位置)
    shell>sudo make

    okay!如果沒有出現錯誤的話,jsvc就安裝成功了!

    3、設置啟動腳本
    接下來,就是把jsvc中帶有的一個tomcat5.sh的一個模板復制到/etc/init.d目錄下,然后根據自己的情況,進行修改。
    shell>sudo cp /usr/local/tomcat6/bin/jsvc-src/native/Tomcat5.sh /etc/init.d/tomcat
    上面的命令是移動文件tomcat5.sh到/etc/init.d/里面并改名為tomcat

    修改/etc/init.d/tomcat文件:
    shell>cd /etc/init.d
    shell>sudo gedit tomcat

    俺的tomcat文件修改完如下:

    #!/bin/sh
    ##############################################################################
    #
    # Copyright 2004 The Apache Software Foundation.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ##############################################################################
    #
    # Small shell script to show how to start/stop Tomcat using jsvc
    # If you want to have Tomcat running on port 80 please modify the server.xml
    # file:
    #
    # <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
    # <Connector className="org.apache.catalina.connector.http.HttpConnector"
    # port="80" minProcessors="5" maxProcessors="75"
    # enableLookups="true" redirectPort="8443"
    # acceptCount="10" debug="0" connectionTimeout="60000"/>
    #
    # That is for Tomcat-5.0.x (Apache Tomcat/5.0)
    #
    # Adapt the following lines to your configuration
    JAVA_HOME=/usr/lib/j2sdk1.6-sun
    CATALINA_HOME=/usr/local/tomcat6
    DAEMON_HOME=/usr/local/tomcat6/bin
    TOMCAT_USER=tomcat

    # for multi instances adapt those lines.
    TMP_DIR=/var/tmp
    PID_FILE=/var/run/jsvc.pid
    CATALINA_BASE=/usr/local/tomcat6

    CATALINA_OPTS=
    CLASSPATH=\
    $JAVA_HOME/lib/tools.jar:\
    $CATALINA_HOME/bin/commons-daemon.jar:\
    $CATALINA_HOME/bin/bootstrap.jar

    case "$1" in
    start)
    #
    # Start Tomcat
    #
    $DAEMON_HOME/jsvc-src/jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

    stop)
    #
    # Stop Tomcat
    #
    $DAEMON_HOME/src/native/unix/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

    *)
    echo "Usage tomcat.sh start/stop"
    exit 1;;
    esac

    [注:需要修改的地方,我都用紅色標出來]
    如果在其他linux系統,這樣就okay了,但是在ubuntu中,還需要進行一步,就是把在rc2.d中設置一個軟鏈接

    在/etc/rc2.d目錄下建立S16apache軟聯接到/etc/init.d/tomcat
    shell>cd /etc/rc2.d
    shell>ln -s /etc/init.d/apache2 S16apache
    [注:rc2.d目錄下的文件要以S后就數字開頭,表示啟動的順序。而rc2.d中的2,表示這個目錄下文件在開機時的運行級別(runlevel)為2]

    四、結束
    重新啟動系統
    shell>sudo reboot -n
    啟動后,就可以在FF中直接輸入http://localhost:8080。如果成功,就可以看見一直可愛的kitten拉~~~



    posted @ 2007-11-02 16:40 生活在別處 閱讀(1641) | 評論 (0)編輯 收藏

            項目開發中,碰到的問題,原先設計的字段,定為VARCHAR2類型,最大長度為4000 bytes,實際的應用中,內容往往超過兩千漢字,沒辦法正常插入,因此改為clob大字段類型。
            采用Hibernate,實現Clob和Blob對象的存取, 網上有很多解決方案,但是比較老,實際運用中,可能會碰到各種問題。下面是我采用的方案,比較簡單,希望對碰到這個問題的人,有幫助。
            目前oracle的driver已經支持JDBC 直接操作 CLOB了,但是使用舊的driver的時候,會遇到各種問題,如2k字符的問題。
             最新的oracle10g的driver,已經解決了這些問題。我項目用ojdbc14-10.2.0.3.0.jar 連接oracle9i數據庫,可以正常讀寫CLOB。
             Hibernate存取Clob和Blob對象,將 clob用string方式處理。
             Hibernate Annotations方式,只要映射成Lob類型就可以,對該字段的讀寫,就是一般的操作方式。

            @Lob
        public String getTxt() {
            
    return txt;
        }

            好了,就是這么簡單!

    posted @ 2007-11-02 16:17 生活在別處 閱讀(3582) | 評論 (3)編輯 收藏

    WIN下的tomcat5的日志是按日期來記錄的.移到linux下發現tomcat/logs下只有一個catalina.out件.
    時間一長.發現日志文件暴增.對于管理真是不方便.
    要是能像win下的tomcat那樣分日期記錄就好了.思來想去就想到用cron來分割日志文件.
    試試吧.
    先google一下.cronolog-1.6.2.tar.gz
    1.下載cronolog-1.6.2.tar.gz
    2.安裝
    # tar zxvf cronolog-1.6.2.tar.gz
    # ./configure
    # make
    # make install
    搞定!
    默認是安裝在/usr/local/sbin/下.
    3.配置
    重點來了.注意嘍!!!
    在tomcat/bin/catalian.sh中找到
    org.apache.catalina.startup.Bootstrap "$@" start \     >> "$CATALINA_BASE"/logs/catalina.out 2&1 &
     
    把上面的內容改成:
    org.apache.catalina.startup.Bootstrap "$@" start \
    |/usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null 2>&1 &
    修改好了.重啟
    #./catalina.sh start
    現去看看勞動成果吧.
    # ls /tomcat/logs/
    就會發現logs下面多了幾個如同catalina.2006.06.01.log的文件了.

    posted @ 2007-10-30 10:07 生活在別處 閱讀(2562) | 評論 (0)編輯 收藏

        最近發現服務器被人窮舉掃描,網上找了辦法搞定了

    原貼:http://blog.chinaunix.net/u/17030/showart_315674.html

    我的服務器每天都會有無數的SSH失敗嘗試記錄,有些無聊的人一直不停的掃描,這些人真夠無聊的,沒事吃飽了撐著,老找些軟件在那里窮舉掃描,所以大家第一要記的設置一個好的夠復雜的密碼。

    怎么樣防,如果要一條一條將這些IP阻止顯然治標不治本,還好有DenyHosts軟件來代替我們手搞定他。

    DenyHosts是Python語言寫的一個程序,它會分析sshd的日志文件,當發現重復的攻擊時就會記錄IP到/etc/hosts.deny文件,從而達到自動屏IP的功能。

    DenyHosts官方網站為:http://denyhosts.sourceforge.net

    以下是安裝記錄(以CentOS 4.3, DenyHosts 2.5 為例)

    安裝

    # cd /usr/local/src
    # wget http://mesh.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.5.tar.gz
    # tar -zxvf DenyHosts-2.5.tar.gz
    # cd DenyHosts-2.5
    # python setup.py install

    默認是安裝到/usr/share/denyhosts目錄的。

    配置

    # cd /usr/share/denyhosts/
    # cp denyhosts.cfg-dist denyhosts.cfg
    # vi denyhosts.cfg

    根據自己需要進行相應的配置(解釋見下文件的配置文件)

    設置啟動腳本

    # cp daemon-control-dist daemon-control
    # chown root daemon-control
    # chmod 700 daemon-control

    完了之后執行daemon-contron start就可以了。

    # ./daemon-control start

    如果要使DenyHosts每次重起后自動啟動還需做如下設置:

    # cd /etc/init.d
    # ln -s /usr/share/denyhosts/daemon-control denyhosts
    # chkconfig –add denyhosts
    # chkconfig –level 2345 denyhosts on

    或者修改/etc/rc.local文件:

    # vi /etc/rc.local

    加入下面這條命令

    /usr/share/denyhosts/daemon-control start

    DenyHosts配置文件:

    vi /etc/denyhosts.cfg

    SECURE_LOG = /var/log/secure
    #ssh 日志文件,它是根據這個文件來判斷的。

    HOSTS_DENY = /etc/hosts.deny
    #控制用戶登陸的文件

    PURGE_DENY = 5m
    #過多久后清除已經禁止的

    BLOCK_SERVICE = sshd
    #禁止的服務名

    DENY_THRESHOLD_INVALID = 1
    #允許無效用戶失敗的次數

    DENY_THRESHOLD_VALID = 10
    #允許普通用戶登陸失敗的次數

    DENY_THRESHOLD_ROOT = 5
    #允許root登陸失敗的次數

    HOSTNAME_LOOKUP=NO
    #是否做域名反解

    ADMIN_EMAIL = iakuf@163.com
    #管理員郵件地址,它會給管理員發郵件

    DAEMON_LOG = /var/log/denyhosts
    #自己的日志文件

    然后就可以啟動了:

    service denyhost start

    可以看看/etc/hosts.deny內是否有禁止的IP,有的話說明已經成功了。


    =========================================================
    原文地址 http://www.taoran.net/tech/denyhosts.html

    DenyHosts是用Python2.3寫的一個程序,它會分析/var/log/secure(redhat,Fedora Core)等日志文件,當發現同一IP在進行多次SSH密

    碼嘗試時就會記錄IP到/etc/hosts.deny文件,從而達到自動屏蔽該IP的目的。

    DenyHosts官方網站為:http://denyhosts.sourceforge.net


    一、檢查安裝條件

    1、首先判斷系統安裝的sshd是否支持tcp_wrappers(默認都支持)
    # ldd /usr/sbin/sshd
    libwrap.so.0 => /usr/lib/libwrap.so.0 (0x0046e000)

    2、判斷默認安裝的Python版本
    # python -V
    Python 2.3.4

    二、已安裝Python2.3以上版本的情況(以RedHat AS4為例)

    1、安裝DenyHosts

    # cd /usr/local/src
    # wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
    # tar zxf DenyHosts-2.6.tar.gz
    # cd DenyHosts-2.6
    # python setup.py install
      
       程序腳本自動安裝到/usr/share/denyhosts
       庫文件自動安裝到/usr/lib/python2.3/site-packages/DenyHosts
       denyhosts.py自動安裝到/usr/bin

    2、設置啟動腳本
    # cd /usr/share/denyhosts/
    # cp daemon-control-dist daemon-control
    # chown root daemon-control
    # chmod 700 daemon-control
    # grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
    # vi denyhosts.cfg
      根據自己需要進行相應的修改
    ----------------denyhosts.cfg------------------------
    SECURE_LOG = /var/log/secure
    #RedHat/Fedora Core分析該日志文件
    #其它版本linux根據denyhosts.cfg-dist內提示選擇。

    PURGE_DENY = 30m
    #過多久后清除

    DENY_THRESHOLD_INVALID = 1
    #允許無效用戶(/etc/passwd未列出)登錄失敗的次數

    DENY_THRESHOLD_VALID = 5
    #允許有效(普通)用戶登錄失敗的次數

    DENY_THRESHOLD_ROOT = 3
    #允許root登錄失敗的次數

    HOSTNAME_LOOKUP=NO
    #是否做域名反解
    ----------------denyhosts.cfg------------------------

    如果需要DenyHosts隨系統重啟而自動啟動,還需做如下設置:
    # vi /etc/rc.local
        加入下面這條命令
    /usr/share/denyhosts/daemon-control start

    3、啟動

    # /usr/share/denyhosts/daemon-control start



    三、未安裝Python2.3以上版本的情況(以RedHat AS3、Python2.2為例)

    1、安裝Python最新版本的源碼包,不必卸載原有低版本Python
    # cd /usr/local/src
    # wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2
    # tar jxf Python-2.5.1.tar.bz2
    # cd Python-2.5.1
    # ./configure --prefix=/usr/local/python
    # make
    # make install

    2、安裝DenyHosts
    # cd /usr/local/src
    # wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
    # tar zxf DenyHosts-2.6.tar.gz
    # cd DenyHosts-2.6
    # vi setup.py
      將"/usr/bin/env python"替換為"/usr/local/python/bin/python",在第一行
    # vi daemon-control-dist
      將"/usr/bin/env python"替換為"/usr/local/python/bin/python",注意有兩處
    # /usr/local/python/bin/python setup.py install

       程序腳本自動安裝到/usr/share/denyhosts
       庫文件自動安裝到/usr/local/python/lib/python2.5/site-packages/DenyHosts
       denyhosts.py自動安裝到/usr/local/python/bin

    # ln -s /usr/local/python/bin/denyhosts.py /usr/bin

    posted @ 2007-10-30 10:01 生活在別處 閱讀(661) | 評論 (1)編輯 收藏

    原帖地址: http://www.tkk7.com/Unmi/archive/2007/07/25/132391.html


    做了一個 Java 程序放在 Solaris 下運行,用到許多的第三方包,有 *.zip 的和 *.jar的,放在 lib 目錄下,然后寫了一個 shell 腳本來運行那個 java 程序,那就要在 classpath 中包含所有在 lib 中的第三方包。

    原來的做法是在 classpath中把lib目錄中一個個的包文件名用冒號連綴起來,比如
    classpath=.:lib/a.jar:lib/b.jar:lib/c.jar:lib/d.zip
    java -classpath $classpath com.unmi.Main

    碰到程序升級,在lib中增加或減少了包文件,又要再重新修改那個啟動 java 程序的 shell 腳本,甚是麻煩。由此想寫個 shell,功能是能列舉lib目錄下所有第三方包,用冒號連綴成一個 classpath 變量,這樣的話,無論在 lib 目錄中增減包,都不需要再次修改那個啟動 java 程序的 shell 腳本,就像 tomcat,無論是 common/lib 還是 app/WEB-INF/lib 中的第三方包,即放即用。

    記得在以前一個公司,有見過這樣的腳本,不過記不清了,大致是用 while 循環來生成那樣一個classpath 變量的。

    還好在網上有高人出手相救,在 CSDN 發了一個貼:

    http://community.csdn.net/Expert/topic/5671/5671131.xml?temp=.7013971

    過一天就有人回復,完成這一功能的代碼是:

    #!/bin/sh

    _jar=`ls | grep "..*\.zip$"`
    _zip=`ls | grep "..*\.jar$"`
    _classpath="${_jar} ${_zip}"
    classpath=`echo ${_classpath} | sed -e 's/ /:/g'`
    echo ${classpath}

    這里根據我們前面的需求,是要列出 lib 目錄下的 *.zip 或 *.jar 包,所以 shell 改寫為:

    #!/bin/sh

    _jar=`ls lib | grep "..*\.zip$"`  #列舉lib目錄下的 *.zip 文件
    _zip=`ls lib | grep "..*\.jar$"`  #列舉lib目錄下的 *.zip 文件
    _classpath="${_jar} ${_zip}"
    classpath=`echo ${_classpath} | sed -e 's/ /:lib\//g'`   #包名前都要帶個 lib/
    echo ${classpath}

    這樣,你就可以使用這個 classpath 變量了

    java -classpath .:${classpath} com.unmi.Main #把當前目錄 . 也加到 classpath 中

    在此非常感謝 mymtom(mymtom) 的回復。

    最后回頭來想想這也就是在原來的 JRE 版本需要手工處理這些事情,如果能用上新版 6.0 Mustang JRE,就可以用它的新特性之一,classpath 通配符,java -classpath .;lib\*.jar:lib\*.zip 了,可是相信大多數同我一樣,還享受不起最新版,只能暫且麻煩一些了。
    posted on 2007-07-25 21:14 Unmi 閱讀(685) 評論(4)  編輯  收藏

    Feedback

    # re: [導入]Linux/Unix下讀取lib目錄下所有包生成classpath的Shell 2007-07-27 09:41 blackstone
    提供另一種辦法

    #!/bin/sh
    #獲取當前目錄
    PWD=`pwd`
    for i in lib/*;
    do CLASSPATH=$PWD/$i:"$CLASSPATH";
    done

    export CLASSPATH=.:$CLASSPATH

    java Your Main Class  回復  更多評論
      

    # re: [導入]Linux/Unix下讀取lib目錄下所有包生成classpath的Shell 2007-07-27 13:07 Unmi
    太好,更簡練了,對我來說寫成下來那樣子就行了

    #!/bin/sh
    CP=.
    for file in lib/*;
    do CP=${CP}:$file;
    done
    echo $CP
    #我只要用這個CP就行
      回復  更多評論
      

    # re: [導入]Linux/Unix下讀取lib目錄下所有包生成classpath的Shell 2007-09-30 10:38 飛貓
    這個更方便:
    CLASSPATH=`find lib -name *.jar|xargs|sed "s/ /:/g"`
    CLASSPATH=".:$CLASSPATH"
    echo $CLASSPATH

      回復  更多評論 
      
     
    DOS批處理腳本枚舉 lib 目錄下的 jar 和 zip 文件,拼成 classpath 的腳本

    @echo off
    setlocal EnableDelayedExpansion
    set cp=.
    for /F %%a in ('dir lib\*.jar lib\*.zip /b') do set cp=!cp!;%%a
    @echo %cp%

    posted @ 2007-10-10 16:50 生活在別處 閱讀(4868) | 評論 (0)編輯 收藏

     

    Oracle的數據庫對象分為五種:表,視圖,序列,索引和同義詞。

         視圖是基于一個表或多個表或視圖的邏輯表,本身不包含數據,通過它可以對表里面的數據進行查詢和修改。視圖基于的表稱為基表。

         視圖是存儲在數據字典里的一條select語句。 通過創建視圖可以提取數據的邏輯上的集合或組合。

    視圖的優點:

           1.對數據庫的訪問,因為視圖可以有選擇性的選取數據庫里的一部分。

           2.用戶通過簡單的查詢可以從復雜查詢中得到結果。

           3.維護數據的獨立性,試圖可從多個表檢索數據。

           4.對于相同的數據可產生不同的視圖。

    視圖分為簡單視圖和復雜視圖:

           簡單視圖只從單表里獲取數據
           復雜視圖從多表

           簡單視圖不包含函數和數據組
           復雜視圖包含

          簡單視圖可以實現DML操作
          復雜視圖不可以.

    視圖的創建:

        CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

      [(alias[, alias]...)]

       AS subquery
       [WITH CHECK OPTION [CONSTRAINT constraint]]
       [WITH READ ONLY]
    FORCE               :不管基表是否存在ORACLE都會自動創建該視圖;
    NOFORCE          :只有基表都存在ORACLE才會創建該視圖:
    alias                    :為視圖產生的列定義的別名;
    subquery            :一條完整的SELECT語句,可以在該語句中定義別名;
    WITH CHECK   OPTION :
                                 插入或修改的數據行必須滿足視圖定義的約束;
    WITH READ ONLY :
                                該視圖上不能進行任何DML操作。
    例如:
            CREATE   OR   REPLACE   VIEW   dept_sum_vw
                    (name,minsal,maxsal,avgsal)
            AS   SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
            FROM     emp e,dept d
            WHERE   e.deptno=d.deptno
            GROUP   BY   d.dname;
    視圖的定義原則:
            1.視圖的查詢可以使用復雜的SELECT語法,包括連接/分組查詢和子查詢;
            2.在沒有WITH CHECK OPTION和 READ ONLY 的情況下,查詢中不能使用
               ORDER BY 子句;
            3.如果沒有為CHECK OPTION約束命名,系統會自動為之命名,形式為SYS_Cn;
            4.OR REPLACE選項可以不刪除原視圖便可更改其定義并重建,或重新授予對象
               權限。
    視圖的查詢:
               視圖創建成功后,可以從視圖中檢索數據,這點和從表中檢索數據一樣。
               還可以查詢視圖的全部信息和指定的數據行和列。
        如:
              檢索數據:
               SQL>SELECT * FROM   dept_sum_vw;
              查詢視圖定義:
              SELECT view_name,text   from user_views;
                 其中text顯示的內容為視圖定義的SELECT語句,可通過DESC USER_VIEWS
                 得到相關信息。
    修改視圖:
             通過OR REPLACE 重新創建同名視圖即可。
    視圖上的DML 操作:
             DML操作應遵循的原則:
             1.簡單視圖可以執行DML操作;
             2.在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能
                刪除數據行;
             3.在視圖不出現下列情況時可通過視圖修改基表數據或插入數據:
                 a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字;
                 b.使用表達式定義的列;
                 c.ROWNUM偽列。
                 d.基表中未在視圖中選擇的其他列定義為非空且無默認值。
    視圖可用于保持數據庫的完整性,但作用有限。
    通過視圖執行引用完整性約束可在數據庫級執行約束。
    WITH CHECK OPTION 子句限定:
              通過視圖執行的INSERTS和UPDATES操作不能創建該視圖檢索不到的數據行,
              因為它會對插入或修改的數據行執行完整性約束和數據有效性檢查。
       例如:
                CREATE OR REPLACE VIEW   vw_emp20
                AS   SELECT *   FROM   emp
                WHERE   deptno=20
                WITH CHECK OPTION constraint   vw_emp20_ck;
               視圖 已建立。
                 查詢結果:
                SELECT empno,ename,job FROM vw_emp20;
               
               EMPNO                 ENAME                 JOB
    ---------------------            --------------           -------------
                   7369                  SMITH                 CLERK
                   7566                  JONES                MANAGER
                   7902                  FORD                 ANALYST
               修改:
                     UPDATE vw_emp20
                     SET         deptno=20
                     WHERE    empno=7902;
                將產生錯誤:
                    UPDATE vw_emp20
                                   *
                    ERROR 位于第一行:
                    ORA-01402:視圖WITH CHECK OPTION 違反WHERE 子句
    視圖的刪除:
                 DROP VIEW   VIEW_NAME語句刪除視圖。
                 刪除視圖的定義不影響基表中的數據。
                 只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。
                 視圖被刪除后,基于被刪除視圖的其他視圖或應用將無效。
    OR REPLACE     :若所創建的試圖已經存在,ORACLE自動重建該視圖;

    posted @ 2007-10-09 10:05 生活在別處 閱讀(708) | 評論 (0)編輯 收藏

     

    Ruby中常會用到正則表達式。正則表達式是用來表達字符串的模式(pattern)的。也可以這么理解:我們使用正則表達式來表示某種搜索規則,然后使用該正則表達式來完成字符串的搜索工作。舉個例子,假定有這樣的搜索規則:“字符串以’FOO’開始,以’R’結束”,那么就可以使用以下正則表達式來表示該規則。

    /^FOO.*R$/

    Ruby用//將正則表達式括起來。^表示開頭,$表示結尾,.*表示0個以上的任意字符。

    現在就講講正則表達式的規則的寫法。正則表達式中有很多上述的具有特別意義的字符。首先是下列字符。
    [ ]
    范圍描述符。[a-z]表示從a到z之間的任意一個。
    \w
    英文字母和數字。即[0-9 A-Z a-z]。
    \W
    非英文字母和數字
    \s
    空字符,即[\t\n\r\f]。
    \S
    非空字符。
    \d
    數字,即[0-9]。
    \D
    非數字。
    \b
    詞邊界字符(在范圍描述符外部時)
    \B
    非詞邊界字符
    \b
    退格符(0x08)(在范圍描述符內部時)
    *
    前面元素出現0次以上
    +
    前面元素出現1次以上
    {m,n}
    前面元素最少出現m次,最多出現n次
    ?
    前面元素出現0次或1次
    |
    選擇
    ( )
    群組
    其他字符
    該字符本身

    例如,“^f[a-z]+”表示“第一個字符是f,后面是若干個從a到z之間的字符”,可以是“fobar”或“fool”等等。這種表達法就是正則表達式(regular expression)。在搜索字符串時正則表達式非常有用,因此在UNIX的世界里,正則表達式得到了廣泛的應用。grep程序就是個代表。許多人是不是經常會用到它呢?

    為了學會使用正則表達式,先來試試下面這個程序。請用文件名regx.rb將程序保存下來以后再運行它。

    st = "\033[7m"
    en = "\033[m"
     
    while TRUE
       print "str> "
       STDOUT.flush
       str = gets
       break if not str
       str.chop!
       print "pat> "
       STDOUT.flush
       re = gets
       break if not re
       re.chop!
       str.gsub! /#{re}/, "#{st}\\&#{en}"
       print str, "\n"
    end
    print "\n"

    該程序會在第一次輸入的字符串中按照第二次輸入的正則表達式的要求尋找合適的字符串,并將其以反色顯示出來。下面是運行結果。

    str> foobar
    pat> ^fo+
    foobar
    ^^^

    # 實際上foo的部分被反色顯示了。

    再試一試。

    str> abc012dbcd555
    pat> \\d
    abc012dbcd555
       ~~~    ~~~

    從上例可以看出,該程序可以檢測出多處符合條件的字符串。

    str> foozboozer
    pat> f.*z
    foozboozer
    ~~~~~~~~

    在這個例子中,正則表達式“f.*z”并非只是對應到fooz,而是一直對應到foozbooz這里。這是因為,正則表達式總是在符合條件的結果中選擇較長的一個。

    正則表達式甚至可以寫出讓人一眼看不透的模式,這可能會像謎語一樣有趣。但若過分凝煉的話,以后就很難搞懂當初的想法了。

    str> Wed Feb  7 08:58:04 JST 1996
    pat> [0-9]+:[0-9]+(:[0-9]+)?
    Wed Feb  7 08:58:04 JST 1996
               ~~~~~~~~

    Ruby用’/’將正則表達式括起來。另外還有一些方法會自動將字符串變為正則表達式。

    % ruby -le 'print "abcdef" =~ /d/'
    3
    % ruby -le 'print "aaaaaa" =~ /d/'
    nil

    ‘=~’是使用正則表達式進行匹配的操作符,它返回匹配成功時的位置。

    到底哪些方法可以處理正則表達式呢?關于這個問題,請查閱參考手冊。 

    posted @ 2007-09-18 16:10 生活在別處 閱讀(1123) | 評論 (0)編輯 收藏

    定義:escape關鍵字經常用于使某些特殊字符,如通配符:'%','_'轉義為它們原

    來的字符的意義,被定義的轉義字符通常使用'\',但是也可以使用其他的符號。

    實例:

    SQL> select * from t11 where name like '%_%';

    NAME
    ----------
    aa_a
    aaa
    SQL> select * from t11 where name like '%\_%' escape '\';

    NAME
    ----------
    aa_a

    注意:如果是 '/' 作為檢索字符, 必須 用 '/' 作為轉義符, 正斜扛也一樣.
    select * from wan_test where psid like '%//%' escape '/'


    posted @ 2007-07-25 00:13 生活在別處 閱讀(3671) | 評論 (0)編輯 收藏

    通常情況下,我們使用SPOOL方法,將數據庫中的表導出為文本文件的時候會采用兩種方法,如下述:
    方法一:采用以下格式腳本 
    set colsep '' ------設置列分隔符
      set trimspool on
      set linesize 120
      set pagesize 2000
      set newpage 1
      set heading off
         set term off
      spool 路徑+文件名
      select * from tablename;
      spool off
    方法二:采用以下腳本
    set trimspool on
      set linesize 120
      set pagesize 2000
      set newpage 1
      set heading off
      set term off
      spool 路徑+文件名
      select col1||','||col2||','||col3||','||col4||'..' from tablename;
      spool off
    比較以上方法,即方法一采用設定分隔符然后由sqlplus自己使用設定的分隔符對字段進行分割,方法二將分隔符拼接在SELECT語句中,即手工控制輸出格式。
    在實踐中,我發現通過方法一導出來的數據具有很大的不確定性,這種方法導出來的數據再由sql ldr導入的時候出錯的可能性在95%以上,尤其對大批量的數據表,如100萬條記錄的表更是如此,而且導出的數據文件狂大。
    而方法二導出的數據文件格式很規整,數據文件的大小可能是方法一的1/4左右。經這種方法導出來的數據文件再由sqlldr導入時,出錯的可能性很小,基本都可以導入成功。
    因此,實踐中我建議大家使用方法二手工去控制spool文件的格式,這樣可以減小出錯的可能性,避免走很多彎路。
    本文原創,如有引用,請加鏈接,謝謝!

    原帖地址 

    posted @ 2007-07-25 00:01 生活在別處 閱讀(1617) | 評論 (0)編輯 收藏

    TFTP是用來下載遠程文件的最簡單網絡協議,它基于UDP協議而實現。嵌入式linux的tftp開發環境包括兩個方面:一是嵌入式linux宿主機的 tftp-server支持,二是嵌入式linux目標機的tftp-client支持。因為u-boot本身內置支持tftp-client,所以嵌入式目標機就不用配置了。下面就詳細介紹一下linux宿主機tftp-server的安裝配置。

    在FC6光盤的ISO鏡像中,有tftp-server的rpm安裝包。
    (1)安裝
    #mount -o loop <FC6光盤ISO鏡像.iso> /mnt/CD //掛載光盤
    #rpm -ivh tftp-0.42-3.1.i386.rpm //安裝tftp-client
    #rpm -ivh tftp-server-0.42-3.1.i386.rpm //安裝tftp-server
    #umount /mnt/CD //卸載光盤

    (2)修改文件
    在linux 下,不管使用的是哪一種super-server,inetd或者xinetd,默認情況下TFTP服務是禁用的,所以要修改文件來開啟服務。根據(1)的安裝方法,可以修改文件/etc/xinetd.d/tftp。主要是設置TFTP服務器的根目錄,開啟服務。修改后的文件如下:

    service tftp
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
    }

    說明:修改項server_args= -s <path> -c,其中<path>處可以改為你的tftp-server的根目錄,參數-s指定chroot。

    (3)創建tftp根目錄,啟動tftp-server。
    #mkdir /tftpboot
    #chmod o+w /tftpboot
    #service xinetd restart
    這樣,tftp-server就啟動了。

    (4)配置防火墻
    TFTP (Trivial File Transfer Protocol),中譯簡單文件傳輸協議或小型文件傳輸協議. 大家一定記得在2003年8月12日全球爆發沖擊波(Worm.Blaster)病毒,這種病毒會監聽端口69,模擬出一個TFTP服務器,并啟動一個攻擊傳播線程,不斷地隨機生成攻擊地址,進行入侵。另外tftp被認為是一種不安全的協議而將其關閉,同時也是防火墻打擊的對象,這也是有道理的。tftp 在嵌入式linux還是有用武之地的。
    打開防火墻,允許tftp訪問網絡。
    [root@localhost /]# setup
    Firewall configuration--> Customize--other port 處:69:udp,保存就可以了。

    你可以登陸本機測試以下,命令如下:
    #tftp your-ip-address
    tftp>get <download file>
    tftp>put <upload file>
    tftp>q
    #
     

    ================整理====================

    ########################################################
    安裝過程中出現的問題及原因
    現象一:
        tftp> get test.log
        Transfer timed out.
    原因:
        tftpd服務沒有啟動


    現象二:
        tftp> get test.log
        Error code 2: Only absolute filenames allowed
    原因:
        在/etc/xinetd.d/tftpd中設置的server_args為/etc/default/tftpd-hpa
        cat /etc/default/tftpd-hpa
        #Defaults for tftpd-hpa
        RUN_DAEMON="no"
        OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"
    ps:實際根本就不用/etc/default/tftpd-hpa文件,它應該是用在standalone模式下的


    現象三:
        tftp> put ex070416.log
        Error code 1: File not found
    原因:
        指定的文件不存在;或tftpd啟動參數中沒有指定-c選項,允許上傳文件

    ########################################################
    其它常用選項如下:
    -l        使用standalone模式運行,此模式下,將會忽略-t選項
    -a address:port    在standalone模式下服務所在的IP與端口,如果不指定,則在本機所有IP,/etc/service中指定的port上偵聽連接
    -c         允許在服務器上新建文件,否則只允許更新現有的文件。如果未指定-U或-p選項,則允許任何人上傳文件
    -s directory    服務器端默認的目錄,默認為/var/lib/tftpdboot
    -u username    tftpd服務以什么身份運行,默認是nobody,一般可以新建一個tftpd的賬號來運行
    -U umask    上傳的文件的掩碼,如果未指定-p則為000,如果指定了-p,則采用指定的umask
    -p        對于通過-u指定的用戶執行的動作,不做額外的權限檢查

    更多權限請見man tftpd。

    posted @ 2007-07-24 23:57 生活在別處 閱讀(10010) | 評論 (0)編輯 收藏

    TFTP (普通文件傳輸協議或一般文件傳輸協議) 大家一定記得在2003年8月12日全球爆發沖擊波(Worm.Blaster)病毒,這種病毒會監聽端口69,模擬出一個TFTP服務器,并啟動一個攻擊傳播線程,不斷地隨機生成攻擊地址,進行入侵。另外tftp被認為是一種不安全的協議而將其關閉,同時也是防火墻打擊的對象,這也是有道理的。不過 tftp還是有用武之地的,下面講的文件傳輸和備份router配置文件都時實際應用,它也只時一種手段而已。

    一、用TFTP實現文件傳輸
    環境:服務器A :rhas11
    客戶機B: rhas101
    首先用rpm –qa | grep tftp看一下tftp有沒安裝,沒有的話安 裝一下。
    A:在服務器端設置
    #vi /etc/xinetd.d/tftp
    service tftp
    {
    disable = no
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /test
    per_source = 11
    cps = 100 2
    flags = IPv4
    }

    或用chkconfig tftp on 也可以打開xinetd代理的tftp服

    #mkdir /test
    #service xinetd restart 從啟xinetd服務,因為TFTP服務受控與xinetd, xinetd是管服務的服務,它是不開端口的。
    驗證一下TFTP是否起來了:
    [root@rhas11 tftp]# netstat -nlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN 3122/rpc.statd
    tcp 0 0 127.0.0.1:32781 0.0.0.0:* LISTEN 4035/xinetd
    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3103/portmap
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3324/httpd
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3255/sshd
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3213/cupsd
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3295/sendmail: acce
    tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 3415/0
    tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3324/httpd
    udp 0 0 0.0.0.0:32768 0.0.0.0:* 3122/rpc.statd
    udp 0 0 0.0.0.0:69 0.0.0.0:* 4035/xinetd
    udp 0 0 0.0.0.0:69 0.0.0.0:* 4012/in.tftpd
    udp 0 0 0.0.0.0:111 0.0.0.0:* 3103/portmap
    udp 0 0 0.0.0.0:754 0.0.0.0:* 3122/rpc.statd
    udp 0 0 0.0.0.0:631 0.0.0.0:* 3213/cupsd

    A:服務器端 新建一文件file
    #cd /test
    [root@rhas11 test]# ls -l
    總用量 4
    -rw-r--r-- 1 root root 19 5月 15 18:26 file

    B客戶端:

    下載:
    [root@rhas101 tmp]# tftp 172.31.0.11
    tftp> get 1
    Received 72 bytes in 0.0 seconds
    tftp>

    上傳當前目錄下文件”aaa”
    [root@rhas101 client]# ls -l
    總用量 4
    -rw-r--r-- 1 root root 15 5月 20 21:49 aaa

    [root@rhas101 client]# tftp 172.31.0.11
    tftp> put aaa
    Error code 1: File not found
    tftp>

    奇怪當前目錄卻是有aaa文件???讓我想一下
    哦,原來服務器/test目錄下沒有文件aaa,那就touch一個吧
    [root@rhas11 test]# touch aaa
    [root@rhas11 test]# ls -l
    總用量 4
    -rw-r--r-- 1 root root 0 5月 15 18:46 aaa
    -rw-r--r-- 1 root root 19 5月 15 18:26 file

    好了再試一試
    [root@rhas101 client]# tftp 172.31.0.11
    tftp> put aaa
    Error code 1: File not found
    tftp> put aaa
    Error code 2: Access denied
    tftp>
    細心的讀者一定想到這是權限問題
    再到服務器上設置
    (===========================================================================
    小插曲:#chown -R nobody.nobody /test
    #vi /etc/xinetd.d/tftp
    service tftp
    {
    disable = no
    socket_type = dgram
    protocol = udp
    wait = yes
    user = nobody
    server = /usr/sbin/in.tftpd
    server_args = -u nobody -s /test
    per_source = 11
    cps = 100 2
    flags = IPv4
    }
    chmod 777 -R /test
    ===========================================================================
    )

    #service xinetd restart

    )

    [root@rhas11 test]# chmod 007 aaa 其實只要有可寫的權限就行了
    [root@rhas11 test]# ls -l
    總用量 4
    -------rwx 1 root root 0 5月 15 18:46 aaa
    -rw-r--r-- 1 root root 19 5月 15 18:26 file

    [root@rhas101 client]# tftp 172.31.0.11
    tftp> put aaa
    Error code 1: File not found
    tftp> put aaa
    Error code 2: Access denied
    tftp> put aaa
    Sent 16 bytes in 0.0 seconds
    tftp>

    二、 特殊應用:上傳和下載路由器(或交換機)配置文件

    配使用Linux的tftp功能配置cisco route
    在局域網環境中,如果有Cisco 路由器和Linux服務器。也許你需要利用Linux的
    TFTP服務去下載Cisco router配置文件 startup-config,在服務器上編輯后再上載
    到路由器,在實現中有一些特別注意的地方。
    所用軟、硬件:Redhat Linux AS 3.0 ,Cisco 2611 路由器

    BEIJING#copy run tftp
    Address or name of remote host []? 172.31.0.11
    Destination filename [beijing-confg]? beijing-route
    !!
    1968 bytes copied in 0.581 secs (3387 bytes/sec)

    別忘了在tftp server 上創建beijing-route權限為777
    BEIJING#copy tftp flash
    Address or name of remote host []? 172.31.0.11
    Source filename []? beijing-route
    Destination filename [beijing-route]?
    Accessing tftp://172.31.0.11/beijing-route...
    Erase flash: before copying? [confirm]
    Erasing the flash filesystem will remove all files! Continue? [confirm]
    Erasing device... eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ...erased
    Erase of flash: complete
    Loading beijing-route from 172.31.0.11 (via FastEthernet0/0): !
    [OK - 1968 bytes]

    Verifying checksum... OK (0x5248)
    1968 bytes copied in 0.285 secs (6905 bytes/sec)
    BEIJING#  

    用tftp傳輸大文件時的帶寬顯示情寬

    posted @ 2007-07-24 23:46 生活在別處 閱讀(386) | 評論 (0)編輯 收藏

     1、pwd  查看自己當前所在位置

    2、cat  列出、合并、創建文件

    cat test.txt  (列出test.txt)
    cat test1.txt test2.txt > test3.txt (1、2合并生成3)
    cat test1.txt  >> test2.txt  (1合并到2中)
    cat > myfile.txt  (創建myfile.txt)
    3、mv file1 file2 (將file1改名為file2,如果file2已經存在,為避免改名時覆蓋file2,加上-b參數會生成file2的備份,備份有個波浪號后綴)

    4、cp  拷貝命令

    cp file1 file2 覆蓋掉file2的內容
    cp -i file1 file2  會出現提示信息
    cp -bi file1 file2 會備份file2
    cp -r tempdir1 tempdir2 把子目錄tempdir1及其中文件拷貝到tempdir2
    cp -p tempdir2/tempdir1/temp1file1 tempdir3 把文件連同子目錄結構一起拷貝到tempdir3
    5、ln  建立硬鏈接和符號鏈接

    ln file1 file2 (硬鏈接,file2和file1完全相同,修改其中任何一個都會影響另外一個,刪除了file1后,file2仍存在)
    ln -s file1 file2  (符號鏈接,file2只是一個指向file1的假名,如果刪除了file2,不影響file1,如果刪除了file1,file2就沒用了)
    ln -s /usr/local/games play  (建立一個子目錄的硬鏈接必須用符號鏈接,建立完符號鏈接后,就不用cd /usr/local/games了,只要用cd play)
    6、chowd 改變文件權限

    chmod  600 file1
    chmod ugo-wx file(擁有者-組-其他用戶直接增減權限)
    7、chown 改變文件所有權

    chown :users file1(把所有權分配給users用戶組)
    chown lucy:users file1(把存取權限分配給lucy用戶)
    8、groups 用戶名  (查看用戶名屬于哪個組)

    9、groupadd 組名  (創建新組)

    10、usermod -G/-g 組名 用戶名(把一個用戶加入一個組/把一個用戶改為屬于另一個組)

    11、userdel 用戶名/groupdel 組名   (刪除用戶/刪除組)

    12、scp root@202.198.31.66:/usr/local/file1 /home/  (遠程拷貝)

    13、history 3 (查看歷史命令列表,此命令是查看剛才用過的3個命令)

    14、find / -name http.conf -print (從根目錄開始查找文件并列出屬性)

    15、grep -c word /file1 (grep查找文件內容,此命令找出file1中word串出現次數)

    16、修改主機名  vi /etc/sysconfig/network,修改HOSTNAME一行為"HOSTNAME=主機名",然后運行命令" hostname 主機名"。一般還要修改/etc/hosts文件中的主機名。

    17、修改IP地址和修改網關(gateway選項)
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
     
    18、查看機器域名(host IP)
    host 202.198.31.62
     
    19、查看CPU
    dmesg|grep CPU
     
    20、查看機器配置
    dmesg|grep hd

    posted @ 2007-06-26 09:51 生活在別處 閱讀(487) | 評論 (0)編輯 收藏

    編輯
    作用域
    功能
    快捷鍵
    全局
    查找并替換
    Ctrl+F
    文本編輯器
    查找上一個
    Ctrl+Shift+K
    文本編輯器
    查找下一個
    Ctrl+K
    全局
    撤銷
    Ctrl+Z
    全局
    復制
    Ctrl+C
    全局
    恢復上一個選擇
    Alt+Shift+↓
    全局
    剪切
    Ctrl+X
    全局
    快速修正
    Ctrl1+1
    全局
    內容輔助
    Alt+/
    全局
    全部選中
    Ctrl+A
    全局
    刪除
    Delete
    全局
    上下文信息
    Alt+?
    Alt+Shift+?
    Ctrl+Shift+Space
    Java編輯器
    顯示工具提示描述
    F2
    Java編輯器
    選擇封裝元素
    Alt+Shift+↑
    Java編輯器
    選擇上一個元素
    Alt+Shift+←
    Java編輯器
    選擇下一個元素
    Alt+Shift+→
    文本編輯器
    增量查找
    Ctrl+J
    文本編輯器
    增量逆向查找
    Ctrl+Shift+J
    全局
    粘貼
    Ctrl+V
    全局
    重做
    Ctrl+Y
    ?
    查看
    作用域
    功能
    快捷鍵
    全局
    放大
    Ctrl+=
    全局
    縮小
    Ctrl+-
    ?
    窗口
    作用域
    功能
    快捷鍵
    全局
    激活編輯器
    F12
    全局
    切換編輯器
    Ctrl+Shift+W
    全局
    上一個編輯器
    Ctrl+Shift+F6
    全局
    上一個視圖
    Ctrl+Shift+F7
    全局
    上一個透視圖
    Ctrl+Shift+F8
    全局
    下一個編輯器
    Ctrl+F6
    全局
    下一個視圖
    Ctrl+F7
    全局
    下一個透視圖
    Ctrl+F8
    文本編輯器
    顯示標尺上下文菜單
    Ctrl+W
    全局
    顯示視圖菜單
    Ctrl+F10
    全局
    顯示系統菜單
    Alt+-
    ?
    導航
    作用域
    功能
    快捷鍵
    Java編輯器
    打開結構
    Ctrl+F3
    全局
    打開類型
    Ctrl+Shift+T
    全局
    打開類型層次結構
    F4
    全局
    打開聲明
    F3
    全局
    打開外部javadoc
    Shift+F2
    全局
    打開資源
    Ctrl+Shift+R
    全局
    后退歷史記錄
    Alt+←
    全局
    前進歷史記錄
    Alt+→
    全局
    上一個
    Ctrl+,
    全局
    下一個
    Ctrl+.
    Java編輯器
    顯示大綱
    Ctrl+O
    全局
    在層次結構中打開類型
    Ctrl+Shift+H
    全局
    轉至匹配的括號
    Ctrl+Shift+P
    全局
    轉至上一個編輯位置
    Ctrl+Q
    Java編輯器
    轉至上一個成員
    Ctrl+Shift+↑
    Java編輯器
    轉至下一個成員
    Ctrl+Shift+↓
    文本編輯器
    轉至行
    Ctrl+L
    ?
    搜索
    作用域
    功能
    快捷鍵
    全局
    出現在文件中
    Ctrl+Shift+U
    全局
    打開搜索對話框
    Ctrl+H
    全局
    工作區中的聲明
    Ctrl+G
    全局
    工作區中的引用
    Ctrl+Shift+G
    ?
    文本編輯
    作用域
    功能
    快捷鍵
    文本編輯器
    改寫切換
    Insert
    文本編輯器
    上滾行
    Ctrl+↑
    文本編輯器
    下滾行
    Ctrl+↓
    ?
    文件
    作用域
    功能
    快捷鍵
    全局
    保存
    Ctrl+X
    Ctrl+S
    全局
    打印
    Ctrl+P
    全局
    關閉
    Ctrl+F4
    全局
    全部保存
    Ctrl+Shift+S
    全局
    全部關閉
    Ctrl+Shift+F4
    全局
    屬性
    Alt+Enter
    全局
    新建
    Ctrl+N
    ?
    項目
    作用域
    功能
    快捷鍵
    全局
    全部構建
    Ctrl+B
    ?
    源代碼
    作用域
    功能
    快捷鍵
    Java編輯器
    格式化
    Ctrl+Shift+F
    Java編輯器
    取消注釋
    Ctrl+\
    Java編輯器
    注釋
    Ctrl+/
    Java編輯器
    添加導入
    Ctrl+Shift+M
    Java編輯器
    組織導入
    Ctrl+Shift+O
    Java編輯器
    使用try/catch塊來包圍
    未設置,太常用了,所以在這里列出,建議自己設置。
    也可以使用Ctrl+1自動修正。
    ?
    運行
    作用域
    功能
    快捷鍵
    全局
    單步返回
    F7
    全局
    單步跳過
    F6
    全局
    單步跳入
    F5
    全局
    單步跳入選擇
    Ctrl+F5
    全局
    調試上次啟動
    F11
    全局
    繼續
    F8
    全局
    使用過濾器單步執行
    Shift+F5
    全局
    添加/去除斷點
    Ctrl+Shift+B
    全局
    顯示
    Ctrl+D
    全局
    運行上次啟動
    Ctrl+F11
    全局
    運行至行
    Ctrl+R
    全局
    執行
    Ctrl+U
    ?
    重構
    作用域
    功能
    快捷鍵
    全局
    撤銷重構
    Alt+Shift+Z
    全局
    抽取方法
    Alt+Shift+M
    全局
    抽取局部變量
    Alt+Shift+L
    全局
    內聯
    Alt+Shift+I
    全局
    移動
    Alt+Shift+V
    全局
    重命名
    Alt+Shift+R
    全局
    重做
    Alt+Shift+Y

    posted @ 2007-03-21 10:56 生活在別處 閱讀(257) | 評論 (0)編輯 收藏

    在linux下用rm刪除大量文件時會出現這個錯誤:

    ?? rm -rf 'wz-a1.2007-02*'
    rm?-rf?*?-bash:?/bin/rm:?參數列表過長

    經過google, 發現這個方法, 特記下來, 以防以后忘記

    find?.?-name?"wz-a1.2007-02*"?|?xargs?rm -rf 'wz-a1.2007-02*'



    原帖地址:http://www.tkk7.com/kelefa/archive/2007/02/02/97528.html

    posted @ 2007-03-20 11:00 生活在別處 閱讀(3592) | 評論 (2)編輯 收藏

         摘要: 原文出處:http://www.tkk7.com/chords/archive/2006/12/14/87591.html------------------------Five Habits of Highly Profitable Software Developersby Robert J. Miller08/24/2006原文地址:http://today.java.net/pub...  閱讀全文

    posted @ 2007-03-05 23:11 生活在別處 閱讀(229) | 評論 (0)編輯 收藏

    ?作者:江南白衣,原文出處:http://www.tkk7.com/calvin/archive/2007/01/27/96318.html,轉載請保留出處。

    ??

    ?? Unix系統永遠只會越來越多,開發人員就沒必要特意學習它們的安裝、配置和管理了,就全部交給集成人員吧。
    ??? 但開發人員行走于Unix之間,依然有四樣東西要熟練。

    ??? 一、VI

    ??? 雖然Unix上的文本編輯器已經越來越好用,但不在Console前面,網速也不夠連XWindows的時候,還是要依賴VI。
    ??? 回想VI的時代背景,發現VI對開發人員已經周到得離譜了,熱鍵多到你雙手不離鍵盤就能完成大半編輯工作。
    ??? 建議自己制作一張自己認為有用,但又經常忘記的命令的sheet--參見附錄A,拿出考試的力氣把它背熟。

    ??? 二、文本處理

    ?? ??? 開發人員在Unix下干得最多的除了Make和除Bug外,大概就是處理日志文件、業務文件的查錯和統計了。
    ?????? 只會more和grep是不夠的,開發老手會把awk,sed,grep,sort,uniq,wc,head,tail這些文本處理命令,通過管道玩具式的拆卸拼裝,最后完成一件原本以為非編寫大段代碼不可的工作。周到的參數設定,讓人再一次感嘆那個簡單的年代,這樣復雜到極致的設計.......怪不得《Unix 編程藝術》的作者有那么驕傲的自覺。
    ????
    ???? 比如車東的每月訪問TOP10 統計腳本:

    awk?-F?'\t'?'{print?$4}'?2004_2.txt|?grep?chedong.com/tech/|uniq?-c|sort?-rn|head?-10?

    ??????以上命令的具體用法--參見附錄B:文本處理命令小結,大概說明如下:

    • awk -F '\t' 將2004_2.txt訪問紀錄文件,用TAB分割,打印第4列
    • grep chedong.com/tech 只列出chedong.com/tech筆記目錄下的文檔
    • uniq -c 匯總計數
    • sort -rn 按數值排序
    • head -10 TOP 10

    ???????? 補充:這些命令幾乎都支持正則表達式,學正則比較好的書是OReilly的《Mastering.Regular.Expressions.3rd 2006》????

    ??? 三、Bash Shell 編程

    ??? 上面的純粹命令管道拼裝完成不了所有的事情,有時需要用Shell編程來配合調度。????

    ??? 編程是開發人員的天賦本能,不論什么語言,看看參考手冊應該就能上手。

    ??? 見《Bash新手指南中文版》?,一份快速的Bash Shell編程指南。
    ?????
    ???? 更進一步,可以學習perl。

    ??? 四、Make or AutoMake

    ??? 用過Java的Ant后,想起Make就覺得很煩,很厭倦。總歸還是會的,見《GNU Make 3.8.0 中文手冊》????

    ???? 不過即使make已經精通到變態,每個人寫出來的MakeFile還是千奇百怪,再看看開源項目們個個都是automake+autoconf了,我們自己也長進一點吧。手工編寫MakeFile.am,讓auotomake變成MakeFile.in,再讓用戶./configure 生成最終的MakeFile。
    ????
    ??? autotools既能跨越平臺,又是標準的寫法,最重要的是,編寫MakeFile.am的工作量比MakeFile少多了,只要簡單的定義目標文件,先要處理的子目錄,需要的源文件,頭文件與庫文件就可以了。
    ???
    ????入門文章
    ??? 使用AutoMake輕松生成Makefile?
    ??? IBM DW:例解 autoconf 和 automake 生成 Makefile 文件

    ????上面兩文只作入門了解,實際的操作步驟--參見附錄C:我的automake1.9步驟小結。

    ??? 完整的免費電子書:
    ?《GNU Autoconf, Automake and Libtool》

    ?? ?另外,ACE里還貢獻了一個更厲害的MPC(Makefile, Project, and Workspace Creator ),??自動的生成MakeFile.am或者VC的項目文件。

    ??? 附錄A:我的VI易忘命令手冊

    ??? 上下左右:
    ??? ctrl+u/d 上下半屏,ctrl+f/b,上下一屏
    ??? H/G屏幕頭/文章末 ,0/$ 行首行末
    ???
    ??? 增刪改:
    ??? yy/dd 復制/刪除 一行,p/P:將yy/dd的內容paste出來
    ??? I/A 在行首/末添加, o/O 開新行,d0/d$ 刪除到行首,行末
    ??? u:undo

    ??? 查:
    ??? ? 向前查找, n/N 重復上一次查找

    附錄B: 文本處理命令小結

    ?? awk:處理結構化的文本(每行以固定符號分成若干列),提取打印某些字段,如:
    ??? ls -l|awk '{print $1}'? --將ls-l結果的第一列打印出來
    ??? awk -F":" '{print $1"? "$6}' /etc/passwd ,將以:分割的/etc/passwd文件的第1,6列打印出來,中間以空格分開
    ??? 詳見IBM DW中國的AWK實例(共3篇) 或 Bash新手指南中文版第6章

    ??? grep:過濾,大家用得最多的命令,支持正則表達式。參數有:
    ??? -i忽略大小寫,-n顯示line number,-c 統計在每個文件的出現次數,-l只顯示符合的文件的名字。

    ??? sed:流編輯器,主要用于替換,如:
    ??? sed -e '1,10s/foo/bar/g' myfile2.txt 將1到10行的文本中的foo 替換成bar,s代表替換,g代表全局替換
    ??? 支持正則的替換字符串,可以只替換某個范圍內的內容。
    ??? 用法不算簡單,詳見IBM DW中國的Sed實例(共3篇)或 Bash新手指南中文版第5章
    ????
    ??? sort:排序,參數有:
    ??? -r逆序, -n 數字比較 , -M 日歷比較 Feb,Dec, -f 忽略大小寫
    ??? 同樣支持結構化文件,如
    ??? sort -t : -k 1,1 /etc/passwd,以: 分割,只按第1列排序
    ??? sort -t : -k 1,1 -k2.2,3.4 /etc/passwd ,以:分割,先按第1列排序,再按第2列的第二個字符到第3列的第4個字符排序。

    ??? uniq:去除重復行。
    ??? 除了正常用法外,還有-c統計重復次數,和-u (唯一)和 -d (重復)兩個參數,只顯示唯一的和重復的行。

    ??? wc: 統計。
    ??? -l 行,-m 字符,-w 單詞

    附錄C: 我的automake1.9步驟小結

    1. 先編寫MakeFile.am
    2. 運行autoscan,生成configure.scan
    3. 修改configure.scan,同時把文件改名為configure.in :
      去除AC_CONFIG_HEADER([config.h])那行
      加入AM_INIT_AUTOMAKE([1.9 foreign])? (其中1.9是automake的版本號)
      加入AC_PROG_LIBTOOL? (如果用libtool的話)
      檢查AC_CONFIG_FILES,如果之前沒有先寫齊所有MakeFile.am,autoscan就不會幫你加入,需要自己手工補充。
    4. libtoolize (如果用libtool的話)
    5. aclocal
    6. autoconf
    7. automake --add-missing
    8. ./configure
    9. make

      大家需要編寫的文件從Makefile轉為了Makefile.am 和configure.in, ACE的Examples是很好的參考。

    posted @ 2007-03-05 22:53 生活在別處 閱讀(262) | 評論 (0)編輯 收藏

    查看表空間的名稱及大小
    select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
    from dba_tablespaces t, dba_data_files d
    where t.tablespace_name = d.tablespace_name
    group by t.tablespace_name;

    ====================================

    set pages 100
    col ts_name form a20 head 'Tablespace'
    col pieces form 9990 head 'Pcs'
    col ts_size form 999,990 head 'SizeMb'
    col largestpc form 999,990 head 'LrgMB'
    col totalfree form 999,990 head 'FreeMb'
    col pct_free form 990 head '%Free'
    col whatsused form 999,990 head 'Used'
    col pct_used form 990 head '%Used'
    col problem head 'Prob??'
    --spool /tmp/tbs_size.log

    select q2.other_tname ts_name, pieces, ts_size ts_size,
    ??????? nvl(largest_chunk,0) largestpc, nvl(total_free,0) totalfree,
    ??????? nvl(round((total_free/ts_size)*100,2),0) pct_free,
    ??????? ts_size-total_free whatsused,
    ??????? nvl(100-round((total_free/ts_size)*100,2),100) pct_used,
    ??????? decode(nvl(100-round((total_free/ts_size)*100,0),100),
    ?????????????? 85,'+',86,'+',87,'+',88,'+',89,'++',90,'++',91,'++',
    ?????????????? 92,'++',93,'++',94,'+++',95,'+++',96,'+++',97,'++++',
    ?????????????? 98,'+++++',99,'+++++',100,'+++++','') problem
    ? from (select dfs.tablespace_name,count(*) pieces,
    ?????????????? round(max(dfs.bytes)/1024/1024,2) largest_chunk,
    ?????????????? round(sum(dfs.bytes)/1024/1024,2) total_free
    ???????? from dba_free_space dfs group by tablespace_name) q1,
    ?????? (select tablespace_name other_tname,
    ?????????????? round(sum(ddf2.bytes)/1024/1024,2) ts_size
    ????????? from dba_data_files ddf2 group by tablespace_name) q2
    ?where q2.other_tname = q1.tablespace_name(+)
    ?order by nvl(100-round((total_free/ts_size)*100,0),100) desc;


    ====================================

    查看表空間使用情況的SQL語句:
    ?? SELECT a.tablespace_name "表空間名",total 表空間大小,free 表空間剩余大小,
    (total-free) 表空間使用大小,
    ROUND((total-free)/total,4)*100 "使用率 %"
    FROM? (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE
    GROUP BY tablespace_name ) a,
    (SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES
    GROUP BY tablespace_name) b
    WHERE a.tablespace_name=b.tablespace_name??

    =====================================?
    rem??? fsfi value compute
    ??? rem??? fsfi.sql
    ??? column fsfi format 999,99
    ??? select tablespace_name,sqrt(max(blocks)/sum(blocks))*
    ?????????? (100/sqrt(sqrt(count(blocks)))) fsfi
    ??? from dba_free_space
    ??? group by tablespace_name order by 1;
    ??? spool fsfi.rep;
    ??? /
    ??? spool off;

    posted @ 2007-03-05 22:45 生活在別處 閱讀(9722) | 評論 (0)編輯 收藏

    今天,做了一個oracle數據庫的存儲過程,可當中一個游標將表給鎖住了。
    弄了半天,一開始用kill 3444直接將進程殺死。可是命令對它沒有一點作用,數據庫鎖一直呆在那里。

    后來在google一搜,發現一篇很好文章。摘錄在后面。


    即刻殺死了數據庫鎖。方法如下:
    1、查看數據庫鎖,診斷鎖的來源及類型:
    select object_id,session_id,locked_mode from v$locked_object;

    2、找出數據庫的serial#,以備殺死:
    select t2.username,t2.sid,t2.serial#,t2.logon_time
    from v$locked_object t1,v$session t2
    where t1.session_id=t2.sid order by t2.logon_time;

    3、殺死該session
    alter system kill session 'sid,serial#'

    4、that't all, it's right!


    '===============================================================================

    ORACLE鎖的管理
    2003-03 余楓

    ORACLE里鎖有以下幾種模式:

    0:none
    1:null   空
    2:Row-S   行共享(RS):共享表鎖 
    3:Row-X   行專用(RX):用于行的修改
    4:Share   共享鎖(S):阻止其他DML操作
    5:S/Row-X  共享行專用(SRX):阻止其他事務操作
    6:exclusive 專用(X):獨立訪問使用

    數字越大鎖級別越高, 影響的操作越多。

    一般的查詢語句如select ... from ... ;是小于2的鎖, 有時會在v$locked_object出現。

    select ... from ... for update;   是2的鎖。

    當對話使用for update子串打開一個游標時,
    所有返回集中的數據行都將處于行級(Row-X)獨占式鎖定,
    其他對象只能查詢這些數據行,不能進行update、delete或select...for update操作。

    insert / update / delete ... ;    是3的鎖。

    沒有commit之前插入同樣的一條記錄會沒有反應,
    因為后一個3的鎖會一直等待上一個3的鎖, 我們必須釋放掉上一個才能繼續工作。

    創建索引的時候也會產生3,4級別的鎖。

    locked_mode為2,3,4不影響DML(insert,delete,update,select)操作,
    但DDL(alter,drop等)操作會提示ora-00054錯誤。

    有主外鍵約束時 update / delete ... ; 可能會產生4,5的鎖。

    DDL語句時是6的鎖。

    以DBA角色, 查看當前數據庫里鎖的情況可以用如下SQL語句:

    select object_id,session_id,locked_mode from v$locked_object;

    select t2.username,t2.sid,t2.serial#,t2.logon_time
    from v$locked_object t1,v$session t2
    where t1.session_id=t2.sid order by t2.logon_time;

    如果有長期出現的一列,可能是沒有釋放的鎖。

    我們可以用下面SQL語句殺掉長期沒有釋放非正常的鎖:

    alter system kill session 'sid,serial#';

    如果出現了鎖的問題, 某個DML操作可能等待很久沒有反應。

    當你采用的是直接連接數據庫的方式,
    也不要用OS系統命令 $kill process_num 或者 $kill -9 process_num來終止用戶連接,
    因為一個用戶進程可能產生一個以上的鎖, 殺OS進程并不能徹底清除鎖的問題。

    記得在數據庫級別用alter system kill session 'sid,serial#';殺掉不正常的鎖。

    posted @ 2007-03-05 09:51 生活在別處 閱讀(333) | 評論 (0)編輯 收藏


    條件
    1

    在分析 (analyze) 指定索引之后,查詢 index_stats height 字段的值,如果這個值 >=4 , 則最好重建( rebuild )這個索引。雖然這個規則不是總是正確,但如果這個值一直都是不變的,則這個索引也就不需重建。

    條件 2

    在分析 (analyze) 指定索引之后,查詢 index_stats del_lf_rows lf_rows 的值 , 如果 (del_lf_rows/lf_rows)*100? > =? 20 ,則這個索引也需要重建。

    例子

    SQL > analyze index IND_PK validate structure;

    ?

    SQL > select name,height,del_lf_rows,lf_rows,(del_lf_rows/lf_rows) *100 from index_stats;

    ?

    NAME?????????????????????????????? HEIGHT DEL_LF_ROWS??? LF_ROWS (DEL_LF_ROWS/LF_ROWS)*100

    ?

    ------------------------------ ---------- ----------- ---------- -------------------------

    ?

    INDX_PK??????????????????????????????? 4????? 277353???? 990206??????????????? 28.0096263

    SQL> alter index IND_PK rebuild;

    posted @ 2007-03-05 09:46 生活在別處 閱讀(476) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲AV成人片无码网站| 亚洲一级黄色视频| 91免费精品国自产拍在线不卡| 爱丫爱丫影院在线观看免费| 一级特黄录像视频免费| 成人福利在线观看免费视频| 日韩电影免费在线观看网址 | 国产免费黄色大片| 在线观看亚洲免费| 永久免费视频v片www| 国产精品极品美女免费观看| 国产美女无遮挡免费视频| 韩国18福利视频免费观看| 永久免费视频v片www| 免费精品国产自产拍观看| 亚洲裸男gv网站| 亚洲人成色77777| 久久久久亚洲av无码尤物| 亚洲a一级免费视频| 99久久精品国产亚洲| 亚洲国产精品成人综合色在线婷婷| 亚洲久悠悠色悠在线播放| 亚洲精品一卡2卡3卡四卡乱码| 色噜噜噜噜亚洲第一| 国产免费MV大全视频网站| 一个人免费视频观看在线www | 亚洲一区二区三区成人网站 | 久久久久亚洲AV无码专区体验| 亚洲色图古典武侠| 中文字幕乱码亚洲精品一区| 亚洲国产成人AV网站| 国产无遮挡色视频免费观看性色| 可以免费观看的国产视频| 久久受www免费人成_看片中文| 免费无遮挡无码视频网站| 亚洲男人av香蕉爽爽爽爽| 亚洲精品国产美女久久久| 亚洲欧洲国产综合| 99亚洲乱人伦aⅴ精品| 美女无遮挡拍拍拍免费视频| 最近免费中文字幕高清大全|