Monday, August 23, 2010

openSUSE初體驗^^

給未來的裕翔

現在這篇是在openSUSE裡面打的^^

先講一下和Fedora的差異

第一次用KDE, 介面還蠻漂亮的, 不過不是很習慣

首先, 為了上網, 想去/etc/sysconfig/network-scripts/裡面修改ifcfg-eth0

結果這裡就不一樣了

位置是在/etc/sysconfig/network/ifcfg-eth0

裡面的參數也多許多

突然多了BROADCAST和NETWORK要輸入

因為我是C級網段, 所以IP直接最後一個數字分別改成255和0即可

而ROUTEER和DNS要另外在別的檔案設定

也許是因為openSUSE沒有NetworkManager吧

新增一個/etc/sysconfig/network/routes
default   140.114.28.254   0.0.0.0   eth0

然後DNS直接加到/etc/resolv.conf裡面

修改這三個檔案後, 重新啟動網路, 沒有service這個指令讓我用!!!

這樣講不對, 雖然which找不到, 但這只能表示它不在我的PATH裡面

(對於找不到的指令可以, ex: cnf service, 這樣就會告訴我指令位置)

找不到的會跟我說該怎麼裝

結果裝法居不是yum!!!   而是一個叫zypper的指令......

知道service位置後(也是可以/etc/init.d/service啦   不過字數稍嫌多)

sudo /sbin/network restart

此時又一件神奇事, 是要輸入root密碼耶! 不是使用者自己的!!!

假設我瞬間習慣, 網路到此應該就是通了~

接著是中文問題, 查google後

openSUSE -> Computer -> YaST -> System -> Language

在Secondary Languages裡面選Traditional Chinese

這樣就會裝東西裝一陣子

登出登入後, Ctrl + Space就可以叫出輸入法了

是SCIM喔, 不是iBus, 雖然我不知道差在哪

但都有新酷音可以選就是了

Saturday, August 21, 2010

vim累加數字

給未來的裕翔

在vim裡面按Esc後

游標移到某個數字上按Ctrl + a

會累加一耶!

Thursday, August 19, 2010

vi跟多重視窗相關的操作

給未來的裕翔

Ctrl + w + n: 開一個新的水平視窗

Ctrl + w + q: 關掉所在的視窗

這比:wq快, 不過以ZZ離開文件依舊比較順手^^

vi的大小寫互換

給未來的裕翔

~在vi裡是大小寫互換

Wednesday, August 18, 2010

find找檔案後搭配grep找內容

給未來的裕翔

如果現在我想要知道某個目錄以下(含子目錄)

的所有包含字串aaa的檔案

find target-dir -f file -exec grep -Hn aaa {} \;

-H是把檔名列出來

-n是把行數列出來

這樣就可以知道aaa在哪個檔案的哪個行數

解tar到其他地方去

給未來的裕翔

如果現在要解tar

但不想解到CWD

可以指明目的目錄

tar -xf file.tar -C target-dir

執行android程式前詢問device選擇

給未來的裕翔

如果我在Eclipse左側對專案按右鍵

選Run As -> Android Application

它似乎會以我剛練習建立的模擬器來跑

如果要設定成會詢問我的話

在專案按右鍵 ->  Run As -> Run Configurations -> Target -> Manual

如何讓linux的eclipse抓到android手機

給未來的裕翔

原來根本不需要裝驅動阿~

以root身份新增一個檔案

/etc/udev/rules.d/51-android.rules

內容為

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"



SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"

是很確定要用哪個, 或是兩個都行

那個0bb4要換成廠商代號

範例裡0bb4剛好就是HTC, 所以不需要換

參考網頁:

http://developer.android.com/guide/developing/device.html

Auto Draft

Monday, August 16, 2010

java的adapter

給未來的裕翔

java的interface就是先定義一堆function

之後extend它的話

必須先把所有的abstract method都實作出來才能實體化

而adapter就是比較方便的interface

也有一堆先定義好的method

不過只需要實作我要的method即可

問題是, 那interface為何要存在?

直接都用adapter不就好了?

說得也是^^

雖然我現在還不知道

不過我猜, adapter只是先實作interface而已?

就是一堆empty method, 而之後要用哪個method

再繼承adapter實作我要的method

未來的裕翔, 是這樣嗎^^?

把手機調成USB debugging

給未來的裕翔

買了一隻HTC wildfire練習android

由於我的分類幾乎都是套件名稱

所以像是手機的設定, 實在不知如何歸類

由於會使用eclipse開發

暫定所有手機相關操作筆記都歸類到"eclipse-platform"

menu -> Settings -> Applications -> Development -> USB debugging

把它check即可

Saturday, August 14, 2010

kvm-intel.ko無法載入?

給未來的裕翔

剛開啟virt-manager

突然發現一個錯誤訊息

說kvm有些module無法載入

赫然察覺, 原來我之前都自動濾掉這個警告訊息了!

不知道之前的慢速跟失敗跟這有沒關係

以下紀錄如何去BIOS開啟virtualization

哪一家BIOS我忘記看了, 也懶的重開......

Security -> System Security

把Virtualization Technology (VTx)

和Virtualization Technology Directed I/O (VTd)

改成Enanble

那我怎麼知道是這兩個?

不, 我不知道^^

Friday, August 13, 2010

postfix架MTA要設定bool

給未來的裕翔

如果使用postfix架設MTA的話

要把allow_postfix_local_write_mail_spool設為1

不然會造成/var/mail/user.lock

然後就收不到信了

報告完畢

寄信給別人, 自己tcp_wrapper也要開!

給未來的裕翔

如果要寄信給別人

自己用預設sendmail當MTA的話

在tcp_wrapper要記得開

原來要開阿!

Thursday, August 12, 2010

安裝作業系統時選"取代現有linux作業系統"

給未來的裕翔

實在是有夠他x的

重灌前我記得有一堆logical volume的

結果重灌後, 只剩root, home, swap

而且size還不對, 好像把當初沒用掉的硬碟空間都用盡去了

他x的

跟我想像的完全不一樣!

還好是練習機

但還是很他x的

MBR的bootloader被洗掉怎辦?

給未來的裕翔

先作以下步驟

dd if=/dev/zero of=/dev/sda bs=256 count=1

好, MBR的前一半被洗掉了^^

注意, 那個256應該是可以換掉, 但別把partition table也蓋掉了

(複習, MBR是硬碟的第一個sector, 含512 bytes)

(boot loader的first stage佔446 bytes)

(partition table佔64 bytes)

重開機後, 會發現一下就出現錯誤訊息了

有史以來最快錯誤訊息~

使用DVD光碟進入rescue mode後

chroot /mnt/sysimage

grub-install /dev/sda

重開機就搞定啦^^

想備份partition table的話

sfdisk -d /dev/sda > backup-file

不過日後怎麼使用我不知道耶

想備份整個MBR的話

dd if=/dev/sda of=mbr-backup bs=512 count=1

同樣的, 日後怎麼使用我不知道耶^^

mount壞掉導致無法正常開機

給未來的裕翔

如果/bin/mount壞掉了

你就完了!

不過放心, 有我在^^

拿出DVD安裝光碟, 進入rescue mode

CD的沒有這功能喔~

憑小小的大腦勾選幾個選項後進入shell

書上說重裝rpm, 不過我不知道怎麼從光碟抽出來耶

也不像教室環境那樣有人架好NFS讓我使用rpm

就在我稍稍緊張之時!

我想到從當下的mount取代我原來壞掉的mount^^ !!!

要注意的是, rescue mode的mount不在/bin裡面

用which mount查看後, 在/usr/bin/裡

cp /usr/bin/mount /mnt/sysimage/bin

然後重開機就可以^^

Wednesday, August 11, 2010

觀察某台機器對我機器的連線

給未來的裕翔

/proc/net/nf_conntrack裡面紀錄一些連線的資訊

似乎是隨時更新, 不確定是不是一直append

如果我要觀察140.114.28.18x對我的連線

每一秒更新最新狀態

watch -n1 'grep 140.114.28.18x /proc/net/nf_conntrack'

dovecot的mail_location?

給未來的裕翔

dovecot架好後, 開放imaps和pop3s

然後在iptables開啟相對應的port之後(可查/etc/services)

selinux不需要設定

tcp_wrapper不需要設定

本來可以連成功的, 一般使用者

可是! 不知怎搞的

吃個飯回來就連不到了

錯誤訊息如下

mail_location not set and autodetection failed: Mail storage autodetection failed with ......

去查一下後

把/etc/dovecot.conf裡面新增一行

mail_location = mbox:~/mail:INBOX=/var/mail/%u

不用擔心記不起來, 因為這是dovecot.conf裡面的example

直接用即可

這樣就可以了^^

另外, 如果要自製憑證

make -C /etc/pki/tls/certs

填完資料後, 憑證會產生在/etc/pki/tls/certs

權限是只有root可以讀

不過書上說沒關係(有講理由但我不懂)

接著修改dovecot.conf如, 搞定~
ssl_cert_file = /etc/pki/tls/certs/dovecot.pem

ssl_key_file = /etc/pki/tls/certs/dovecot.pem

96 ssl_cert_file = /etc/pki/tls/certs/dovecot.pem  97 ssl_key_file = /etc/pki/tls/certs/dovecot.pem

最近架samba筆記

給未來的裕翔

如果要架一個分享給大家的資料夾

但只開放某個group去新增或是移除檔案

/etc/hosts.allow不需要修改

iptables開啟, 137, 138, 139, 445

把要分享出去的資料夾context設為public_content_rw_t

並且把allow_smbd_anon_write設為1

然後特別注意smb.conf裡面的

read only = yes

write list = @allow-group

這樣設定就是大家都只能讀, 除了某個被我允許的group可以增減檔案

還有create mask = 0664

這設定是在預設產生檔案的mask, 跟umask不一樣喔

直接標明檔案產生的權限

那至於使用者可否讀寫檔案, 就直接跟檔案權限有關系

((

光這樣設定, 在client端使用smbclient -U lulumi //smb-server/shared-dir

會出現錯誤訊息

tree connect failed: NT_STATUS_BAD_NETWORK_NAME

把selinux關掉後就正常, 那就是有個神秘的boolean或是context需要改囉!
sudo setsebool samba_export_all_ro 1

sudo setsebool samba_export_all_rw 1

這兩個任一個都可以解決問題

client端要注意一下

能不能下載檔案, 跟檔案本身權限(r)有關

能不能上傳檔案, 跟資料夾本身權限(w)有關

其他要注意的有~ gid和sticky bit最好開啟

新增使用者samba密碼的話, 用smbpasswd -a user

-a是add

使用者只需要存在server端即可,  client端要登入時要-U指明即可

那些使用者也不需要login shell, 給予/sbin/nologin即可

Tuesday, August 10, 2010

查看一個selinux boolean的存取限制

給未來的裕翔

如果要看一個selinux boolean的功能

man -k selinux | grep your-service-keyword

那如果要看它的存取限制呢

也就是說, 現在, 我想知道

當某個boolean設立之後

某種context的process能對file有何存取能力?

舉例來說, 當allow_smbd_anon_write設成on後

那些具有smbd_t的process, 能對檔案作什麼動作?

sesearch --allow -s smbd_t -c file -b allow_smbd_anon_write

--allow      找allow的rules

-s      source

-c      class

-b      bool





samba_share_t v.s. public_content_rw_t

給未來的裕翔

書上說

如果我要開放一個samba服務

分享的資料夾看是要context改成samba_share_t

或是改成public_content_rw_t並且allow_smbd_anon_write設為on

那怎不乾脆設為samba_share_t就好呢?

因為就只能分享給samba

如果有其他服務可能會存取這個資料夾

那就會是public_content_rw_t會比較適當

附註: 同樣是允許寫入, 架nfs時好像沒有改context和boolean耶

錯誤訊息: clnt_create: RPC: Authentication error

給未來的裕翔

如果當使用showmount -e localhost時看到這訊息

記得在/etc/hosts.allow裡面加rpcbind:ALL

搞定^^

不過加完後變成新的錯誤訊息

clnt_create: RPC: Program not registered

搞不定^^"

後記: 重啟nfs就可以了

不過發生一個小問題, client端可以正常掛載

但是真要編輯掛載過來的檔案, 一開始呈現當掉狀態...

過一會(不到五分鐘), 才看似正常

ftp架設完整筆記

給未來的裕翔

vsftpd架設大概是RHCE裡牽扯到最多雜物的吧

如果現在想要架設一個ftp server

可以讓anonymous上傳檔案到特定資料夾

但不能讓anonymous下載

甚至不讓anonymous看到裡面有什麼

那我要做的設定selinux(context and bool), tcp_wrappers, iptables, permission

先講permision的部份

首先在/var/ftp新增上傳資料夾, ex: upload

然後改變它的mode為730, group為ftp

這樣ftp就可以進入該資料(x)夾並寫入檔案(w)

不過看不到自己上傳啥, 或是別人上傳啥

但好像還是有機會可以瞎猜檔名嘗試下載? 沒真的去試

所以還需要修改檔案上傳後的權限

在iptables方面, 開tcp的port 21

在tcp_wrappers方面, allow vsftpd

Sunday, August 8, 2010

最近架nfs server的筆記

給未來的裕翔

最近重新架了nfs server

發現一件事

hosts.allow不需要設定耶!?

不過iptables還是要tcp的111(rpcbind)和2049(nfs)

selinux似乎也不需要改什麼

然後, nfs的預設就有root squash

後記: 也許是因為我多了service nfslock start

java的mouse event的clicked和released的差別?

給未來的裕翔

距離當初問博班java問題也差不多兩週年了

"把那看懂你就會了"

我得到的不是答案是真理

我遇到的不是貴人是垃圾

回正題

單純按滑鼠後放開, 那叫Clicked

按滑鼠後拖曳再放開, 那叫Released

nfs一直Stale NFS file handle

給未來的裕翔

當我在client端掛載nfs後

在server重新整啟nfs

這時client只要對那nfs掛載點作任何事情

都會產生"Stale NFS file handle"錯誤訊息

這時我在client端可以sudo umount -f /your/nfs/mount/point

Saturday, August 7, 2010

vi裡讀進man的結果

給未來的裕翔

剛看到一個範例

以vi開啟某個檔案

想要讀取man ls的資料

假設我只要含有ls的那幾行

可以在vi底下打

:r !man ls | grep ls

酷耶, 不過讀進一堆^H

不知那是啥

也不知道如何替換掉

以使用者身份登入lftp

給未來的裕翔

lftp是一個連到ftp server的工具

所以server開啟vsftpd即可

不用擅自猜測可能有xinetd控管的lftp

以anonymous身份使用的話

直接lftp ftp-server即可

如果想以popoya身份登入

lftp ftp-server -u popoya

雖然vsftpd.conf預設允許這樣做(local_enable=YES)

但是selinux不允許

必須setsebool -P ftp_home_dir on才行

基於安全, 建議不開放使用者登入

(因為密碼是明碼傳送)

所以vsftpd.conf的local_enable要設為NO

剛設為on的selinux也要記得改為off

提醒: 要成功架ftp server的話

/etc/sysconfig/iptables的tcp要開放21

/etc/ssyconfig/iptables-config的IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

/etc/hosts.allow要vsftpd:ALL

對某台dns server進行norecurse查詢

給未來的裕翔

如果我要查一個zone, ex: aaa.bbb.com

向某台dns server查詢, ex: my.dns.server

dig +nocurse aaa.bbb.com @my.dns.server

那個+nocurse的意思可以想成

不准my.dns.server去問別人

不知道就是不知道^^

不知道就會fail

假設它預設不會知道, 但卻沒fail?

那可能是cache有答案

cache的答案可用rndc flush清除

dns的interactive!!!

給未來的裕翔

赫然發現

之前一直以為是iterative的dns 查詢方式

似乎是interactive阿!!!

測試master DNS server是否允許zone-transfer

給未來的裕翔

雖然我沒要架slave DNS server

以下指令我也沒真的去測試

不過先把看到的記下來

之後有問題就可以直接搜尋筆記了

假設有一台DNS server的ip是111.222.222.111

它負責lulumi.com網域

那我要測試它是否有對我這台機器開放zone transfer

dig -t axfr lulumi.com @111.222.222.111

-t是type

axfr是一個mechanism的名稱, 不是四個參數

或是使用指令host

host -l lulumi.com

dig也可不加那個@111.222.222.111

有加的話應該是問"111.222.222.111有否提供lulumi.com的zone transfer?"

沒加的話應該是問"是否有誰提供lulumi.com的zone transfer?"

host要加@111.222.222.111的話, 我還不確定語法上要怎麼加

沒看到範例

喔喔喔! dig的recurse和trace!!!

給未來的裕翔

雖然之前解釋過recursive和iterative查詢

不過有些觀念還不是很清楚

當我想看查詢的過程, 要加+trace

可是我man dig時, 它說recurse這bit是預設set的

不過當使用+trace的話, recurse的bit就會被disable

嗯嗯! 怎會這樣? 當我想看它遞迴查詢的過程, 居然會disable那個recurse的bit!!!

難道, +trace顯示出來的不是recurse?

想了又想, 以下是我的設想:

我是client, 我有架一台dns server, 然後有設定forwarders

當我平常dig時, 我跟dns server說"幫我查"

於是dns server去跟它的forwarders說"幫我client作recursive查詢"

然後forwarders回傳dns server一個結果, dns server也回傳我一個結果

ok, 很合理

而當我使用+trace時, 它給我查詢的過程

我一樣對dns server說"親愛的 幫我查"

而這時dns server心花怒放^^

對forwarders說"幫我一個小忙, 請問哪邊可以查到這答案"

forwarders回我的dns server一個地址

於是dns server再去那個地址問"幫我一個小忙, 請問哪邊可以查到這答案"

這樣一路問下去, dns server終於幫我搞定我要問的了

對dns server而言, 它的行為是iterative

所以我在想, 當我使用+trace時, recurse的bit被disable

就是因為對我的dns server而言, 他是一個個iterative去查的

所以平常講的recursive和iterative, 都是指dns server和forwarders之間的查詢方式!?

簡單說來, recursive查詢就是我請對方幫我搞定

iterative查詢就是我請對方告訴我一個方向

以上, 個人猜測^^"

ref: http://dns-learning.twnic.net.tw/dns/03opDNS.html

selinux的restorecon根據

給未來的裕翔

當以restorecon對某個檔案或目錄進行恢復context時

它是以根據的

可用semanage fcontext -l來看那些根據, ex:
/var/www/nut-cgi-bin/upsstats\.cgi                 regular file       system_u:object_r:httpd_nutups_cgi_script_exec_t:s0
/var/www/perl(/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0
/var/www/svn(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0

今天如果我把/var/www/html的index.html複製到別的資料夾去, ex: /se-test

如果直接cp, 的context會變成:

unconfined_u:object_r:default_t:s0

如果用cp -a, 它的context會跟原本一樣:

unconfined_u:object_r:httpd_sys_content_t:s0

而那個/se-test是自己隨便建立的, context是

unconfined_u:object_r:default_t:s0

所以, 當我對裡面的檔案進行restorecon

index.html也只會變成unconfined_u:object_r:default_t:s0

不會變成unconfined_u:object_r:httpd_sys_content_t:s0

除了我手動chcon -t httpd_sys_content_t index.html

有辦法讓它(/se-test)預設就是httpd_sys_content_t嗎?

可以呦~^^

新增一個restorecon的根據

semanage fcontext -a -t httpd_sys_content_t '/se-test(/.*)?'

-a是add

-t是type

'/se-test(/.*)?'是什麼呢! 是什麼呢? 有誰知道是什麼嗎?

總之, restorecon的根據建立完成^^

之後對/se-test或裡面檔案進行restorecon就會變成

httpd_sys_content_t

一些關於htaccess的筆記

給未來的裕翔

如果要用htaccess的話

先作兩個動作

在首頁資料夾底下新增.htaccess

裡面有四個設定要記一下
AuthName "xxxxxx"      # xxxxxx隨便打, 記得有雙引號就好
AuthType Basic
AuthUserFile /your/.htpasswd-yyy/location
require valid-user

打岔一下, authName也可以, Require也可以, 大小寫似乎都可以?

接著去設定
        AllowOverride AuthConfig

基本設定這樣就可以了

接下來就是新增帳密問題

帳號不一定要存在http server上, 就算存在密碼也可以隨便設

htpasswd -c /your/.htpasswd-yyy/location amy

htpasswd /your/.htpasswd-yyy/location boby

每建一個使用者就同時設定密碼

只有第一次需要-c, 第二次也-c的話, 第一次設定的就不見了

設定完後不需要重啟httpd

使用瀏覽器測試時, 就可以看到它要求輸入帳密

一旦輸入後, 之後無論在瀏覽器怎樣重新整理都不需要再輸入了

如果新增帳密要測試的話

建議重啟瀏覽器

有點小成就感^^

Friday, August 6, 2010

nautilus的畫面分割

給未來的裕翔

在nautilus裡面

按F3可以變成兩個切割畫面耶^^

亮色背景表示是CWD

再按一次F3, 暗色背景那塊會消失

squid的allow和deny有順序性

給未來的裕翔

在squid server端

如果我在/etc/squid/squid.conf裡面允許140.114.28.0/24使用

卻不准它去瀏覽.yahoo.com的話

應該要這樣寫
acl deny_dst dstdomain .yahoo.com
http_access deny deny_dst
acl allow_group src 140.114.28.0/24
http_access allow allow_group

如果先允許allow_group再拒絕deny_dst

那當我client使用該squid server時

一旦比對到allow_group就放行了

不會再比對下去

所以順序很重要!

另外, 擋成功的話, client會看到網頁左上角有烏賊的圖示

squid要開的防火牆

給未來的裕翔

squid要開的防火牆似乎不只tcp的3128(預設port)

udp的3128也要開

也就是tcp和udp的3128都要開

Thursday, August 5, 2010

vim刪至檔首

給未來的裕翔

dgg

d1G也可以啦, 多一鍵

請問: sudo vim是看誰的.vimrc?

給未來的裕翔

請問~~~(威哥式問法)

當我使用sudo vim filename時

它看的.vimrc是誰的?

root? sudoer?

答: sudoer^^

named.conf的listen-on port 53

給未來的裕翔

這次憑印象建立重建DNS server

失敗~^^

不過就一個DNS server, 每次都能失敗其實也該頒給我獎狀...

好在有筆記^^

我就不信每次都會遇到新問題~

原來是我named.conf裡面的listen-on port 53忘記加DNS server本身的ip

加了以後就可以了

以前對於這點很納悶, 127.0.0.1不就是本身的ip嗎?

現在我在猜

那ip代表interface嗎? 是的話就解釋的通了

127.0.0.1代表lo

而DNS server的真實ip代表eth0

就當是這樣吧^^

筆電使用外接光碟機安裝linux, 不過讀不到?

給未來的裕翔

可以試著換一台外接光碟機^^

Wednesday, August 4, 2010

cp來源和目標同位置的話?

給未來的裕翔

沒想到cp有個小技巧

當我對/etc/sysconfig/iptables作備份時

如果備份成/etc/sysconfig/iptables.bak

我都是cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

不然了不起一點就是先cd /etc/sysconfig

cp iptables iptables.bak

剛發現

其實我可以直接

cp /etc/sysconfig/iptables{,.bak}

這跟touch file{1,2,3}的道理是一樣的

會變成touch file1 file2 file3, 它們數字在指令裡是以逗號隔開

同理/etc/sysconfig/iptables{,.bak}

因為逗號前面沒東西, 所以展開是/etc/sysconfig/iptables

而逗號後面是.bak, 展開變成/etc/sysconfig/iptables.bak

如同touch file1 file2 file3

我的cp指令變成

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

帥!

hosts.allow的spawn

給未來的裕翔

hosts.allow和hosts.deny本來是一道防線

有類似的設定sshd : 140.114.28.

如果在限制連線的同時希望有所動作

ex: 連進來的都紀錄到log

我們可以寫成

sshd : 140.114.28. : spawn $(date) %c %d >> /your/log/location

這樣可以紀錄日期, client, daemon

或是直接藉由logger工具

sshd : 140.114.28. : spawn logger %c %d

因為logger會自動紀錄日期, 所以不再另外標

其他的%, 可man hosts.allow查閱

ftp如果permission denied?

給未來的裕翔

如果哪天使用ftp下載東西時

遇到permission denied的話

也許可以先檢查一下自己的CWD是不是有權限寫入......

這是我用tftp遇到的問題(雖然沒有下成功)

不過還是歸類到vsftpd好了

enable那些被xinetd控管的程式

給未來的裕翔

假設我要修改tftp的disable為no

我必須sudo vim /etc/xinetd.d/tftp

有個更方便的方法

sudo chkconfig tftp on

突然想起鳥哥好像有講過^^"

iptables-save

給未來的裕翔

iptables-save > /etc/sysconfig/iptables和service iptables save

都是把當下的規則存到/etc/sysconfig/iptables

很明顯的, service iptables save比較簡短^^

打個岔

iptables -F的當下馬上生效

因為我馬上無法操作

還有iptables -F清的是RULE

我新增的chain不會被清掉

遠端修改iptables注意事項

給未來的裕翔

遠端修改iptables時

最好不要輕易sudo service iptables restart

我把iptables清空後, INPUT的policy改為DROP

重新啟動後就突然斷線了

是沒有顯示啦, PS1依然顯示我在server

不過操作就不能動了

我在猜, 是因為ssh那條規則被我移除掉了?

還是那個ESTABLISHED,RELATED?

再來就是, 我直接跑去server上操作

結果ssh原來的client和ping外面主機都沒結果

不知道依舊是那ESTABLISHED,RELATED?

還是icmp的規則尚未增加?

先記下來供以後釐清

(沒有以後了!!!)

ps查process的context資訊

給未來的裕翔

除了file有context, 程序也是有的

當被問如和看ntpd的context時

很得意的key出以下指令^^

ps Z `pidof ntpd`

後來發現ps可以直接對process名稱進行處理

ps Z -C ntpd

這兩個印出的資訊會一樣

再來就是, 參考答案給ps -ZC ntpd

由於-Z在ps help裡面是沒有的

因此我偏向使用上面第二個

ps Z -C ntpd

md5sum, sha1sum, gpg

給未來的裕翔

簡介一下md5sum, sha1sum, 和gpg

md5sum和sha1sum是對檔案算hash, 然後驗證用

gpg才是對檔案加密用的

用法:

md5sum file

sha1sum file

如果想要比較兩個檔案的hash, 直接放在一起即可

md5sum file1 file2

sha1sum比照辦理^^

至於加密

gpg -c file

輸入加密密碼後會在current working directory(CWD)產生一個file.gpg

要解密的話

如果直接輸出到螢幕

gpg -d file.gpg

要另存新檔的話

gpg -o file2 -d file.gpg

ssh-agent的功能

給未來的裕翔

關於ssh-agent的功能

其實我不是很清楚......

直接打ssh-agent, 這樣算執行一次

eval $(ssh-agent), 這樣也算執行一次

此時用pidof ssh-agent

可以看到兩個pid

總之, 如果我要用ssh-add先取得我的密碼的話

ssh-agent就要先執行

直接打ssh-agent再ssh-add不行

非得eval $(ssh-agent)才可以

Tuesday, August 3, 2010

cut的deliiter如果是空白?

給未來的裕翔

cut -d' ' -f#

head指定不列出的行數

給未來的裕翔

head是拿來列出檔案開始的幾行的

預設十行

可用head -n 20改成列出20行

如果今天我想, 從頭列出到倒數第三行?

那就是最後兩行不列出

head -n -2

報告完畢

首次嘗試rsync

給未來的裕翔

一直以來都懶的備份

一開始藉口是"等以後學linux再好好備份"

接下來藉口是"等我熟悉指令再好好備份"

終於, 沒藉口啦^^"

剛練習用一下rsync發現還不錯耶, 也常在網路上看到相關介紹

不過似乎都是連port 22?

以--port=###也無法改port的樣子

假設天命註定就port 22吧

我想把server端使用者lulumi的Desktop裡面所有檔案同步過來

rsync lulumi@rsync-server:Desktop/* .

注意那個 . 一開始沒看到真是搞死我

這樣只會複製檔案, 略過資料夾, 想連資料夾一起同步的話

rsync -r lulumi@rsync-server:Desktop/* .

至於server端的設定, 不需要特地設iptables也不需要修改/etc/hosts.allow

應該是ssh有通就可

缺點是要打密碼, 不過既然是用ssh通道, 應該可以改成無密碼的passphrase?

沒試過, 再說~

find的size

給未來的裕翔

剛發現一件事

使用find -size時

如果後面要加單位

k, M, G大小寫要一致

注意, 那個k如果大寫會有問題

但是M和G要大寫

find的rm確認

給未來的裕翔

如果使用find

要針對找到的檔案進行刪除

刪除前要先經使用者確認

find xxxxxx -exec rm -i {} \;

有個更快的喔! 那個確認動作交給find來問

find xxxxxx -ok rm {} \;

find的and和or

給未來的裕翔

這篇不是解答而是疑問

預設來講

find的每個expression是以and連接

需要or的話

可以-or或是-o

(補充, 需要not的話,可以-not或是 !)

今天我遇到一個問題

找出/底下owner非root, bin的檔案

find / -not -user root -not -user  bin -ls 2> /dev/null

一開始我想錯了, 打成

find / -not -user root -or -not -user  bin -ls 2> /dev/null

事後想想, 雖然想錯, 不過這指令應該print出更多結果才對阿!?

居然沒有, 而且結果似乎是錯的? 跟我想的完全不一樣!

有請未來的裕翔開導我^^

用at -c看工作內容

給未來的裕翔

當以at指明一件工作時

可用at -l查工作代號

再以

at -c 代號

來看工作內容

可以看到一堆有的沒的

那是當時at的環境紀錄

好像是一堆環境變數

crontab可以接受stdin耶!

給未來的裕翔

一般來說

可以 crontab -e 來編輯一個重複發生的事情

不過這樣就必須進入互動模式了

剛發現可以用pipe

echo 'command' | crontab

不過這只限第一次

如果要新增第二份工作

也用pipe的話

第一份工作會被覆蓋

利用ps和tail找出最大咖程式

給未來的裕翔

如果要列出所有process

ps aux

output有它的format

如果我想要自訂format, ex: pid, process name, %cpu

ps axo pid,comm,pcpu

ps axo pid,comm,%cpu 也可, 不過會多按一個鍵^^

可以發現跟ps aux比起來

少一個u, 多一個o

o是option的意思, 指定後面format用

至於那個u, 我也不知道為什麼不見了, 不過加了會錯

這樣就以顯示我要的format, 接著是排序問題, 利用--sort選項

如果要以pcpu排序

ps axo pid,comm,pcpu --sort=pcpu

預設是increasing

ps axo pid,comm,pcpu --sort=pcpu

如果要decreasing

ps axo pid,comm,pcpu --sort=-pcpu

所以如果想知道最大咖的程式

ps axo pid,comm,pcpu --sort=pcpu | tail -n1

那 ps axo pid,comm,pcpu --sort=-pcpu | head -n1 可以嗎?

不行

因為這就是output:

PID COMMAND         %CPU

這是header阿!

bash script測試資料夾是否存在

給未來的裕翔

這很簡單

不過我就是會忘記^^

test -d target-dir

echo $?

0表示存在

1表示不存在

ping的-w

給未來的裕翔

通常ping某一台機器, 如果有問題

ping指令就會等response很久

如果想訂一個等待時間, ex: 2秒

ping -w2 host

報告完畢

Monday, August 2, 2010

java的警告: The serializable class RadioButtonFrame does not declare a static final serialVersionUID field of type long

給未來的裕翔

最近java練習到GUI部份後

都會出現這個警告

The serializable class RadioButtonFrame does not declare a static final serialVersionUID field of type long

想當初在eclipse時, 直接點一下它就幫我搞定了^^

現在用vim寫我還真不知道怎麼處理

一開始當然是人工忽略該警告

不過最近決定這樣不行, 要了解一下!

於是google到這篇

http://xray2005.javaeye.com/blog/196639

但我不知道他在說啥...

總之, 解決方案是在警告所在位置, 增加以下
private static final long serialVersionUID = 1L;


搞定!

vim的.是重複行為 重複哪個行為?

給未來的裕翔

如果我現在想要修改/etc/logrotate.conf

ex: 把weekly換成daily

/etc/logrotate.conf裡面有兩個weekly

所以改完一個後, 要按Esc再按n

這時候會跳到第二個weekly

按.

就自動重複上一個改字的行為

把它變成daily

原本我還以為, 會重複那個n呢!

vim的{}

給未來的裕翔

{ 和 } 它是在段落間移動

實際上使用的話

可以想成是在空白行之間移動

/etc/sudoers某行解釋

給未來的裕翔

在/etc/sudoers裡面

有一行是

root ALL=(ALL) ALL

它意思是允許root使用者

在任意的機器上

使用任意指令

以任意使用者身份

另外, sudo每次輸密碼的效力可以維持五分鐘

五分鐘內沒動作的話

重新sudo就要重輸密碼

cut的field幾行都可以

給未來的裕翔

如果想以cut抓取/etc/passwd的某幾行

ex: 1, 4, 7行

cut -d: -f1,3,7 /etc/passwd

這幾行中間還會自動以 : 隔開喔~

sed的i

給未來的裕翔

請看以下

sed 's/^cat$/dog/i' filename

那個i

不是inform

而是ignore case

aspell如果no list?

給未來的裕翔

如果使用aspell檢查錯字時

aspell list < file

顯示

Error: No word lists can be found for the language "en_US".

那就裝一下別的套件吧

sudo yum -y install aspell-en

搞定

tee的功能

給未來的裕翔

在pipe處理中

通常都是把上一個STDOUT當成STDIN處理後再把它STDOUT

看是要匯入檔案

或是再傳給下一個指令

可否同時達成?

xxx | tee filename | yyy

上面的意思是xxx把自己的STDOUT傳給tee後

tee產生兩個STDOUT(我也不知道這說法對不對...)

一個匯入檔案filename

一個當yyy的STDIN

報告完畢

mutt的閱讀信件

給未來的裕翔

在mutt裡

如果要往下: Enter

如果要往上: Backspace

歷史命令混搭風

給未來的裕翔

當我執行某個動作

ex: cp xxxxxxxxxxxxxxxxxx

之後只要!cp

它就會去執行我最近以cp開頭的動作

至於$()則是跟` `一樣, 裡面的動作先執行

剛發現

可以 $(!cp) 耶!

混搭風阿!

不過不能 `!cp`

`` 裡面沒有替換動作的

ls的-F

給未來的裕翔

如果ls時忘記每個顏色代表的意思

可以考慮ls -F

它會加一些識別符號再每個檔名後面

萬用字元

給未來的裕翔

萬用字元的英文是 wild card

注意: 跟正規不一樣

一般為人所知的是*

代表任意長度的任意字元

而?

代表長度1的任意字元

報告完畢

Sunday, August 1, 2010

cp對於ln的處理

給未來的裕翔

cp複製一個檔案時

如果它是link檔

被複製的不會是ln檔本身, 而是ln檔指的對象

可用 cp -a 來複製ln檔本身

cal看連續月份

給未來的裕翔

如果想用cal指令看2010年7,8,9月

cal 8 2010 -3

那個-3就是以8月為中心的連續三個月

-2呢? 不行喔^^

剛看了一下, 好像只有-3可用^^"