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

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

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

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    RedHat6.5網卡問題總結

     問題描述:準備用RedHat6.5安裝Oracle 12c RAC,系統環境準備好后發現,新版本的RedHat網卡配置跟以前不大一樣,總結問題與解決方法如下:
      1、找不到eth0文件
      在使用RedHat6.5,新裝好的系統,發現沒有eth0網卡,默認的第一個網卡是Auto-eth0
    [root@rac01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth0
    TYPE=Ethernet
    BOOTPROTO=none
    IPADDR=10.10.10.110
    PREFIX=24
    GATEWAY=10.10.10.111
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME=eth0
    UUID=86d44060-4579-48cc-b85b-219a206ca37c
    ONBOOT=yes
    HWADDR=00:50:56:95:09:76
    LAST_CONNECT=1411004329
      解決方法:
      直接更名ifcfg-Auto_eth0文件為eth0,重啟網卡后會發現,網卡名已經變為eth0
      [root@rac01 ~]# service network restart
      Bringing up loopback interface:                            [  OK  ]
      Bringing up interface eth0:  Active connection state: activated
      2、ifconfig 發現網卡服務名并未更改
    [root@rac01 ~]# ifconfig
    Auto_eth0 Link encap:Ethernet  HWaddr 00:50:56:95:09:76
    inet addr:10.10.10.110  Bcast:10.10.10.111 Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe95:976/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:484 errors:0 dropped:0 overruns:0 frame:0
    TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:40095 (39.1 KiB)  TX bytes:6271 (6.1 KiB)
      解決方法:
      每次更改RedHat的網卡信息,RedHat會自動的將網卡的MAC地址和對應的網卡服務名關系記錄在/etc/udev/rules.d/70-persistent-net.rules中,修改里面的對應服務名即可
    [root@rac01 ~]# vim /etc/udev/rules.d/70-persistent-net.rules
    # This file was automatically generated by the /lib/udev/write_net_rules
    # program, run by the persistent-net-generator.rules rules file.
    #
    # You can modify it, as long as you keep each rule on a single
    # line, and change only the value of the NAME= key.
    # PCI device 0x15ad:0x07b0 (vmxnet3)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:1e:f6:ad", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    修改完成后需重啟一下系統,再次查看網卡服務名已經更改
    [root@rac01 ~]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:50:56:95:09:76
    inet addr:10.109.67.81  Bcast:10.109.67.255  Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe95:976/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:985 errors:0 dropped:0 overruns:0 frame:0
    TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:74395 (72.6 KiB)  TX bytes:6527 (6.3 KiB)
      3、網卡eth0被刪除后,新加的網卡成了eth1,如何讓從eth0開始
    [root@rac01 ~]# ifconfig
    eth1      Link encap:Ethernet  HWaddr 00:50:56:95:09:76
    inet addr:10.10.10.110 Bcast:10.10.10.111  Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe95:976/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:830 errors:0 dropped:0 overruns:0 frame:0
    TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:63700 (62.2 KiB)  TX bytes:6259 (6.1 KiB)
    eth2      Link encap:Ethernet  HWaddr 00:0C:29:1E:F6:B7
    inet addr:10.10.10.120  Bcast:10.10.10.111Mask:255.255.255.0
    inet6 addr: fe80::20c:29ff:fe1e:f6b7/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:777 errors:0 dropped:0 overruns:0 frame:0
    TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:54938 (53.6 KiB)  TX bytes:746 (746.0 b)
      解決方法:
      同2問題類似,即可以手動的修改70-persistent-net.rules文件,將對應的MAC地址與網卡序號改成想要的,也可以直接刪除該文件,重啟系統后,RedHat會自動的創建該文件,并從0開始計數。
      刪除文件,重啟系統
      [root@rac01 ~]# mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/7
      0-persistent-net.rules.bak
      [root@rac01 ~]# reboot
      再次查看,會發現已經從eht0開始
    [root@rac01 ~]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:50:56:95:09:76
    inet addr:10.109.67.81  Bcast:10.109.67.255  Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe95:976/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:206 errors:0 dropped:0 overruns:0 frame:0
    TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:19282 (18.8 KiB)  TX bytes:7215 (7.0 KiB)
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:1E:F6:B7
    inet addr:10.109.67.83  Bcast:10.109.67.255  Mask:255.255.255.0
    inet6 addr: fe80::20c:29ff:fe1e:f6b7/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:131 errors:0 dropped:0 overruns:0 frame:0
    TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:8736 (8.5 KiB)  TX bytes:746 (746.0 b)
     4、每次重啟網卡,總是提示
      Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/9
      此時網卡也可以正常通信,這個是因為RedHat自己開發的NetworkManager管理工具和/etc/sysconfig/network-scripts/ifcfg-ethx配置不同步造成的。
      解決方法:
      要消除這個提示,請關閉NetworkManager服務即可:
    [root@rac01 ~]# service network restart
    Shutting down loopback interface:                        [  OK  ]
    Bringing up loopback interface:                            [  OK  ]
    Bringing up interface eth0:  Active connection state: activated
    Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/2   [  OK  ]
    Bringing up interface eth1:  Active connection state: activated
    Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/3   [  OK  ]
      關閉NetworkManager服務
      [root@rac01 ~]# service NetworkManager stop
      Stopping NetworkManager daemon:                            [  OK  ]
      再次重啟網卡
      [root@rac01 ~]# service network restart
      Shutting down loopback interface:                     [  OK  ]
      Bringing up loopback interface:                          [  OK  ]
      Bringing up interface eth0:                                [  OK  ]
      Bringing up interface eth1:                                [  OK  ]
      5、重啟網卡出現提示:
      Bringing up interface eth0:  Determining if ip address 10.109.67.81 is already in use for device eth0...
      [  OK  ]
      Bringing up interface eth1:  Determining if ip address 10.109.67.83 is already in use for device eth1...
      [  OK  ]
      該警告一般是由于網卡解析arp協議導致的,可在網卡的配置文件中加入ARPCHECK=NO參數來屏蔽該檢查
    [root@rac01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=none
    IPADDR=10.109.67.81
    PREFIX=24
    GATEWAY=10.109.67.254
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME=eth0
    UUID=86d44060-4579-48cc-b85b-219a206ca37c
    ONBOOT=yes
    HWADDR=00:50:56:95:09:76
    LAST_CONNECT=1411004329
    ARPCHECK=no
      再次啟動網卡,一切正常
      [root@rac01 ~]# service network restart
      Shutting down interface eth0:                              [  OK  ]
      Shutting down interface eth1:                              [  OK  ]
      Shutting down loopback interface:                          [  OK  ]
      Bringing up loopback interface:                            [  OK  ]
      Bringing up interface eth0:                                [  OK  ]
      Bringing up interface eth1:                                [  OK  ]

    posted @ 2014-12-03 13:32 順其自然EVO 閱讀(256) | 評論 (0)編輯 收藏

    Linux安裝FTP服務

    ftp服務器
      1、  在Linux和其他機器之間共享文件(在linux下安裝ftp)
      2、  具體安裝步驟:
      a) 首先查看我的Redhat5上是否已經安裝
      rpm -qa|grep vsftpd
      b) 查看服務的運行狀態;
      Service iptables status
      c) 安裝. 如果沒有安裝話,就要選擇一種方式安裝
      i. 可以到官方網站去下載
      也可以用光盤安裝,RedHat 5的安盤里自帶的,所以我選擇光盤安裝
      ii.   (1)先把光盤                  掛載到系統上:
      mount /dev/cdrom /mnt
      這樣光盤的內容就被掛載到/mnt的設備上,現在可以通過/mnt訪問光盤上的內容了
      iii.   .進入光盤,查找安裝包,cd /mnt/Packages
      iv.   4.找到安裝包vsftp-0.17-17.i386.rpm
      v.   5.安裝程序,rpm -ivh vsftp-0.17-17.i386.rpm
      vi.   再rpm -qa| grep vsftpd檢測是否安裝(出現rpm -ivh vsftp-0.17-17.i386.rpm表示已經安裝完成)
      3、  ftp服務的啟動和關閉命令為:service vsftpd strat/stop/restart
      4、  默認的ftp服務器命令:
      a)        啟動:service vsftpd start(其中vsftpd的最后面的那個d代表是在后臺進行的進程)
      b)        登錄:ftp localhost
      c)        退出:bye
      5、  Linux查詢ip(ifconfig)
      6、  Vmware在安裝之后會有三個連接,兩個是虛擬的(也是windows用的),虛擬的那一塊網卡也是虛擬的,只要把這個網卡放在,其中的任何一個網段,就可以通了。
      7、  在windows下ping linux如果linux下安裝了防火墻那么是ping不能的。在默認情況下,linux是安裝防火墻的,防火墻也會阻止ftp服務器
      解決辦法是,打開端口或者關閉防火墻
      8、  關閉防火墻:service iptables stop
      9、  當不知道允許不允許,可以看ftp主要配置文件:
      /etc/vsftpd下面vsftpd.conf
      在linux下面大部分都有一個配置文件。
      10、             VsFtp的配置文件
      a)        /etc/vsftpd/vsftpd.conf----------主配置文件
      b)        /etc/rc.d/init.d/vsftpd ----------啟動腳本
      c)        /etc/pam.d/vsftpd    ----------- PAM認證文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止訪問的用戶來自/etc/vsftpd/ftpusers文件中的用戶)
      d)        /etc/vsftpd/ftpusers-------------禁止使用vsftpd的用戶列表文件。記錄不允許訪問FTP服務器的用戶名單,管理員可以把一些對系統安全有威脅的用戶賬號記錄在此文件中,以免用戶從FTP登錄后獲得大于上傳下載操作的權利,而對系統造成損壞。
      e)        /etc/vsftpd/user_list-------------禁止或允許使用vsftpd的用戶列表文件。這個文件中指定的用戶缺省情況(即在/etc/vsftpd/vsftpd.conf中設置userlist_deny=YES)下也不能訪問FTP服務器,在設置了userlist_deny=NO時,僅允許user_list中指定的用戶訪問FTP服務器。
      f)         /var/ftp -----------------------------匿名用戶主目錄;本地用戶主目錄為:/home/用戶主目錄,即登錄后進入自己家目錄
      g)        /var/ftp/pub------------------------匿名用戶的下載目錄,此目錄需賦權根chmod 1777 pub(1為特殊權限,使上載后無法刪除)
      h)   /etc/logrotate.d/vsftpd.log--- Vsftpd的日志文件
     11、下面對主要的配置文件進行介紹:
    #Example config file /etc/vsftpd/vsftpd.conf
    # Thedefault compiled in settings are fairly paranoid. This sample file
    #loosens things up a bit, to make the ftp daemon more usable.
    #Please see vsftpd.conf.5 forall compiled in defaults.
    # READTHIS: This example file is NOT an exhaustive list of vsftpd options.
    #Please read the vsftpd.conf.5 manualpage to get a full idea of vsftpd's
    #capabilities.
    #Allow anonymous FTP  (Beware - allowed by default if you comment this out).
    anonymous_enable=YES ( 是否允許 匿名登錄FTP 服務器,默認設置為YES 允許,即用戶可使用用戶名ftp 或anonymous 進行ftp登錄,口令為用戶的E-mail 地址。如不允許匿名訪問去掉前面#并設置為NO )
    #Uncomment this to allow local users to log in.
    local_enable=YES (是否允許本地用戶 ( 即 linux 系統中的用戶帳號) 登錄FTP服務器,默認設置為YES允許, 本地用戶登錄后會進入用戶主目錄,而匿名用戶登錄后進入匿名用戶的下載目錄/var/ftp/pub ;若只允許匿名用戶訪問,前面加上#,可 阻止本地用戶訪問FTP 服務器。)
    #Uncomment this to enable any form of FTP write command.
    write_enable=YES  ( 是否允許本地用戶對 FTP 服務器文件具有寫權限 , 默認設置為 YES 允許 )
    #Default umask for local users is 077. You may wish to change this to 022,
    # ifyour users expect that (022 is used by most other ftpd's)
    # local_umask=022 (或其它值,設置本地用戶的文件掩碼 為缺省022,也可根據個人喜好將其設置為其他值,默認值為077)
    #Uncomment this to allow the anonymous FTP user to upload files. This only
    # hasan effect if the above global write enable is activated. Also, you will
    #obviously need to create a directory writable by the FTP user.
    #anon_upload_enable=YES ( 是否允許匿名用戶上傳文件 , 須將 write_enable=YES , 默認設置為 YES 允許 )
    #Uncomment this if you want the anonymous FTP user to be able to create
    # newdirectories.
    #anon_mkdir_write_enable=YES   ( 是否允許匿名用戶創建新文件夾 , 默認設置為 YES 允許 )
    #Activate directory messages - messages given to remote users when they
    # gointo a certain directory.
    #dirmessage_enable=YES ( 是否激活目錄歡迎信息功能 , 當用戶用 CMD模式首次訪問服務器上某個目錄時 ,FTP 服務器將顯示歡迎信息 , 默認情況下 , 歡迎信息是通過 該 目錄下的 .message 文件獲得的,此文件保存自定義的歡迎信息,由用戶自己建立)
    #Activate logging of uploads/downloads.
    xferlog_enable=YES ( 默認值為 NO 如果啟用此選項,系統將會維護記錄服務器上傳和下載情況的日志文件,默認情況該日志文件為/var/log/vsftpd.log, 也可以通過下面的 xferlog_file 選項對其進行設定。)
    # Makesure PORT transfer connections originate from port 20 (ftp-data).
    connect_from_port_20=YES ( 設定 FTP 服務器將啟用 FTP 數據端口的連接請求 ,ftp-data 數據傳輸 ,21 為連接控制端口 )
    # Ifyou want, you can arrange for uploaded anonymous files to be owned by
    # adifferent user. Note! Using "root" for uploaded files is not
    #recommended!-注意,不推薦使用 root 用戶上傳文件
    #chown_uploads=YES ( 設定是否允許 改變 上傳文件的屬主 , 與下面一個設定項配合使用 )
    #chown_username=whoeve r ( 設置想要改變的上傳文件的屬主 , 如果需要 , 則輸入一個系統用戶名 , 例如可以把上傳的文件都改成 root 屬主。whoever :任何人)
    # Youmay override where the log file goes if you like. The default is shown
    #below.
    #xferlog_file=/var/log/vsftpd.log ( 設定系統維護記錄FTP 服務器上傳和下載情況的日志文件,/var/log/vsftpd.log 是默認的,也可以另設其它)
    # Ifyou want, you can have your log file in standard ftpd xferlog format
    #xferlog_std_format=YES ( 如果啟用此選項 , 傳輸日志文件將以標準 xferlog 的格式書寫,該格式的日志文件默認為/var/log/xferlog,也可以通過xferlog_file 選項對其進行設定,默認值為NO)
    #dual_log_enable ( 如果添加并啟用此選項,將生成兩個相似的日志文件,默認在/var/log/xferlog和/var/log/vsftpd.log 目錄下。前者是wu_ftpd類型的傳輸日志,可以利用標準日志工具對其進行分析;后者是vsftpd 類型的日志)
    #syslog_enable ( 如果添加并啟用此選項,則原本應該輸出到/var/log/vsftpd.log 中的日志,將輸出到系統日志中)
    # Youmay change the default value for timing out an idle session.
    #idle_session_timeout=600 (設置數據傳輸中斷間隔時間,此語句表示空閑的用戶會話中斷時間為600秒,即當數據傳輸結束后,用戶連接FTP服務器的時間不應超過600秒,可以根據實際情況對該值進行修改)
    # Youmay change the default value for timing out a data connection.
    #data_connection_timeout=120 ( 設置數據連接超時時間 , 該語句表示數據連接超時時間為 120 秒 , 可根據實際情況對其個修改 )
    # Itis recommended that you define on your system a unique user which the
    # ftpserver can use as a totally isolated and unprivileged user.
    #nopriv_user=ftpsecure ( 運行 vsftpd 需要的非特權系統用戶,缺省是nobody )
    #Enable this and the server will recognise asynchronous ABOR requests. Not
    #recommended for security (the code is non-trivial). Not enabling it,
    #however, may confuse older FTP clients.
    #async_abor_enable=YES ( 如果 FTPclient 會下達“async ABOR ”這個指令時,這個設定才需要啟用,而一般此設定并不安全,所以通常將其取消)
    # Bydefault the server will pretend to allow ASCII mode but in fact ignore
    # therequest. Turn on the below options to have the server actually do ASCII
    #mangling on files when in ASCII mode.
    #Beware that on some FTP servers, ASCII support allows a denial of service
    #attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
    #predicted this attack and has always been safe, reporting the size of the
    # rawfile.
    #ASCII mangling is a horrible feature of the protocol.
    #ascii_upload_enable=YES ( 大多數 FTP 服務器都選擇用 ASCII 方式傳輸數據 , 將 # 去掉就能實現用 ASCII 方式上傳和下載文件 )
    #ascii_download_enable=YES ( 將 # 去掉就能實現用 ASCII 方式下載文件 )
    # Youmay fully customise the login banner string:
    #ftpd_banner=Welcome to blah FTP service. (將#去掉可設置登錄FTP服務器時顯示的歡迎信息,可以修改=后的歡迎信息內容。另外如在需要設置更改目錄歡迎信息的目錄下創建名為 .message 的文件,并寫入歡迎信息保存后,在進入到此目錄會顯示自定義歡迎信息 )
    # Youmay specify a file of disallowed anonymous e-mail addresses. Apparently
    #useful for combatting certain DoS attacks.
    #deny_email_enable=YES ( 可將某些特殊的 email address 抵擋住。如果以anonymous 登錄服務器時,會要求輸入密碼,也就是您的email address, 如果很討厭某些email address ,就可以使用此設定來取消他的登錄權限,但必須與下面的設置項配合 )
    #(default follows)
    #banned_email_file=/etc/vsftpd/banned_emails (當上面的 deny_email_enable=YES 時,可以利用這個設定項來規定那個email address 不可登錄vsftpd 服務器,此文件需用戶自己創建,一行一個email address 即可! )
    # Youmay specify an explicit list of local users to chroot() to their home
    #directory. If chroot_local_user is YES, then this list becomes a list of
    #users to NOT chroot().
    #chroot_list_enable=YES ( 設置為 NO 時,用戶登錄FTP 服務器后具有訪問自己目錄以外的其他文件的權限, 設置為 YES 時 , 用戶被鎖定在自己的 home 目錄中,vsftpd 將在下面 chroot_list_file 選項值的位置尋找 chroot_list 文件,此文件需用戶建立, 再將需鎖定在自己home 目錄的用戶列入其中,每行一個用戶)
    #(default follows)
    #chroot_list_file=/etc/vsftpd/chroot_list ( 此文件需自己建立 , 被列入此文件的用戶 , 在登錄后將不能切換到自己目錄以外的其他目錄 , 由 FTP 服務器自動地 chrooted 到用戶自己的home 目錄下,使得 chroot_list 文件中的用戶不能隨意轉到其他用戶的FTP home 目錄下,從而有利于FTP 服務器的安全管理和隱私保護)
    # Youmay activate the "-R" option to the builtin ls. This is disabled by
    #default to avoid remote users being able to cause excessive I/O on large
    #sites. However, some broken FTP clients such as "ncftp" and"mirror" assume
    # thepresence of the "-R" option, so there is a strong case for enablingit.
    #ls_recurse_enable=YES ( 是否允許遞歸查詢 , 大型站點的 FTP 服務器啟用此項可以方便遠程用戶查詢 )
    # When"listen" directive is enabled, vsftpd runs in standalone mode and
    #listens on IPv4 sockets. This directive cannot be used in conjunction
    # withthe listen_ipv6 directive.
    listen=YES ( 如果設置為 YES , 則 vsftpd 將以獨立模式運行,由vsftpd 自己監聽和處理連接請求)
    # Thisdirective enables listening on IPv6 sockets. To listen on IPv4 and IPv6
    #sockets, you must run two copies of vsftpd whith two configuration files.
    # Makesure, that one of the listen options is commented !!
    #listen_ipv6=YES ( 設定是否支持IPV6)
    #pam_service_name=vsftpd ( 設置 PAM 外掛模塊提供的認證服務所使用的配置文件名 ,即/etc/pam.d/vsftpd 文件,此文件中file=/etc/vsftpd/ftpusers字段,說明了PAM 模塊能抵擋的帳號內容來自文件/etc/vsftpd/ftpusers中)
    #userlist_enable=YES/NO (此選項默認值為NO , 此時ftpusers 文件中的用戶禁止登錄FTP 服務器;若此項設為YES ,則 user_list 文件中的用戶允許登錄 FTP 服務器,而如果同時設置了 userlist_deny=YES ,則 user_list 文件中的用戶將不允許登錄FTP 服務器,甚至連輸入密碼提示信息都沒有,直接被FTP 服務器拒絕)
    #userlist_deny=YES/NO (此項默認為YES ,設置是否阻扯user_list 文件中的用戶登錄FTP 服務器)
      tcp_wrappers=YES ( 表明服務器使用 tcp_wrappers 作為主機訪問控制方式,tcp_wrappers 可以實現linux 系統中網絡服務的基于主機地址的訪問控制,在/etc 目錄中的hosts.allow 和hosts.deny 兩個文件用于設置tcp_wrappers 的訪問控制,前者設置允許訪問記錄,后者設置拒絕訪問記錄。例如想限制某些主機對FTP 服務器192.168.57.2 的匿名訪問,編緝/etc/hosts.allow 文件,如在下面增加兩行命令:vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY 表明限制IP 為192.168.57.1/192.168.57.9 主機訪問IP 為192.168.57.2 的FTP服務器,此時FTP 服務器雖可以PING 通,但無法連接)
      12、 匿名:anonymous,密碼是沒有的
      13、 Vsftp根目錄 /var/ftp/
      a) 向下面的pub里面下載文件就可以了
      b) 如果要上傳,默認不允許,匿名anonymous上傳。
      14、很多ftp用戶管理跟linux用戶管理放在一起的
      15、允許root用戶上傳(一般不用)
      16、允許root上傳
      a) 只需要更改兩個配置文件文件;(/etc/vsftpd)
      b) 改配置文件vsftpd.user_list(把root用戶刪除或者用#注釋,#root)
      c) 改配置文件vsftpd.user_ftpusers(把root用戶刪除或者用#注釋,#root)
      d) 再重新啟動vsftp  service vsftpd restart
      在這種情況下用root登錄上去,默認登錄根目錄
      17、 默認啟動設置:
      a) 方法一:chkconfig vsftpdon或chkconfig –level 5 vsftpd on
      b) 只要在第2--5為on就能隨機在哪個級別上啟動,
      c) 查看啟動方式:chkconfig--list |grep vsftpd
      d) 方法二:用vi打開:/etc/rc.local在里面加入/user/local/bin/vsftpd即可
      18、在配置vsftpd過程中linux的selinux默認下是啟動的,有時候這個東西有加強安全性的同時很討厭,比如讓配置好的vsftpd無法正常登錄,也無法上傳。此時可以采用兩種辦法。
      i. 一種辦法:
      #setsebool -P ftpd_disable_trans 1
      然后重啟vsftpd服務。
      ii. 另一種辦法,直接關掉selinux
      vim /etc/sysconfig/selinux
      selinux=disable
      然后重啟即可。
      19、 或者先查看selinux的狀態: getsebool –a或sestatus -v
      a) 使用setsebool命令開啟對應屬性:setsebool ftpd_disable_trans on
      b) setsebool使用-P參數,無需每次開機都輸入這個命令: setsebool -Pftpd_disable_trans on
      c) 獲取本機selinux策略值,也稱為bool值。:getsebool -a  命令或sestatus -b

    posted @ 2014-12-03 13:31 順其自然EVO 閱讀(1001) | 評論 (0)編輯 收藏

    iOS中使用Reachability 檢測網絡

    如果你想在iOS程序中提供一僅在wifi網絡下使用(Reeder),或者在沒有網絡狀態下提供離線模式(Evernote)。那么你會使用到Reachability來實現網絡檢測。
      寫本文的目的
      了解Reachability都能做什么
      檢測3中網絡環境
      2G/3G
      wifi
      無網絡
      如何使用通知
      單個controller
      多個controller
      簡單的功能:
      僅在wifi下使用
      Reachability簡介
      Reachablity 是一個iOS下檢測,iOS設備網絡環境用的庫。
      監視目標網絡是否可用
      監視當前網絡的連接方式
      監測連接方式的變更
      安裝
      創建 network 工程(network是我創建的demo工程,附件中可以下載到)
      使用Cocoaspod安裝依賴
      在項目中添加 SystemConfiguration.framework 庫
      由于Reachability非常常用。直接將其加入到Supporting Files/networ-Prefix.pch中:
      #import <Reachability/Reachability.h>
      #import <Reachability/Reachability.h>
      如果你還不知道cocoaspod是什么,看這里:
      http://witcheryne.iteye.com/blog/1873221
      使用
      stackoverflow上有一篇回答,很好的解釋了reachability的用法
      http://stackoverflow.com/questions/11177066/how-to-use-ios-reachability
      一般情況一個Reachability實例就ok了。
      一個Controller只需要一個Reachability
      Block方式使用
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    DLog(@"開啟 www.apple.com 的網絡檢測");
    Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
    DLog(@"-- current status: %@", reach.currentReachabilityString);
    // start the notifier which will cause the reachability object to retain itself!
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:)
    name:kReachabilityChangedNotification
    object:nil];
    reach.reachableBlock = ^(Reachability * reachability)
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    self.blockLabel.text = @"網絡可用";
    self.blockLabel.backgroundColor = [UIColor greenColor];
    });
    };
    reach.unreachableBlock = ^(Reachability * reachability)
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    self.blockLabel.text = @"網絡不可用";
    self.blockLabel.backgroundColor = [UIColor redColor];
    });
    };
    [reach startNotifier];
    }
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    DLog(@"開啟 www.apple.com 的網絡檢測");
    Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
    DLog(@"-- current status: %@", reach.currentReachabilityString);
    // start the notifier which will cause the reachability object to retain itself!
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:)
    name:kReachabilityChangedNotification
    object:nil];
    reach.reachableBlock = ^(Reachability * reachability)
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    self.blockLabel.text = @"網絡可用";
    self.blockLabel.backgroundColor = [UIColor greenColor];
    });
    };
    reach.unreachableBlock = ^(Reachability * reachability)
    {
    dispatch_async(dispatch_get_main_queue(), ^{
    self.blockLabel.text = @"網絡不可用";
    self.blockLabel.backgroundColor = [UIColor redColor];
    });
    };
    [reach startNotifier];
    }
     使用notification的方式
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    DLog(@"開啟 www.apple.com 的網絡檢測");
    Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
    DLog(@"-- current status: %@", reach.currentReachabilityString);
    // start the notifier which will cause the reachability object to retain itself!
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:)
    name:kReachabilityChangedNotification
    object:nil];
    [reach startNotifier];
    }
    - (void) reachabilityChanged: (NSNotification*)note {
    Reachability * reach = [note object];
    if(![reach isReachable])
    {
    self.notificationLabel.text = @"網絡不可用";
    self.notificationLabel.backgroundColor = [UIColor redColor];
    self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
    self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
    return;
    }
    self.notificationLabel.text = @"網絡可用";
    self.notificationLabel.backgroundColor = [UIColor greenColor];
    if (reach.isReachableViaWiFi) {
    self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
    self.wifiOnlyLabel.text = @"當前通過wifi連接";
    } else {
    self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
    self.wifiOnlyLabel.text = @"wifi未開啟,不能用";
    }
    if (reach.isReachableViaWWAN) {
    self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
    self.wwanOnlyLabel.text = @"當前通過2g or 3g連接";
    } else {
    self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
    self.wwanOnlyLabel.text = @"2g or 3g網絡未使用";
    }
    }
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    DLog(@"開啟 www.apple.com 的網絡檢測");
    Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
    DLog(@"-- current status: %@", reach.currentReachabilityString);
    // start the notifier which will cause the reachability object to retain itself!
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:)
    name:kReachabilityChangedNotification
    object:nil];
    [reach startNotifier];
    }
    - (void) reachabilityChanged: (NSNotification*)note {
    Reachability * reach = [note object];
    if(![reach isReachable])
    {
    self.notificationLabel.text = @"網絡不可用";
    self.notificationLabel.backgroundColor = [UIColor redColor];
    self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
    self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
    return;
    }
    self.notificationLabel.text = @"網絡可用";
    self.notificationLabel.backgroundColor = [UIColor greenColor];
    if (reach.isReachableViaWiFi) {
    self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
    self.wifiOnlyLabel.text = @"當前通過wifi連接";
    } else {
    self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
    self.wifiOnlyLabel.text = @"wifi未開啟,不能用";
    }
    if (reach.isReachableViaWWAN) {
    self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
    self.wwanOnlyLabel.text = @"當前通過2g or 3g連接";
    } else {
    self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
    self.wwanOnlyLabel.text = @"2g or 3g網絡未使用";
    }
    }
      附件demo說明
      開啟wifi狀態
      關閉wifi的狀態
      遺留問題
      如何在多個controller之前共用一個Reachability(附件demo中是一個controller一個Reachability實例)
      應該在什么使用停止Reachability的檢測.

    posted @ 2014-12-03 13:31 順其自然EVO 閱讀(196) | 評論 (0)編輯 收藏

    iOS開發之山寨版新浪微博小結

    之前的博客IOS開發之新浪圍脖中獲取微博的內容是使用我自己的access_token來請求的數據,那么如何讓其他用戶也能登陸并獲取自己的微博內容呢?接下來就是OAuth和SSO出場的時候啦。OAuth的全稱為Open Authorization 開發授權,SSO--單點登陸(Single Sign On)。至于其原理是什么,更具體的介紹網上的資料是一抓一大把,在這就不做過多的原理性的概述。當然啦,OAuth和SSO在Web和其他手機終端上應用還是蠻多的,所有這方面的資料也是多的很。
      簡單的說就是可以通過新浪的OAuth把之前access_token換成用戶自己的access_token,從而請求自己微博的內容(因為之前做的的關于新浪微博的東西,所以用到是新浪提供的OAuth)。更詳細的內容請參考新浪對OAuth2.0授權認證,iOS版SDK的GitHub下載后,其中有詳細的使用說明并附有使用Demo.所以sdk的使用在這就不做過多的贅述。可能有的小伙伴會問哪本篇博客要介紹什么東西呢?本篇博客就是被之前的新浪微博加上OAuth授權認證,給之前的博客做一個善后工作
      1.還是在博客的開頭先來幾張截圖(第一張是沒有登錄時的啟動圖,第二張是獲取授權的頁面,第三張是授權后的頁面,第四張是把之前寫的iOS開發之自定義表情鍵盤(組件封裝與自動布局)整合了進來)這樣的話一個App的基本功能算是有啦。
      2.在今天的博客中沒有大量的代碼,只是對之前博客中的內容的一個應用,如何用新浪的OAuth的SDK,新浪給提供的開發文檔中說明的很詳細了,筆者也是按上面一步步做的,沒有太大問題。上面給出了SDK的下載地址,有興趣小伙伴可以下載一個研究研究。
      3.在用戶授權以后,新浪接口或返回一些用戶的信息,其中就有該授權用戶所對應的access_token, 下面是響應代碼,把返回的用戶access_token存入到了NSUserDefaults中,關于NSUserDefault的具體內容請參考之前的博客IOS開發之記錄用戶登陸狀態,在這就不做贅述了。
    1 - (void)didReceiveWeiboResponse:(WBBaseResponse *)response
    2 {
    3     if ([response isKindOfClass:WBSendMessageToWeiboResponse.class])
    4     {
    5         NSString *title = @"發送結果";
    6         NSString *message = [NSString stringWithFormat:@"響應狀態: %d\n響應UserInfo數據: %@\n原請求UserInfo數據: %@",
    7                              response.statusCode, response.userInfo, response.requestUserInfo];
    8        NSLog(@"%@", message);
    9     }
    10     else if ([response isKindOfClass:WBAuthorizeResponse.class])
    11     {
    12
    13         self.wbtoken = [(WBAuthorizeResponse *)response accessToken];
    14
    15         if (self.wbtoken != nil) {
    16             //獲取userDefault單例
    17             NSUserDefaults *token = [NSUserDefaults standardUserDefaults];
    18             [token setObject:self.wbtoken forKey:@"token"];
    19         }
    20     }
    21 }
      4.添加我們的自定義鍵盤也挺簡單的,因為之前是用純代碼封裝的自定義鍵盤并留有響應的接口,所有移植到我們的新浪微博上就是一個拷貝粘貼的體力活,關于自定義鍵盤的東西請參考之前的博客iOS開發之自定義表情鍵盤(組件封裝與自動布局),在這就不做贅述。

    posted @ 2014-12-03 13:30 順其自然EVO 閱讀(224) | 評論 (0)編輯 收藏

    Linux操作系統如何識別hba卡的wwn號

    在連接存儲的時候,通常存儲管理員要求我們提供一下wwn號,這樣便于與存儲管理器上識別的wwn號對應起來,也就是查看一下hba的id號,現在把linux的查看方法與大家分享一下
      一、RedHat Linux AS4
    # grep scsi /proc/scsi/qla2xxx/3
    Number of reqs in pending_q= 0, retry_q= 0, done_q= 0, scsi_retry_q= 0
    scsi-qla0-adapter-node=20000018822d7834;
    scsi-qla0-adapter-port=21000018822d7834;
    scsi-qla0-target-0=202900a0b8423858;
    scsi-qla0-port-0=200800a0b8423858:202900a0b8423858:0000e8:1;
      二、RedHat Linux AS5/AS6
      redhat5及redat6的方法是一樣的
    [root@mytest host3]# pwd
    /sys/class/fc_host/host3
    [root@mytest host3]# cat port_name
    0x10000090fa74258b
      包括centos、oel與redhat的方法是相同的
      三、SuSE Linux 9
      查看 /proc/scsi/qla2xxx/*  ,并以 adapter-port 為關鍵字過濾即可查看FC HBA卡的WWN信息:
      # cat /proc/scsi/qla2xxx/* | grep adapter-port
      scsi-qla0-adapter-port=21000018822c8a2c;
      scsi-qla1-adapter-port=21000018822c8a2d;
      四、、SuSE Linux 10
      查看 /sys/class/fc_host/host*/port_name 文件的內容即可看到對應FC HBA卡的WWN信息:
      mytest:/sys/class/fc_host/host3 # pwd
      /sys/class/fc_host/host3
      mytest:/sys/class/fc_host/host3 # cat port_name
      0x21000024ff356b02

    posted @ 2014-11-28 10:45 順其自然EVO 閱讀(606) | 評論 (0)編輯 收藏

    使用調用者權限實現Schema導向操作

    很多時候,我們都會使用存儲過程Procedure來實現一些腳本工具。通過Procedure來實現一些數據庫相關的維護、開發工作,可以大大提高我們日常工作效率。一個朋友最近咨詢了關于Procedure調用的問題,覺得比較有意思,記錄下來供需要的朋友不時之需。
      1、問題描述
      問題背景是這樣,朋友在運維一個開發項目,同一個數據庫中多個Schema內容相同,用于不同的測試目的。一些開發同步任務促使編寫一個程序來實現Schema內部或者之間對象操作。從軟件版本角度看,維護一份工具腳本是最好的方法,可以避免由于修改造成的版本錯亂現象。如何實現一份存儲過程腳本,在不同Schema下執行效果不同就成為問題。
      將問題簡化為如下描述:在Schema A里面包括一個存儲過程Proc,A中還有一個數據表T1。在Proc代碼中,包括了對T1的操作內容。而Schema B中也存在一個數據表T1,并且B擁有一個名為Proc的私有同義詞synonym指向A.Proc。問題是如何讓Proc根據執行的Schema主體不同,訪問不同Schema的數據表。
      也就是說,如果是A調用Proc程序包,操作的就是A Schema里面的數據表T1。如果B調用Proc程序包,就操作B Schema里面的數據表T1。
      2、測試實驗一
      為了驗證測試,我們模擬了實驗環境,來觀察現象。選擇11gR2進行測試。
    SQL> select * from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    PL/SQL Release 11.2.0.4.0 - Production
    CORE      11.2.0.4.0     Production
    TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
    NLSRTL Version 11.2.0.4.0 – Production
    創建對應Schema和數據表。
    SQL> create user a identified by a;
    User created
    SQL> create user b identified by b;
    User created
    SQL> grant connect, resource to a,b;
    Grant succeeded
    SQL> grant create procedure to a,b;
    Grant succeeded
    SQL> grant create synonym to a,b;
    Grant succeeded
      在Schema A下面創建數據表和對應操作存儲過程。
    SQL> conn a/a@sicsdb
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
    Connected as a
    SQL> create table a(col varchar2(10));
    Table created
    SQL> create or replace procedure Proc(i_vc_name varchar2) is
    2  begin
    3    insert into a values (i_vc_name);
    4    commit;
    5  end Proc;
    6  /
    Procedure created
    從Schema A進行調用動作:
    SQL> exec proc('iii');
    PL/SQL procedure successfully completed
    SQL> select * from a;
    COL
    ----------------------------------------
    Iii
    SQL> grant execute on proc to b;
    Grant succeeded
      另外創建Schema B數據表對象,并且包括同義詞對象。
      SQL> conn b/b@sicsdb
      Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
      Connected as b
      SQL> create table a(col varchar2(10));
      Table created
      SQL> create synonym proc for a.proc;
      Synonym created
      進行默認情況測試,在Schema B中調用存儲過程proc,看操作數據表是哪張:
    SQL> conn b/b@sicsdb
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
    Connected as b
    SQL> exec proc('JJJ');
    PL/SQL procedure successfully completed
    SQL> select * from a;
    COL
    ----------------------------------------
      Schema B中數據表a沒有數據,查看Schema A中數據表情況:
      SQL> select * from a.a;
      COL
      --------------------
      JJJ
      Iii
      實驗說明:在默認情況下,不同Schema對象調用相同存儲過程,其中涉及到的對象都是相同的。也就是Oracle存儲過程中的“所有者權限”。一旦用戶擁有執行存儲過程的權限,就意味著在執行體中,使用的是執行體所有者的權限體系。
      那么這個問題似乎是沒有辦法。執行體指向的是Schema A的數據表a。
      3、測試實驗二
      與所有者權限對應的另一種模式是“調用者權限”。也就說,對用戶是否可以執行該程序體中的對象,完全取決于執行調用用戶系統權限和對象權限(注意:非角色權限)。
      筆者一種猜想,如果應用調用者權限,從執行用戶權限角度看,是不是可以直接訪問自己Schema中的對象了。下面通過實驗進行證明。
    SQL> conn a/a@sicsdb
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
    Connected as a
    SQL>
    SQL> create or replace procedure Proc(i_vc_name varchar2) AUTHID CURRENT_USER is
    2  begin
    3    insert into a values (i_vc_name);
    4    commit;
    5  end Proc;
    6  /
    Procedure created
    很多時候,我們都會使用存儲過程Procedure來實現一些腳本工具。通過Procedure來實現一些數據庫相關的維護、開發工作,可以大大提高我們日常工作效率。一個朋友最近咨詢了關于Procedure調用的問題,覺得比較有意思,記錄下來供需要的朋友不時之需。
      1、問題描述
      問題背景是這樣,朋友在運維一個開發項目,同一個數據庫中多個Schema內容相同,用于不同的測試目的。一些開發同步任務促使編寫一個程序來實現Schema內部或者之間對象操作。從軟件版本角度看,維護一份工具腳本是最好的方法,可以避免由于修改造成的版本錯亂現象。如何實現一份存儲過程腳本,在不同Schema下執行效果不同就成為問題。
      將問題簡化為如下描述:在Schema A里面包括一個存儲過程Proc,A中還有一個數據表T1。在Proc代碼中,包括了對T1的操作內容。而Schema B中也存在一個數據表T1,并且B擁有一個名為Proc的私有同義詞synonym指向A.Proc。問題是如何讓Proc根據執行的Schema主體不同,訪問不同Schema的數據表。
      也就是說,如果是A調用Proc程序包,操作的就是A Schema里面的數據表T1。如果B調用Proc程序包,就操作B Schema里面的數據表T1。
      2、測試實驗一
      為了驗證測試,我們模擬了實驗環境,來觀察現象。選擇11gR2進行測試。
    SQL> select * from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    PL/SQL Release 11.2.0.4.0 - Production
    CORE      11.2.0.4.0     Production
    TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
    NLSRTL Version 11.2.0.4.0 – Production
    創建對應Schema和數據表。
    SQL> create user a identified by a;
    User created
    SQL> create user b identified by b;
    User created
    SQL> grant connect, resource to a,b;
    Grant succeeded
    SQL> grant create procedure to a,b;
    Grant succeeded
    SQL> grant create synonym to a,b;
    Grant succeeded
      在Schema A下面創建數據表和對應操作存儲過程。
    SQL> conn a/a@sicsdb
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
    Connected as a
    SQL> create table a(col varchar2(10));
    Table created
    SQL> create or replace procedure Proc(i_vc_name varchar2) is
    2  begin
    3    insert into a values (i_vc_name);
    4    commit;
    5  end Proc;
    6  /
    Procedure created

    posted @ 2014-11-28 10:44 順其自然EVO 閱讀(493) | 評論 (0)編輯 收藏

    Java泛型與類型擦除

    “編譯器會進行泛型擦除”是一個常識了(好吧,實際擦除的是參數和自變量的類型)。這個過程由“類型擦除”實現。但是并非像許多開發者認為的那樣,在 <..> 符號內的東西都被擦除了。看下面這段代碼:
    public class ClassTest {
    public static void main(String[] args) throws Exception {
    ParameterizedType type = (ParameterizedType)
    Bar.class.getGenericSuperclass();
    System.out.println(type.getActualTypeArguments()[0]);
    ParameterizedType fieldType = (ParameterizedType)
    Foo.class.getField("children").getGenericType();
    System.out.println(fieldType.getActualTypeArguments()[0]);
    ParameterizedType paramType = (ParameterizedType)
    Foo.class.getMethod("foo", List.class)
    .getGenericParameterTypes()[0];
    System.out.println(paramType.getActualTypeArguments()[0]);
    System.out.println(Foo.class.getTypeParameters()[0]
    .getBounds()[0]);
    }
    class Foo<E extends CharSequence> {
    public List<Bar> children = new ArrayList<Bar>();
    public List<StringBuilder> foo(List<String> foo) {return null; }
    public void bar(List<? extends String> param) {}
    }
    class Bar extends Foo<String> {}
    }
      你知道輸出了什么嗎?
      class java.lang.String
      class ClassTest$Bar
      class java.lang.String
      class java.lang.StringBuilder
      interface java.lang.CharSequence
      你會發現每一個類型參數都被保留了,而且在運行期可以通過反射機制獲取到。那么到底什么是“類型擦除”?至少某些東西被擦除了吧?是的。事實上,除了結構化信息外的所有東西都被擦除了 —— 這里結構化信息是指與類結構相關的信息,而不是與程序執行流程有關的。換言之,與類及其字段和方法的類型參數相關的元數據都會被保留下來,可以通過反射獲取到。

    posted @ 2014-11-28 10:31 順其自然EVO 閱讀(254) | 評論 (0)編輯 收藏

    幾個前端Bug的解決方案

    jQueryUI下被拖動的元素上飄
      癥狀出現在幾乎所有瀏覽器里。使用1.10.x的draggable,在滾動欄下移(即非處于頁面頂部)的時候拖動draggable的元素,它會向上跳一段距離。解決辦法是將jQueryUI1.10.x的_convertPositionTo()和_generatePosition()換為1.9.2的或者設置父元素的position為absolute以外的值。(應該是父元素為absolute時計算offset又逗比了……)
      參考:JqueryUI1.10.xDialogdragissueonlargebodyheight
      追記:閑著自己實現了一個可拖拽效果,放在了Gist里,jQueryUI的這個bug應該是在計算拖拽時位置的時候用了clientX和clientY而不是pageX和pageY,導致計算出來的offset過小引起的
      IE里文本框點擊后光標向上飄
      如果想要居中,兼容IE的話一般是height和line-height設為同一個值。此時需要保證:
      input使用content-box
      height和line-height都要設,不能只設line-height
      應該是IE在border-box下計算linebox大小的時候有延遲所以出現了向上飄……其他瀏覽器沒有這個現象。
      引起這個bug是因為項目的css拿了bootstrap3做base,而bootstrap3給所有元素都設了box-sizing:border-box。
      參考:WhydidBootstrap3switchtobox-sizing:border-box?
      追記:IE9里使用搜狗輸入法時按空格文字會下沉……找來找去發現是瀏覽器+輸入法交互產生的問題也是醉了,前端根本不可控囧解決方法只有:提醒用戶要么換掉IE9,要么換輸入法hhhh
      無法用checked選中radiobutton
      檢查有沒有套上form。在某些瀏覽器下似乎沒有套上from的input添加checked是沒有樣式的=。=
      chrome下p里套div造成解析錯誤
      后端的人傳來的HTML我一看也是醉了……參考MDN的文檔,<p>的合法內容為phrasingcontent,其中不包括div
      <p>
      <div></div>
      </p>
      在chrome里解析完之后就成了
      <p></p>
      <div></div>
      <p></p>

    posted @ 2014-11-28 10:23 順其自然EVO 閱讀(753) | 評論 (0)編輯 收藏

    Testng.xml文件結構組成及節點屬性說明

    testng.xml文件結構:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="suitename" junit="false" verbose="3" parallel="false" thread-count="5" configfailurepolicy="<span style="font-family:Arial;"><span style="font-size: 14px; line-height: 26px;">skip</span></span>" annotations="javadoc" time-out="10000" skipfailedinvocationcounts="true" data-provider-thread-count="5" object-factory="classname" allow-return-values="true">  <!-- name參數為必須 -->
    <suite-files>
    <suite-file path="/path/to/suitefile1"></suite-file>  <!-- path參數為必須 -->
    <suite-file path="/path/to/suitefile2"></suite-file>
    </suite-files>
    <parameter name="par1" value="value1"></parameter>  <!-- name, value參數為必須 -->
    <parameter name="par2" value="value2"></parameter>
    <method-selectors>
    <method-selector>
    <selector-class name="classname" priority="1"></selector-class> <!-- name參數為必須 -->
    <script language="java"></script>  <!-- language參數為必須 -->
    </method-selector>
    </method-selectors>
    <test name="testename" junit="false" verbose="3" parallel="false" thread-count="5" annotations="javadoc" time-out="10000" enabled="true" skipfailedinvocationcounts="true" preserve-order="true" allow-return-values="true"> <!-- name參數為必須 -->
    <parameter name="par1" value="value1"></parameter>  <!-- name, value參數為必須 -->
    <parameter name="par2" value="value2"></parameter>
    <groups>
    <define name="xxx"> <!-- name參數為必須 -->
    <include name="" description="" invocation-numbers="" />  <!-- name參數為必須 -->
    <include name="" description="" invocation-numbers="" />
    </define>
    <run>
    <include name="" />  <!-- name參數為必須 -->
    <exclude name="" />  <!-- name參數為必須 -->
    </run>
    <dependencies>
    <group name="" depends-on=""></group> <!-- name,depends-on均為參數為必須 -->
    <group name="" depends-on=""></group>
    </dependencies>
    </groups>
    <classes>
    <class name="classname"> <!-- name參數為必須 -->
    <methods>
    <parameter name="par3" value="value3"></parameter>
    <include name="" description="" invocation-numbers=""></include>
    <exclude name=""></exclude>
    </methods>
    <methods></methods>
    </class>
    </classes>
    <packages>
    <package name="" />  <!-- name參數為必須 -->
    <package name="">
    <include name="" description="" invocation-numbers=""></include>
    <exclude name=""></exclude>
    </package>
    </packages>
    <listeners>
    <listener class-name="classname1" />  <!-- name參數為必須 -->
    <listener class-name="classname2" />
    </listeners>
    </test>
    <test></test>
    </suite>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="suitename" junit="false" verbose="3" parallel="false" thread-count="5" configfailurepolicy="<span style="font-family:Arial;"><span style="font-size: 14px; line-height: 26px;">skip</span></span>" annotations="javadoc" time-out="10000" skipfailedinvocationcounts="true" data-provider-thread-count="5" object-factory="classname" allow-return-values="true">  <!-- name參數為必須 -->
    <suite-files>
    <suite-file path="/path/to/suitefile1"></suite-file>  <!-- path參數為必須 -->
    <suite-file path="/path/to/suitefile2"></suite-file>
    </suite-files>
    <parameter name="par1" value="value1"></parameter>  <!-- name, value參數為必須 -->
    <parameter name="par2" value="value2"></parameter>
    <method-selectors>
    <method-selector>
    <selector-class name="classname" priority="1"></selector-class> <!-- name參數為必須 -->
    <script language="java"></script>  <!-- language參數為必須 -->
    </method-selector>
    </method-selectors>
    <test name="testename" junit="false" verbose="3" parallel="false" thread-count="5" annotations="javadoc" time-out="10000" enabled="true" skipfailedinvocationcounts="true" preserve-order="true" allow-return-values="true"> <!-- name參數為必須 -->
    <parameter name="par1" value="value1"></parameter>  <!-- name, value參數為必須 -->
    <parameter name="par2" value="value2"></parameter>
    <groups>
    <define name="xxx"> <!-- name參數為必須 -->
    <include name="" description="" invocation-numbers="" />  <!-- name參數為必須 -->
    <include name="" description="" invocation-numbers="" />
    </define>
    <run>
    <include name="" />  <!-- name參數為必須 -->
    <exclude name="" />  <!-- name參數為必須 -->
    </run>
    <dependencies>
    <group name="" depends-on=""></group> <!-- name,depends-on均為參數為必須 -->
    <group name="" depends-on=""></group>
    </dependencies>
    </groups>
    <classes>
    <class name="classname"> <!-- name參數為必須 -->
    <methods>
    <parameter name="par3" value="value3"></parameter>
    <include name="" description="" invocation-numbers=""></include>
    <exclude name=""></exclude>
    </methods>
    <methods></methods>
    </class>
    </classes>
    <packages>
    <package name="" />  <!-- name參數為必須 -->
    <package name="">
    <include name="" description="" invocation-numbers=""></include>
    <exclude name=""></exclude>
    </package>
    </packages>
    <listeners>
    <listener class-name="classname1" />  <!-- name參數為必須 -->
    <listener class-name="classname2" />
    </listeners>
    </test>
    <test></test>
    </suite>
    testng.xml文件節點屬性說明:
      suite屬性說明:
      @name: suite的名稱,必須參數
      @junit:是否以Junit模式運行,可選值(true | false),默認"false"
      @verbose:命令行信息打印等級,不會影響測試報告輸出內容;可選值(1|2|3|4|5)
      @parallel:是否多線程并發運行測試;可選值(false | methods | tests | classes | instances),默認 "false"
      @thread-count:當為并發執行時的線程池數量,默認為"5"
      @configfailurepolicy:一旦Before/After Class/Methods這些方法失敗后,是繼續執行測試還是跳過測試;可選值 (skip | continue),默認"skip"
      @annotations:獲取注解的位置,如果為"javadoc", 則使用javadoc注解,否則使用jdk注解
      @time-out:為具體執行單元設定一個超時時間,具體參照parallel的執行單元設置;單位為毫秒
      @skipfailedinvocationcounts:是否跳過失敗的調用,可選值(true | false),默認"false"
      @data-provider-thread-count:并發執行時data-provider的線程池數量,默認為"10"
      @object-factory:一個實現IObjectFactory接口的類,用來實例測試對象
      @allow-return-values:是否允許返回函數值,可選值(true | false),默認"false"
      @preserve-order:順序執行開關,可選值(true | false) "true"
      @group-by-instances:是否按實例分組,可選值(true | false) "false"
      test屬性說明:
      @name:test的名字,必選參數;測試報告中會有體現
      @junit:是否以Junit模式運行,可選值(true | false),默認"false"
      @verbose:命令行信息打印等級,不會影響測試報告輸出內容;可選值(1|2|3|4|5)
      @parallel:是否多線程并發運行測試;可選值(false | methods | tests | classes | instances),默認 "false"
      @thread-count:當為并發執行時的線程池數量,默認為"5"
      @annotations:獲取注解的位置,如果為"javadoc", 則使用javadoc注解,否則使用jdk5注解
      @time-out:為具體執行單元設定一個超時時間,具體參照parallel的執行單元設置;單位為毫秒
      @enabled:設置當前test是否生效,可選值(true | false),默認"true"
      @skipfailedinvocationcounts:是否跳過失敗的調用,可選值(true | false),默認"false"
      @preserve-order:順序執行開關,可選值(true | false) "true"
      @group-by-instances:是否按實例分組,可選值(true | false) "false"
      @allow-return-values:是否允許返回函數值,可選值(true | false),默認"false"

    posted @ 2014-11-28 10:22 順其自然EVO 閱讀(433) | 評論 (0)編輯 收藏

    如何讓Loadrunner運行日志的警告顯示紅色

    先看一段腳本
    Action()
    {
    web_reg_save_param("userSessionID2",
    "LB=userSession value=",
    "RB=>",
    "Search=Body",
    LAST);
    web_url("WebTours",
    "URL=http://127.0.0.1:1080/WebTours/",
    "TargetFrame=",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t1.inf",
    "Mode=HTML",
    LAST);
    lr_think_time(13);
    web_submit_data("login.pl",
    "Action=http://127.0.0.1:1080/WebTours/login.pl",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
    "Snapshot=t4.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=userSession", "Value={userSessionID}", ENDITEM,
    "Name=username", "Value=test2", ENDITEM,
    "Name=password", "Value=test2", ENDITEM,
    "Name=JSFormSubmit", "Value=on", ENDITEM,
    "Name=login.x", "Value=63", ENDITEM,
    "Name=login.y", "Value=9", ENDITEM,
    LAST);
    web_url("SignOff Button",
    "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1",
    "TargetFrame=body",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
    "Snapshot=t5.inf",
    "Mode=HTML",
    LAST);
    return 0;
    }
      可以看到,腳本中在引用關聯函數的時候,名稱和實際的關聯函數名稱是不一致的。
      再看下運行結果
      從Warning信息中可以看出,也提示了userSessionID也不是一個有效的關聯值,所以實際上并未關聯成功,但Warning信息的文字顏色為黑色,所以在查看日志信息的時候,不能很快了解實際的運行狀態,有沒有什么方法可以將Warning的顏色也顯示為紅色或者藍色?

    posted @ 2014-11-28 10:19 順其自然EVO 閱讀(1290) | 評論 (0)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产免费人成视频在线观看| 亚洲国产中文v高清在线观看| 亚洲色少妇熟女11p| 波多野结衣免费视频观看| 久久er国产精品免费观看8| 91情国产l精品国产亚洲区| 女人18毛片免费观看| 一级一级毛片免费播放| 亚洲最新视频在线观看| 国产国产人免费视频成69大陆| 亚洲天堂免费在线视频| 亚洲成AV人片久久| 亚洲国产精品一区二区九九 | 蜜桃传媒一区二区亚洲AV| 亚洲色爱图小说专区| 好男人视频社区精品免费| 日本一道本不卡免费 | 麻豆高清免费国产一区| 真人无码作爱免费视频| 亚洲综合综合在线| 国产亚洲精品看片在线观看| 性感美女视频免费网站午夜| 国产好大好硬好爽免费不卡| 另类图片亚洲校园小说区| 亚洲国产韩国一区二区| 亚洲人成网77777色在线播放| 午夜小视频免费观看| 99爱在线精品视频免费观看9| 一级做a爰片久久毛片免费陪| 亚洲人成电影院在线观看| 亚洲人成网77777色在线播放| 国产又黄又爽又猛的免费视频播放 | 五月天婷亚洲天综合网精品偷| 亚洲国产精品免费观看| 免费av片在线观看网站| 日韩在线观看免费完整版视频| 亚洲中文无码卡通动漫野外| 亚洲国产精品乱码在线观看97| 亚洲国产精品久久久天堂| 亚洲日本中文字幕一区二区三区 | 久久99亚洲综合精品首页|