常用linux命令

2020-08-14 19:09:34

Linux 命令

  • 關閉防火牆

1、禁用防火牆

[root@centos06 ~]# systemctl stop firewalld.service

[root@centos06 ~]#systemctl disable firewalld.service

[root@centos06 ~]#systemctl status firewalld.service (檢視關閉狀態)

關閉防火牆是不行的,我們還得關閉Selinux,

2、準備關閉SELinux

先得檢視當前SELinux狀態:

執行命令/usr/sbin/sestatus -v

//參數爲enabled即爲開啓狀態

 

3執行命令:vi /etc/selinux/config

按「i」進入編輯模式將SELINUX=enforcing改爲SELINUX=disabled,然後按「ESC」退出編輯模式,按Shift+;然後再輸入wq回車即可。

  • 免密碼登錄
  1. Linux免密碼登錄

首先機器上生成金鑰,

  1. ssh-keygen -t rsa

一路回車

將生成的公鑰複製到192.168.96.130

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

測試免密碼

ssh [email protected]

 

  • 網路設定
  1. 在vmware中選擇NAT模式
  2. 編輯網絡卡組態檔,命令爲vi /etc/sysconfig/network-scripts/ifcfg-eth0

 

TYPE=Ethernet

NAME=eno16777736

UUID=8e6cbfcb-b533-4021-ab37-aab69ce90c1b

DEVICE=eno16777736

ONBOOT=yes

IPADDR=192.168.96.128

NETMASK=255.255.255.0

GATEWAY=192.168.96.1

DNS1=192.168.96.1

BOOTPROTO=static

 

  1. 儲存退出,然後重新啓動虛擬機器網絡卡

/etc/init.d/network restart

  1. Ping www.baidu.com
  2. 2.修改/etc/sysconfig/network檔案
    ```
    [root@localhost ~]# vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=master
  3. 其它服務scp命令進行復制檔案

scp /etc/hosts 192.168.1.125:/etc/

注意:

a、可選DNS可將物理機DNS填 上

B、閘道器要與虛擬機器VMware NAT設定中一致

C、ip要在DHCP設定的範圍內

 

 

  • 安裝軟體
  1. rpm install

要解決依賴的問題

rpm –ivh xxxx.rpm

 

  1. Yum install

yum安裝ifconfig這個命令

yum install net-tools

 

  1. 修改yum源

 

1. 備份本地yum

 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak 

 

2.獲取阿裡yum源組態檔

 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

 

3.更新cache

 yum makecache 

  1. 換成本地yum源
  1. 掛載光碟

mkdir  /mnt/cdrom

mount -r /dev/cdrom /mnt/cdrom

  1. 換成本地yum源

 

執行yum命令更新yum快取

yum clean all

yum makecache

 

 

  1. 問題401 Authorization Required

已發出 HTTP 請求,正在等待迴應... 401 Authorization Required

可能網路不好,再試一次

  1. Yum 被鎖定:

可以通過強制關掉yum進程:

#rm -f /var/run/yum.pid

檢視有沒有安裝包:

yum list mysql*

檢視有沒有安裝過:

yum list installed mysql*

 

 

 

  1.  
  2.  
  • jdk

一、刪除系統自帶的jdk


rm -f /usr/bin/java

rm -f /usr/bin/javac

rm -f /etc/alternatives/java

rm -f /etc/alternatives/javac

二、解壓jdk-8u181-linux-x64.tar.gz

 

三、新增環境變數

開啓vim /etc/profile 

 

 

環境變數順序有要求,先賦值後使用

export JAVA_HOME=/usr/local/jdk1.8.0_181

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

export HADOOP_HOME=/usr/local/hadoop-2.8.4

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

 

生效

source /etc/profile

 

  • zookeeper

bin/zkServer.sh start-foreground命令檢視啓動的錯誤原因

connect refused的錯誤的原因

vi /usr/local/zookeeper/data/myid

vi /usr/local/zookeeper-3.4.10/conf/zoo.cfg

/usr/local/zookeeper-3.4.10/bin/zkServer.sh start-foreground

/usr/local/zookeeper-3.4.10/bin/zkServer.sh status

叢集需要在每個 虛擬機器上啓動zookeeper

 

  • 停止當前程式

快捷鍵:

Ctrl+c

在命令列下起着終止當前執行程式的作用,

Ctrl+d

相當於exit命令,退出當前shell

Ctrl+s

掛起當前shell(保護作用很明顯哦)

Ctrl+q

解凍掛起的shell再不行就重新連線開啓一個終端,reboot linux kill 相關進程。

進入vi的命令

vi filename :開啓或新建檔案,並將遊標置於第一行首

vi +n filename :開啓檔案,並將遊標置於第n行首

vi + filename :開啓檔案,並將遊標置於最後一行首

vi +/pattern filename:開啓檔案,並將遊標置於第一個與pattern匹配的串處

vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename

vi filename....filename :開啓多個檔案,依次進行編輯

 

系統資訊 
arch 顯示機器的處理器架構(1) 
uname -m
顯示機器的處理器架構(2) 
uname -r
顯示正在使用的內核版本 
dmidecode -q
顯示硬體系統部件 - (SMBIOS / DMI) 
hdparm -i /dev/hda
羅列一個磁碟的架構特性 
hdparm -tT /dev/sda
在磁碟上執行測試性讀取操作 
cat /proc/cpuinfo
顯示CPU info的資訊 
cat /proc/interrupts
顯示中斷 
cat /proc/meminfo
校驗記憶體使用 
cat /proc/swaps
顯示哪些swap被使用 
cat /proc/version
顯示內核的版本 
cat /proc/net/dev
顯示網路適配器及統計 
cat /proc/mounts
顯示已載入的檔案系統 
lspci -tv
羅列 PCI 裝置 
lsusb -tv
顯示 USB 裝置 
date
顯示系統日期 
cal 2007
顯示2007年的日曆表 
date 041217002007.00
設定日期和時間 - 月日時分年. 
clock -w
將時間修改儲存到 BIOS 

關機 (系統的關機、重新啓動以及登出
shutdown -h now 關閉系統(1) 
init 0
關閉系統(2) 
telinit 0
關閉系統(3) 
shutdown -h hours:minutes &
按預定時間關閉系統 
shutdown -c
取消按預定時間關閉系統 
shutdown -r now
重新啓動(1) 
reboot
重新啓動(2) 
logout
註銷 

檔案和目錄 
cd /home 進入 '/ home' 目錄
cd ..
返回上一級目錄 
cd ../..
返回上兩級目錄 
cd
進入個人的主目錄 
cd ~user1
進入個人的主目錄 
cd -
返回上次所在的目錄 
pwd
顯示工作路徑 
ls
檢視目錄中的檔案 
ls -F
檢視目錄中的檔案 
ls -l
顯示檔案和目錄的詳細資料 
ls -a
顯示隱藏檔案 
ls *[0-9]*
顯示包含數位的檔名和目錄名 
tree
顯示檔案和目錄由根目錄開始的樹形結構(1) 
lstree
顯示檔案和目錄由根目錄開始的樹形結構(2) 
mkdir dir1
建立一個叫做 'dir1' 的目錄
mkdir dir1 dir2
同時建立兩個目錄 
mkdir -p /tmp/dir1/dir2
建立一個目錄樹 
rm -f file1
刪除一個叫做 'file1' 的檔案
rmdir dir1
刪除一個叫做 'dir1' 的目錄
rm -rf dir1
刪除一個叫做 'dir1' 的目錄並同時刪除其內容 
rm -rf dir1 dir2
同時刪除兩個目錄及它們的內容 
mv dir1 new_dir
重新命名/移動 一個目錄 
cp file1 file2
複製一個檔案 
cp dir/* .
複製一個目錄下的所有檔案到當前工作目錄 
cp -a /tmp/dir1 .
複製一個目錄到當前工作目錄 
cp -a dir1 dir2
複製一個目錄 
ln -s file1 lnk1
建立一個指向檔案或目錄的軟鏈接 
ln file1 lnk1
建立一個指向檔案或目錄的物理鏈接 
touch -t 0712250000 file1
修改一個檔案或目錄的時間戳 - (YYMMDDhhmm) 
file file1 outputs the mime type of the file as text 
iconv -l
列出已知的編碼 
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. 
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 


檔案搜尋 
find / -name file1 '/' 開始進入根檔案系統搜尋檔案和目錄 
find / -user user1
搜尋屬於使用者 'user1' 的檔案和目錄 
find /home/user1 -name \*.bin
在目錄 '/ home/user1' 中搜尋帶有'.bin' 結尾的檔案 
find /usr/bin -type f -atime +100
搜尋在過去100天內未被使用過的執行檔案 
find /usr/bin -type f -mtime -10
搜尋在10天內被建立或者修改過的檔案 
find / -name \*.rpm -exec chmod 755 '{}' \;
搜尋以 '.rpm' 結尾的檔案並定義其許可權 
find / -xdev -name \*.rpm
搜尋以 '.rpm' 結尾的檔案,忽略光碟機、捷盤等可移動裝置 
locate \*.ps
尋找以 '.ps' 結尾的檔案 - 先執行 'updatedb' 命令 
whereis halt
顯示一個二進制檔案、原始碼或man的位置 
which halt
顯示一個二進制檔案或可執行檔案的完整路徑 



掛載一個檔案系統 
mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經存在 
umount /dev/hda2
解除安裝一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出 
fuser -km /mnt/hda2
當裝置繁忙時強制解除安裝 
umount -n /mnt/hda2
執行解除安裝操作而不寫入 /etc/mtab 檔案- 當檔案爲只讀或當磁碟寫滿時非常有用 
mount /dev/fd0 /mnt/floppy
掛載一個軟碟 
mount /dev/cdrom /mnt/cdrom
掛載一個cdromdvdrom 
mount /dev/hdc /mnt/cdrecorder
掛載一個cdrwdvdrom 
mount /dev/hdb /mnt/cdrecorder
掛載一個cdrwdvdrom 
mount -o loop file.iso /mnt/cdrom
掛載一個檔案或ISO映象檔案 
mount -t vfat /dev/hda5 /mnt/hda5
掛載一個Windows FAT32檔案系統 
mount /dev/sda1 /mnt/usbdisk
掛載一個usb 捷盤或快閃記憶體裝置 
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share
掛載一個windows網路共用 



磁碟空間 
df -h 顯示已經掛載的分割區列表 
ls -lSr |more
以尺寸大小排列檔案和目錄 
du -sh dir1
估算目錄 'dir1' 已經使用的磁碟空間
du -sk * | sort -rn
以容量大小爲依據依次顯示檔案和目錄的大小 
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n
以大小爲依據依次顯示已安裝的rpm包所使用的空間 (fedora, redhat類系統
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n
以大小爲依據顯示已安裝的deb包所使用的空間 (ubuntu, debian類系統



使用者和羣組 
groupadd group_name 建立一個新使用者組 
groupdel group_name
刪除一個使用者組 
groupmod -n new_group_name old_group_name
重新命名一個使用者組 
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1
建立一個屬於 "admin" 使用者組的使用者 
useradd user1
建立一個新使用者 
userdel -r user1
刪除一個使用者 ( '-r' 排除主目錄
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1
修改使用者屬性 
passwd
修改口令 
passwd user1
修改一個使用者的口令 (只允許root執行
chage -E 2005-12-31 user1
設定使用者口令的失效期限 
pwck
檢查 '/etc/passwd' 的檔案格式和語法修正以及存在的使用者 
grpck
檢查 '/etc/passwd' 的檔案格式和語法修正以及存在的羣組 
newgrp group_name
登陸進一個新的羣組以改變新建立檔案的預設羣組 



檔案的許可權 - 使用 "+" 設定許可權,使用 "-" 用於取消 
ls -lh 顯示許可權 
ls /tmp | pr -T5 -W$COLUMNS
將終端劃分成5欄顯示 
chmod ugo+rwx directory1
設定目錄的所有人(u)、羣組(g)以及其他人(o)以讀(r )、寫(w)和執行(x)的許可權 
chmod go-rwx directory1
刪除羣組(g)與其他人(o)對目錄的讀寫執行許可權 
chown user1 file1
改變一個檔案的所有人屬性 
chown -R user1 directory1
改變一個目錄的所有人屬性並同時改變改目錄下所有檔案的屬性 
chgrp group1 file1
改變檔案的羣組 
chown user1:group1 file1
改變一個檔案的所有人和羣組屬性 
find / -perm -u+s
羅列一個系統中所有使用了SUID控制的檔案 
chmod u+s /bin/file1
設定一個二進制檔案的 SUID - 執行該檔案的使用者也被賦予和所有者同樣的許可權 
chmod u-s /bin/file1
禁用一個二進制檔案的 SUID 
chmod g+s /home/public
設定一個目錄的SGID - 類似SUID ,不過這是針對目錄的 
chmod g-s /home/public
禁用一個目錄的 SGID  
chmod o+t /home/public
設定一個檔案的 STIKY - 只允許合法所有人刪除檔案 
chmod o-t /home/public
禁用一個目錄的 STIKY  



檔案的特殊屬性 - 使用 "+" 設定許可權,使用 "-" 用於取消 
chattr +a file1 只允許以追加方式讀寫檔案 
chattr +c file1
允許這個檔案能被內核自動壓縮/解壓 
chattr +d file1
在進行檔案系統備份時,dump程式將忽略這個檔案 
chattr +i file1
設定成不可變的檔案,不能被刪除、修改、重新命名或者鏈接 
chattr +s file1
允許一個檔案被安全地刪除 
chattr +S file1
一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁碟 
chattr +u file1
若檔案被刪除,系統會允許你在以後恢復這個被刪除的檔案 
lsattr
顯示特殊的屬性 



打包和壓縮檔案 
bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的檔案 
bzip2 file1
壓縮一個叫做 'file1' 的檔案 
gunzip file1.gz
解壓一個叫做 'file1.gz'的檔案 
gzip file1
壓縮一個叫做 'file1'的檔案 
gzip -9 file1
最大程度壓縮 
rar a file1.rar test_file
建立一個叫做 'file1.rar' 的包 
rar a file1.rar file1 file2 dir1
同時壓縮 'file1', 'file2' 以及目錄 'dir1' 
rar x file1.rar
解壓rar 
unrar x file1.rar
解壓rar 
tar -cvf archive.tar file1
建立一個非壓縮的 tarball 
tar -cvf archive.tar file1 file2 dir1
建立一個包含了 'file1', 'file2' 以及 'dir1'的檔案檔案 
tar -tf archive.tar
顯示一個包中的內容 
tar -xvf archive.tar
釋放一個包 
tar -xvf archive.tar -C /tmp
將壓縮包釋放到 /tmp目錄下 
tar -cvfj archive.tar.bz2 dir1
建立一個bzip2格式的壓縮包 
tar -jxvf archive.tar.bz2
解壓一個bzip2格式的壓縮包 
tar -cvfz archive.tar.gz dir1
建立一個gzip格式的壓縮包 
tar -zxvf archive.tar.gz
解壓一個gzip格式的壓縮包 
zip file1.zip file1
建立一個zip格式的壓縮包 
zip -r file1.zip file1 file2 dir1
將幾個檔案和目錄同時壓縮成一個zip格式的壓縮包 
unzip file1.zip
解壓一個zip格式壓縮包 



RPM - Fedora, Redhat及類似系統) 
rpm -ivh package.rpm
安裝一個rpm 
rpm -ivh --nodeeps package.rpm
安裝一個rpm包而忽略依賴關係警告 
rpm -U package.rpm
更新一個rpm包但不改變其組態檔 
rpm -F package.rpm
更新一個確定已經安裝的rpm 
rpm -e package_name.rpm
刪除一個rpm 
rpm -qa
顯示系統中所有已經安裝的rpm 
rpm -qa | grep httpd
顯示所有名稱中包含 "httpd" 字樣的rpm 
rpm -qi package_name
獲取一個已安裝包的特殊資訊 
rpm -qg "System Environment/Daemons"
顯示一個元件的rpm 
rpm -ql package_name
顯示一個已經安裝的rpm包提供的檔案列表 
rpm -qc package_name
顯示一個已經安裝的rpm包提供的組態檔列表 
rpm -q package_name --whatrequires
顯示與一個rpm包存在依賴關係的列表 
rpm -q package_name --whatprovides
顯示一個rpm包所佔的體積 
rpm -q package_name --scripts
顯示在安裝/刪除期間所執行的指令碼
rpm -q package_name --changelog
顯示一個rpm包的修改歷史 
rpm -qf /etc/httpd/conf/httpd.conf
確認所給的檔案由哪個rpm包所提供 
rpm -qp package.rpm -l
顯示由一個尚未安裝的rpm包提供的檔案列表 
rpm --import /media/cdrom/RPM-GPG-KEY
匯入公鑰數位憑證 
rpm --checksig package.rpm
確認一個rpm包的完整性 
rpm -qa gpg-pubkey
確認已安裝的所有rpm包的完整性 
rpm -V package_name
檢查檔案尺寸、 許可、型別、所有者、羣組、MD5檢查以及最後修改時間 
rpm -Va
檢查系統中所有已安裝的rpm- 小心使用 
rpm -Vp package.rpm
確認一個rpm包還未安裝 
rpm2cpio package.rpm | cpio --extract --make-directories *bin*
從一個rpm包執行可執行檔案 
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm
從一個rpm原始碼安裝一個構建好的包 
rpmbuild --rebuild package_name.src.rpm
從一個rpm原始碼構建一個 rpm  



YUM 軟體包升級器 - Fedora, RedHat及類似系統) 
yum install package_name 下載並安裝一個rpm 
yum localinstall package_name.rpm
將安裝一個rpm包,使用你自己的軟體倉庫爲你解決所有依賴關係 
yum update package_name.rpm
更新當前系統中所有安裝的rpm 
yum update package_name
更新一個rpm 
yum remove package_name
刪除一個rpm 
yum list
列出當前系統中安裝的所有包 
yum search package_name
rpm倉庫中搜尋軟體包 
yum clean packages
清理rpm快取刪除下載的包 
yum clean headers
刪除所有標頭檔案 
yum clean all
刪除所有快取的包和標頭檔案 



DEB (Debian, Ubuntu 以及類似系統
dpkg -i package.deb 安裝/更新一個 deb  
dpkg -r package_name
從系統刪除一個 deb  
dpkg -l
顯示系統中所有已經安裝的 deb  
dpkg -l | grep httpd
顯示所有名稱中包含 "httpd" 字樣的deb 
dpkg -s package_name
獲得已經安裝在系統中一個特殊包的資訊 
dpkg -L package_name
顯示系統中已經安裝的一個deb包所提供的檔案列表 
dpkg --contents package.deb
顯示尚未安裝的一個包所提供的檔案列表 
dpkg -S /bin/ping
確認所給的檔案由哪個deb包提供 



APT 軟體工具 (Debian, Ubuntu 以及類似系統
apt-get install package_name 安裝/更新一個 deb  
apt-cdrom install package_name
從光碟安裝/更新一個 deb  
apt-get update
升級列表中的軟體包 
apt-get upgrade
升級所有已安裝的軟體 
apt-get remove package_name
從系統刪除一個deb 
apt-get check
確認依賴的軟體倉庫正確 
apt-get clean
從下載的軟體包中清除快取 
apt-cache search searched-package
返回包含所要搜尋字串的軟體包名稱 



檢視檔案內容 
cat file1 從第一個位元組開始正向檢視檔案的內容 
tac file1
從最後一行開始反向檢視一個檔案的內容 
more file1
檢視一個長檔案的內容 
less file1
類似於 'more' 命令,但是它允許在檔案中和正向操作一樣的反向操作 
head -2 file1
檢視一個檔案的前兩行 
tail -2 file1
檢視一個檔案的最後兩行 
tail -f /var/log/messages
實時檢視被新增到一個檔案中的內容 



文字處理 
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT 
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt
合併一個檔案的詳細說明文字,並將簡介寫入一個新檔案中 
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt
合併一個檔案的詳細說明文字,並將簡介寫入一個已有的檔案中 
grep Aug /var/log/messages
在檔案 '/var/log/messages'中查詢關鍵詞"Aug" 
grep ^Aug /var/log/messages
在檔案 '/var/log/messages'中查詢以"Aug"開始的詞彙 
grep [0-9] /var/log/messages
選擇 '/var/log/messages' 檔案中所有包含數位的行 
grep Aug -R /var/log/*
在目錄 '/var/log' 及隨後的目錄中搜尋字串"Aug" 
sed 's/stringa1/stringa2/g' example.txt
example.txt檔案中的 "string1" 替換成 "string2" 
sed '/^$/d' example.txt
example.txt檔案中刪除所有空白行 
sed '/ *#/d; /^$/d' example.txt
example.txt檔案中刪除所有註釋和空白行 
echo 'esempio' | tr '[:lower:]' '[:upper:]'
合併上下單元格內容 
sed -e '1d' result.txt
從檔案example.txt 中排除第一行 
sed -n '/stringa1/p'
檢視只包含詞彙 "string1"的行 
sed -e 's/ *$//' example.txt
刪除每一行最後的空白字元 
sed -e 's/stringa1//g' example.txt
從文件中只刪除詞彙 "string1" 並保留剩餘全部 
sed -n '1,5p;5q' example.txt
檢視從第一行到第5行內容 
sed -n '5p;5q' example.txt
檢視第5 
sed -e 's/00*/0/g' example.txt
用單個零替換多個零 
cat -n file1
標示檔案的行數 
cat example.txt | awk 'NR%2==1'
刪除example.txt檔案中的所有偶數行 
echo a b c | awk '{print $1}'
檢視一行第一欄 
echo a b c | awk '{print $1,$3}'
檢視一行的第一和第三欄 
paste file1 file2
合併兩個檔案或兩欄的內容 
paste -d '+' file1 file2
合併兩個檔案或兩欄的內容,中間用"+"區分 
sort file1 file2
排序兩個檔案的內容 
sort file1 file2 | uniq
取出兩個檔案的並集(重複的行只保留一份
sort file1 file2 | uniq -u
刪除交集,留下其他的行 
sort file1 file2 | uniq -d
取出兩個檔案的交集(只留下同時存在於兩個檔案中的檔案
comm -1 file1 file2
比較兩個檔案的內容只刪除 'file1' 所包含的內容 
comm -2 file1 file2
比較兩個檔案的內容只刪除 'file2' 所包含的內容 
comm -3 file1 file2
比較兩個檔案的內容只刪除兩個檔案共有的部分 




字元設定和檔案格式轉換 
dos2unix filedos.txt fileunix.txt 將一個文字檔案的格式從MSDOS轉換成UNIX 
unix2dos fileunix.txt filedos.txt
將一個文字檔案的格式從UNIX轉換成MSDOS 
recode ..HTML < page.txt > page.html
將一個文字檔案轉換成html 
recode -l | more
顯示所有允許的轉換格式 



檔案系統分析 
badblocks -v /dev/hda1 檢查磁碟hda1上的壞磁塊 
fsck /dev/hda1
修復/檢查hda1磁碟上linux檔案系統的完整性 
fsck.ext2 /dev/hda1
修復/檢查hda1磁碟上ext2檔案系統的完整性 
e2fsck /dev/hda1
修復/檢查hda1磁碟上ext2檔案系統的完整性 
e2fsck -j /dev/hda1
修復/檢查hda1磁碟上ext3檔案系統的完整性 
fsck.ext3 /dev/hda1
修復/檢查hda1磁碟上ext3檔案系統的完整性 
fsck.vfat /dev/hda1
修復/檢查hda1磁碟上fat檔案系統的完整性 
fsck.msdos /dev/hda1
修復/檢查hda1磁碟上dos檔案系統的完整性 
dosfsck /dev/hda1
修復/檢查hda1磁碟上dos檔案系統的完整性 



初始化一個檔案系統 
mkfs /dev/hda1 hda1分割區建立一個檔案系統 
mke2fs /dev/hda1
hda1分割區建立一個linux ext2的檔案系統 
mke2fs -j /dev/hda1
hda1分割區建立一個linux ext3(日誌型)的檔案系統 
mkfs -t vfat 32 -F /dev/hda1
建立一個 FAT32 檔案系統 
fdformat -n /dev/fd0
格式化一個軟碟 
mkswap /dev/hda3
建立一個swap檔案系統 



SWAP檔案系統 
mkswap /dev/hda3 建立一個swap檔案系統 
swapon /dev/hda3
啓用一個新的swap檔案系統 
swapon /dev/hda2 /dev/hdb3
啓用兩個swap分割區 



備份 
dump -0aj -f /tmp/home0.bak /home 製作一個 '/home' 目錄的完整備份 
dump -1aj -f /tmp/home0.bak /home
製作一個 '/home' 目錄的互動式備份 
restore -if /tmp/home0.bak
還原一個互動式備份 
rsync -rogpav --delete /home /tmp
同步兩邊的目錄 
rsync -rogpav -e ssh --delete /home ip_address:/tmp
通過SSH通道rsync 
rsync -az -e ssh --delete ip_addr:/home/public /home/local
通過ssh和壓縮將一個遠端目錄同步到本地目錄 
rsync -az -e ssh --delete /home/local ip_addr:/home/public
通過ssh和壓縮將本地目錄同步到遠端目錄 
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz'
通過ssh在遠端主機上執行一次備份本地磁碟的操作 
dd if=/dev/sda of=/tmp/file1
備份磁碟內容到一個檔案 
tar -Puf backup.tar /home/user
執行一次對 '/home/user' 目錄的互動式備份操作 
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p'
通過ssh在遠端目錄中複製一個目錄內容 
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'
通過ssh在遠端目錄中複製一個本地目錄 
tar cf - . | (cd /tmp/backup ; tar xf - )
本地將一個目錄複製到另一個地方,保留原有許可權及鏈接 
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents
從一個目錄查詢並複製所有以 '.txt' 結尾的檔案到另一個目錄 
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2
查詢所有以 '.log' 結尾的檔案並做成一個bzip 
dd if=/dev/hda of=/dev/fd0 bs=512 count=1
做一個將 MBR (Master Boot Record)內容複製到軟碟的動作 
dd if=/dev/fd0 of=/dev/hda bs=512 count=1
從已經儲存到軟碟的備份中恢復MBR內容 



光碟 
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個可複寫的光碟內容 
mkisofs /dev/cdrom > cd.iso
在磁碟上建立一個光碟的iso映象檔案 
mkisofs /dev/cdrom | gzip > cd_iso.gz
在磁碟上建立一個壓縮了的光碟iso映象檔案 
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd
建立一個目錄的iso映象檔案 
cdrecord -v dev=/dev/cdrom cd.iso
燒錄一個ISO映象檔案 
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom -
燒錄一個壓縮了的ISO映象檔案 
mount -o loop cd.iso /mnt/iso
掛載一個ISO映象檔案 
cd-paranoia -B
從一個CD光碟轉錄音軌到 wav 檔案中 
cd-paranoia -- "-3"
從一個CD光碟轉錄音軌到 wav 檔案中(參數-3 
cdrecord --scanbus
掃描匯流排以識別scsi通道 
dd if=/dev/hdc | md5sum
校驗一個裝置的md5sum編碼,例如一張 CD 



網路 - (乙太網和WIFI無線 
ifconfig eth0 顯示一個乙太網卡的設定 
ifup eth0
啓用一個 'eth0' 網路裝置 
ifdown eth0
禁用一個 'eth0' 網路裝置 
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
控制IP地址 
ifconfig eth0 promisc
設定 'eth0' 成混雜模式以嗅探數據包 (sniffing) 
dhclient eth0
dhcp模式啓用 'eth0' 
route -n show routing table 
route add -net 0/0 gw IP_Gateway configura default gateway 
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16' 
route del 0/0 gw IP_gateway remove static route 
echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing 
hostname show hostname of system 
host www.example.com lookup hostname to resolve name to ip address and viceversa(1) 
nslookup www.example.com lookup hostname to resolve name to ip address and viceversa(2) 
ip link show show link status of all interfaces 
mii-tool eth0 show link status of 'eth0' 
ethtool eth0 show statistics of network card 'eth0' 
netstat -tup show all active network connections and their PID 
netstat -tupl show all network services listening on the system and their PID 
tcpdump tcp port 80 show all HTTP traffic 
iwlist scan show wireless networks 
iwconfig eth1 show configuration of a wireless network card 
hostname show hostname 
host www.example.com lookup hostname to resolve name to ip address and viceversa 
nslookup www.example.com lookup hostname to resolve name to ip address and viceversa 
whois www.example.com lookup on Whois database 

 

JPS工具

jps(Java Virtual Machine Process Status Tool)JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平臺上簡單察看當前java進程的一些簡單情況。

    我想很多人都是用過unix系統裡的ps命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程,及其 id jps 也是一樣,它的作用是顯示當前系統的java進程情況,及其id號。我們可以通過它來檢視我們到底啓動了幾個java進程(因爲每一個java程式都會獨佔一個java虛擬機器範例),和他們的進程號(爲下面 下麪幾個程式做準備),並可通過opt來檢視這些進程的詳細啓動參數。

     使用方法:在當前命令列下打 jps(需要JAVA_HOME,沒有的話,到改程式的目錄下打)

jps存放在JAVA_HOME/bin/jps,使用時爲了方便請將JAVA_HOME/bin/加入到Path.

$> jps
23991 Jps
23789 BossMain
23651 Resin

 


比較常用的參數:

-q 只顯示pid,不顯示class名稱,jar檔名和傳遞給main 方法的參數
$>  jps -q
28680
23789
23651

-m 輸出傳遞給main 方法的參數,在嵌入式jvm上可能是null

$> jps -m
28715 Jps -m
23789 BossMain
23651 Resin -socketwait 32768 -stdout /data/aoxj/resin/log/stdout.log -stderr /data/aoxj/resin/log/stderr.log

-l 輸出應用程式main class的完整package 或者 應用程式的jar檔案完整路徑名

$> jps -l
28729 sun.tools.jps.Jps
23789 com.asiainfo.aimc.bossbi.BossMain
23651 com.caucho.server.resin.Resin

-v 輸出傳遞給JVM的參數

$> jps -v
23789 BossMain
28802 Jps -Denv.class.path=/data/aoxj/bossbi/twsecurity/java/trustwork140.jar:/data/aoxj/bossbi/twsecurity/java/:/data/aoxj/bossbi/twsecurity/java/twcmcc.jar:/data/aoxj/jdk15/lib/rt.jar:/data/aoxj/jd

k15/lib/tools.jar -Dapplication.home=/data/aoxj/jdk15 -Xms8m
23651 Resin -Xss1m -Dresin.home=/data/aoxj/resin -Dserver.root=/data/aoxj/resin -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -

Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl

sudo jps看到的進程數量最全

jps 192.168.0.77

列出遠端伺服器192.168.0.77機器所有的jvm範例,採用rmi協定,預設連線埠爲1099

(前提是遠端伺服器提供jstatd服務)

注:jps命令有個地方很不好,似乎只能顯示當前使用者的java進程,要顯示其他使用者的還是隻能用unix/linuxps命令。

 

 

 

進入vi的命令 
vi filename :開啓或新建檔案,並將遊標置於第一行首 
vi +n filename :開啓檔案,並將遊標置於第n行首 
vi + filename :開啓檔案,並將遊標置於最後一行首 
vi +/pattern filename:開啓檔案,並將遊標置於第一個與pattern匹配的串處 
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename 
vi filename....filename :開啓多個檔案,依次進行編輯 

移動遊標類命令
h :遊標左移一個字元 
l :遊標右移一個字元 
space:遊標右移一個字元 
Backspace:遊標左移一個字元 
kCtrl+p:遊標上移一行 
jCtrl+n :遊標下移一行 
Enter :遊標下移一行 
wW :遊標右移一個字至字首 
bB :遊標左移一個字至字首 
eE :遊標右移一個字至字尾 
) :遊標移至句尾 
( :遊標移至句首 
}:遊標移至段落開頭 
{:遊標移至段落結尾 
nG:遊標移至第n行首 
n+:遊標下移n 
n-:遊標上移n 
n$:遊標移至第n行尾 
H :遊標移至螢幕頂行 
M :遊標移至螢幕中間行 
L :遊標移至螢幕最後行 
0:(注意是數位零)遊標移至當前行首 
$:遊標移至當前行尾 

螢幕翻滾類命令 
Ctrl+u:向檔案首翻半屏 
Ctrl+d:向檔案尾翻半屏 
Ctrl+f:向檔案尾翻一屏 
Ctrlb;向檔案首翻一屏 
nz:將第n行滾至螢幕頂部,不指定n時將當前行滾至螢幕頂部。 

插入文字類命令 
i :在遊標前 
I :在當前行首 
a:遊標後 
A:在當前行尾 
o:在當前行之下新開一行 
O:在當前行之上新開一行 
r:替換當前字元 
R:替換當前字元及其後的字元,直至按ESC 
s:從當前遊標位置處開始,以輸入的文字替代指定數目的字元 
S:刪除指定數目的行,並以所輸入文字代替之 
ncwnCW:修改指定數目的字 
nCC:修改指定數目的行 

刪除命令 
ndwndW:刪除遊標處開始及其後的n-1個字 
do:刪至行首 
d$:刪至行尾 
ndd:刪除當前行及其後n-1 
xX:刪除一個字元,x刪除遊標後的,而X刪除遊標前的 
Ctrl+u:刪除輸入方式下所輸入的文字 

搜尋及替換命令 
/pattern:從遊標開始處向檔案尾搜尋pattern 
?pattern:從遊標開始處向檔案首搜尋pattern 
n:在同一方向重複上一次搜尋命令 
N:在反方向上重複上一次搜尋命令 
s/p1/p2/g:將當前行中所有p1均用p2替代 
n1,n2s/p1/p2/g:將第n1n2行中所有p1均用p2替代 
g/p1/s//p2/g:將檔案中所有p1均用p2替換 

選項設定 
all:列出所有選項設定情況 
term:設定終端型別 
ignorance:在搜尋中忽略大小寫 
list:顯示製表位(Ctrl+I)和行尾標誌($) 
number:顯示行號 
report:顯示由面向行的命令修改過的數目 
terse:顯示簡短的警告資訊 
warn:在轉到別的檔案時若沒儲存當前檔案則顯示NO write資訊 
nomagic:允許在搜尋模式中,使用前面不帶「\」的特殊字元 
nowrapscan:禁止vi在搜尋到達檔案兩端時,又從另一端開始 
mesg:允許vi顯示其他使用者用write寫到自己終端上的資訊 

最後行方式命令 
n1,n2 co n3:將n1行到n2行之間的內容拷貝到第n3行下 
n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下 
n1,n2 d :將n1行到n2行之間的內容刪除 
w :儲存當前檔案 
e filename:開啓檔案filename進行編輯 
x:儲存當前檔案並退出 
q:退出vi 
q!:不儲存檔案並退出vi 
!command:執行shell命令command 
n1,n2 w!command:將檔案中n1行至n2行的內容作爲command的輸入並執行之,若不指定n1n2,則表示將整個檔案內容作爲command的輸入 
r!command:將命令command的輸出結果放到當前行 

暫存器操作 
"?nyy:將當前行及其下n行的內容儲存到暫存器?中,其中?爲一個字母,n爲一個數字 
"?nyw:將當前行及其下n個字儲存到暫存器?中,其中?爲一個字母,n爲一個數字 
"?nyl:將當前行及其下n個字元儲存到暫存器?中,其中?爲一個字母,n爲一個數字 
"?p:取出暫存器?中的內容並將其放到遊標位置處。這裏?可以是一個字母,也可以是一個數字 
ndd:將當前行及其下共n行文字刪除,並將所刪內容放到1號刪除暫存器中。

VI的使用
--------------------------------------------------------------------------------

一、插入文字 
┌──────────────┐ 
命令描述          │ 
────────────── 
│i  在當前字元前插入文字  │ 
────────────── 
│I  在行首插入文字      │ 
────────────── 
│a  在當前字元後新增文字  │ 
────────────── 
│A  在行末新增文字     │ 
────────────── 
│o  在當前行後面插入一空行 │ 
────────────── 
│O  在當前行前面插入一空行 │ 
────────────── 
│R  以改寫方式輸入文字   │ 
└──────────────┘ 
二、移動遊標 
┌────────────────┐ 
命令   描述         │ 
──────────────── 
│j或下箭頭向下移動一行     │ 
──────────────── 
│k或上箭頭向上移動一行     │ 
──────────────── 
│h或左箭頭左移一個字元     │ 
──────────────── 
│l或右箭頭右移一個字元     │ 
──────────────── 
│w     右移一個詞      │ 
──────────────── 
│W     右移一個以空格分隔的詞│ 
──────────────── 
│b     左移一個詞      │ 
──────────────── 
│B     左移一個以空格分隔的詞│ 
──────────────── 
│0     移到行首       │ 
│Ctrl-F  向前翻頁       │ 
──────────────── 
│Ctrl-B  向後翻頁       │ 
──────────────── 
│nG    到第n        │ 
──────────────── 
│G     到最後一行      │ 
└────────────────┘ 
三、替換文字 
┌───────────┐ 
命令   描述    │ 
─────────── 
│$     到行尾   │ 
─────────── 
│(     到句子的開頭│ 
─────────── 
│)     到句子的末尾│ 
─────────── 
│{     到段落的開頭│ 
─────────── 
│}     到段落的末尾│ 
└───────────┘ 

四、刪除文字 
┌──────────────┐ 
命令 描述          │ 
────────────── 
│r   替換一個字元      │ 
────────────── 
│c   修改文字直到按下Esc │ 
────────────── 
│cw  修改下一個詞      │ 
────────────── 
│cnw 修改接下來的n個詞   │ 
└──────────────┘ 
五、文字編輯 
┌────────────────────────┐ 
命寺描述                    │ 
──────────────────────── 
│yy 將一行文字移到預設緩衝區中          │ 
──────────────────────── 
│yn 將下一個詞移到預設緩衝區中          │ 
──────────────────────── 
│ynw │將後面的n個詞移到預設緩衝區中        │ 
──────────────────────── 
│p  如果預設緩衝區中包含一行文字,則在當前   │ 
  行後面插入一個空行井將預設緩衝區中的聲   │ 
  容貼上到這一行中;如果預設緩衝區中包含   │ 
  多個詞,把這些詞貼上到遊標的右邊.     │ 
──────────────────────── 
│P  如果預設緩衝區中包含一行文字,則正當前    │ 
 行前面插入一個空行井將預設緩衝區中的內    │ 
  容貼上到這一行中;如果預設緩衝區中包含    │ 
 多個詞,把這些詞貼上到遊標的左邊    

  │ 
└────────────────────────┘ 
六、儲存退出 
┌──────────────────────────┐ 
命令         描述             │ 
────────────────────────── 
│zz          儲存並退出          │ 
────────────────────────── 
│:w filename      寫入檔案            │ 
────────────────────────── 
│:W          寫入檔案           │ 
────────────────────────── 
│:x          儲存(如果當前檔案修改過)並退出│ 
────────────────────────── 
│:q!         不儲存檔案,直接退出      │ 
────────────────────────── 
│:q          退出vi            │ 

VI常用技巧

VI命令可以說是Unix/Linux世界裏最常用的編輯檔案的命令了,但是因爲它的命令集衆多,很多人都不習慣使用它,其實您只需要掌握基本命令,然後加以靈活運用,就會發現它的優勢,並會逐漸喜歡使用這種方法。本文旨在介紹VI的一些最常用命令和高階應用技巧。 

一、基本命令介紹 

---- 1.遊標命令 

kjhl——上、下、左、右遊標移動命令。雖然您可以在Linux中使用鍵盤右邊的4個遊標鍵,但是記住這4個命令還是非常有用的。這4個鍵正是右手在鍵盤上放置的基本位置。 
nG——跳轉命令。n爲行數,該命令立即使遊標跳到指定行。 
Ctrl+G——遊標所在位置的行數和列數報告。 
wb——使遊標向前或向後跳過一個單詞。 
---- 2.編輯命令 
iar——在遊標的前、後以及所在處插入字元命令(i=inserta=appendr=replace) 
cwdw——改變(置換)/刪除遊標所在處的單詞的命令 (c=changed=delete) 
xd$dd——刪除一個字元、刪除遊標所在處到行尾的所有字元以及刪除整行的命令。 
---- 3.查詢命令 
---- /string?string——從遊標所在處向後或向前查詢相應的字串的命令。 
---- 4.拷貝複製命令 
---- yyp——拷貝一行到剪貼簿或取出剪貼簿中內容的命令。 

二、常見問題及應用技巧 

---- 1.在一個新檔案中讀/etc/passwd中的內容,取出使用者名稱部分。 
---- vi file 
---- :r /etc/passwd
在開啓的檔案file中遊標所在處讀入/etc/passwd 
---- :%s/:.*//g 刪除/etc/passwd中使用者名稱後面的從冒號開始直到行尾的所有部分。 
---- 您也可以在指定的行號後讀入檔案內容,例如使用命令「:3r /etc/passwd」從新檔案的第3行開始讀入 /etc/passwd的所有內容。 
---- 我們還可以使用以下方法刪掉檔案中所有的空行及以#開始的註釋行。 
---- #cat squid.conf.default | grep -v ^$ | grep -v ^# 

---- 2
.在開啓一個檔案編輯後才知道登錄的使用者對該檔案沒有寫的許可權,不能存檔,需要將所做修改存入臨時檔案。 
---- vi file 
---- :w /tmp/1
儲存所做的所有修改,也可以將其中的某一部分修改儲存到臨時檔案,例如僅僅把第2059行之間的內容存檔成檔案/tmp/1,我們可以鍵入如下命令。 
---- vi file 
---- :20,59w /tmp/1 

---- 3
.用VI編輯一個檔案,但需要刪除大段的內容。 
---- 首先利用編輯命令「vi file」開啓檔案,然後將遊標移到需要刪除的行處按Ctrl+G顯示行號,再到結尾處再按Ctrl+G,顯示檔案結尾的行號。 
---- :23,1045d 假定2次得到的行號爲231045,則把這期間的內容全刪除,也可以在要刪除的開始行和結束行中用mamb命令標記,然後利用「:a,bd」命令刪除。 

---- 4.在整個檔案的各行或某幾行的行首或行尾加一些字串。 
---- vi file 
---- :3,$s/^/some string /
在檔案的第一行至最後一行的行首插入「some string」 
---- :%s/$/some string/g 在整個檔案每一行的行尾新增「some string」 
---- :%s/string1/string2/g 在整個檔案中替換「string1」「string2」 
---- :3,7s/string1/string2/ 僅替換檔案中的第3行到第7行中的「string1」「string2」 
---- 注意: 其中ssubstitute%表示所有行,g表示global 

---- 5.同時編輯2個檔案,拷貝一個檔案中的文字並貼上到另一個檔案中。 
---- vi file1 file2 
---- yy
在檔案1的遊標處拷貝所在行 
---- :n 切換到檔案2 (n=next) 
---- p 在檔案2的遊標所在處貼上所拷貝的行 
---- :n 切換回檔案

---- 6.替換檔案中的路徑。 
---- 使用命令「:%s#/usr/bin#/bin#g」可以把檔案中所有路徑/usr/bin換成/bin。也可以使用命令「:%s//usr/bin//bin/g」實現,其中「」是跳脫字元,表明其後的「/」字元是具有實際意義的字元,不是分隔符。

 

全部刪除命令

https://blog.csdn.net/z_qifa/article/details/74202581

 

遊標到首行開頭位置直接敲鍵盤gg,然後輸入:.,$d 一回車就全沒了
直接敲鍵盤gg,然後敲dG,一定要連貫,然後就全沒了
cat /dev/null > 要清空的檔案
echo "" > 要清空的檔案
>要清空的檔案

這幾個命令雖然是很方便,但是要謹慎使用,避免清空重要檔案。

全部刪除:按esc後,然後dG
全部複製:按esc後,然後ggyG
全選高亮顯示:按esc後,然後ggvG或者ggVG
介紹一下 vim. vi unix/linux 下極爲普遍的一種文字編輯器, 大部分機器上都有. vi 有各種變種, 在不同的機器上常用不同的變種軟體. 其中 vim 比較好用也用得比較廣泛. vim Vi IMproved 的縮寫, 表示更好的 vi. 我個人覺得它是非常好的編輯器(爲了避免 Emacs 粉絲挑眼, 就不說最好了). 沒用過的也建議試試看, 當然 vim 對編寫文字檔案很方便好用, 比如編寫程式, html文件等等, 卻不能用來編寫 word 文件.
關於 vim 的安裝, 基本使用方法等網路上能搜出許多, 就不在這裏羅嗦了, 要是對 vim 有興趣, 那就看看這裏(中文文件): http://vcd.gro.clinux.org/
本文就說些其中比較有用, 比較常用的命令, 若能熟練運用這些命令, 那麼會發現編輯檔案很舒服.
說明:
以下的例子中 xxx 表示在命令模式下輸入 xxx 並回車
以下的例子中 :xxx 表示在擴充套件模式下輸入 xxx 並回車
小括號中的命令表示相關命令.
在編輯模式或可視模式下輸入的命令會另外註明.
1.
查詢
/xxx(?xxx) 表示在整篇文件中搜尋匹配xxx的字串, / 表示向下查詢, ? 表示向上查詢.其中xxx可以是正規表達式,關於正規式就不多說了.一般來說是區分大小寫的, 要想不區分大小寫, 那得先輸入
:set ignorecase 查詢到以後, 再輸入 n 查詢下一個匹配處, 輸入 N 反方向查詢.
*(#)
當遊標停留在某個單詞上時, 輸入這條命令表示查詢與該單詞匹配的下()一個單詞. 同樣, 再輸入 n 查詢下一個匹配處, 輸入 N 反方向查詢.
g*(g#)
此命令與上條命令相似, 只不過它不完全匹配遊標所在處的單詞, 而是匹配包含該單詞的所有字串.
gd
本命令查詢與遊標所在單詞相匹配的單詞, 並將遊標停留在文件的非註釋段中第一次出現這個單詞的地方.
%
本命令查詢與遊標所在處相匹配的反括號, 包括 () [] {}
f(F)x
本命令表示在遊標所在行進行查詢, 查詢遊標右()方第一個x字元.找到後:輸入 ; 表示繼續往下找輸入 , 表示反方向查詢
2. 快速移動遊標
vi , 移動遊標和編輯是兩件事, 正因爲區分開來, 所以可以很方便的進行遊標定位和編輯. 因此能更快一點移動遊標是很有用的.
w(e)
移動遊標到下一個單詞.
b
移動遊標到上一個單詞.
0
移動遊標到本行最開頭.
^
移動遊標到本行最開頭的字元處.
$
移動遊標到本行結尾處.
H
移動遊標到螢幕的首行.
M
移動遊標到螢幕的中間一行.
L
移動遊標到螢幕的尾行.
gg
移動遊標到文件首行.
G
移動遊標到文件尾行.
c-f (
ctrl 鍵與 f 鍵一同按下) 本命令即 page down.
c-b (
ctrl 鍵與 b 鍵一同按下, 後同) 本命令即 page up.
''
此命令相當有用, 它移動遊標到上一個標記處, 比如用 gd, * 等查詢到某個單詞後, 再輸入此命令則回到上次停留的位置.
'.
此命令相當好使, 它移動遊標到上一次的修改行.
`.
此命令相當強大, 它移動遊標到上一次的修改點.
3.
拷貝, 刪除與貼上
vi y 表示拷貝, d 表示刪除, p 表示貼上. 其中拷貝與刪除是與遊標移動命令結合的, 看幾個例子就能夠明白了.
yw
表示拷貝從當前遊標到遊標所在單詞結尾的內容.
dw
表示刪除從當前遊標到遊標所在單詞結尾的內容.
y0
表示拷貝從當前遊標到遊標所在行首的內容.
d0
表示刪除從當前遊標到遊標所在行首的內容.
y$
表示拷貝從當前遊標到遊標所在行尾的內容.
d$
表示刪除從當前遊標到遊標所在行尾的內容.
yfa
表示拷貝從當前遊標到遊標後面的第一個a字元之間的內容.
dfa
表示刪除從當前遊標到遊標後面的第一個a字元之間的內容.特殊地:
yy
表示拷貝遊標所在行.
dd
表示刪除遊標所在行.
D
表示刪除從當前遊標到遊標所在行尾的內容.
關於拷貝, 刪除和貼上的複雜用法與暫存器有關, 可以自行查詢.
4.
數位與命令
vi 中數位與命令結合往往表示重複進行此命令, 若在擴充套件模式的開頭出現則表示行號定位. :
5fx
表示查詢遊標後第 5 x 字元.
5w(e)
移動遊標到下五個單詞.
5yy
表示拷貝遊標以下 5 .
5dd
表示刪除遊標以下 5 .
y2fa
表示拷貝從當前遊標到遊標後面的第二個a字元之間的內容.
:12,24y
表示拷貝第12行到第24行之間的內容.
:12,y
表示拷貝第12行到遊標所在行之間的內容.
:,24y
表示拷貝遊標所在行到第24行之間的內容. 刪除類似.
5.
快速輸入字元
vi , 不要求你輸入每一個字元, 可以有很多種方法快速輸入一些字元.
使用 linux/unix 的同學一定有一個經驗, 在命令列下輸入命令時敲入頭幾個字元再按TAB 系統就會自動將剩下的字元補齊, 假如有多個匹配則會列印出來. 這就是著名的命令補齊(其實windows中也有檔名補齊功能). vi 中有許多的字串補齊命令, 非常方便.
c-p(c-n)
在編輯模式中, 輸入幾個字元後再輸入此命令則 vi 開始向上()
索開頭與其匹配的單詞並補齊, 不斷輸入此命令則回圈查詢. 此命令會在所有在這個 vim 程式中開啓的檔案中進行匹配.
c-x-l
在編輯模式中, 此命令快速補齊整行內容, 但是僅在本視窗中出現的文件中進行匹配.
c-x-f
在編輯模式中, 這個命令表示補齊檔名. 如輸入:
/usr/local/tom
後再輸入此命令則它會自動匹配出:
/usr/local/tomcat/
abbr
即縮寫. 這是一個宏操作, 可以在編輯模式中用一個縮寫代替另一個字串. 比如編寫java檔案的常常輸入 System.out.println, 這很是麻煩, 所以應該用縮寫來減少敲字. 可以這麼做:
:abbr sprt System.out.println
以後在輸入sprt後再輸入其他非字母符號, 它就會自動擴充套件爲System.
out.println
6.
替換
替換是 vi 的強項, 因爲可以用正規表達式來匹配字串.以下提供幾個例子.
:s/aa/bb/g
將遊標所在行出現的所有包含 aa 的字串中的 aa 替換爲 bb
:s/\<aa\>/bb/g
將遊標所在行出現的所有 aa 替換爲 bb, 僅替換 aa 這個單詞
:%s/aa/bb/g 將文件中出現的所有包含 aa 的字串中的 aa 替換爲 bb
:12,23s/aa/bb/g
將從12行到23行中出現的所有包含 aa 的字串中的 aa 替換爲 bb
:12,23s/^/#/
將從12行到23行的行首加入 # 字元
:%s= *$== 將所有行尾多餘的空格刪除
:g/^\s*$/d 將所有不包含字元(空格也不包含)的空行刪除.
7.
多檔案編輯
在一個 vim 程式中開啓很多檔案進行編輯是挺方便的.
:sp(:vsp)
檔名 vim 將分割出一個橫()向視窗, 並在該視窗中開啓新檔案. vim6.0 開始, 檔名可以是一個目錄的名稱, 這樣, vim
把該目錄開啓並顯示檔案列表, 在檔名上按回車則在本視窗開啓該檔案, 若輸入 O 則在新視窗中開啓該檔案, 輸入 ? 可以看到幫助資訊.
:e
檔名 vim 將在原視窗中開啓新的檔案, 若舊檔案編輯過, 會要求儲存.
c-w-w vim
分割了好幾個視窗怎麼辦? 輸入此命令可以將遊標回圈定位到各個視窗之中.
:ls
此命令檢視本 vim 程式已經打開了多少個檔案, 在螢幕的最下方會顯示出如下數據:
1 %a "usevim.html"
162
2 # "xxxxxx.html"
0
其中:
1
表示開啓的檔案序號, 這個序號很有用處.
%a
表示檔案代號, % 表示當前編輯的檔案,
#
表示上次編輯的檔案
"usevim.html" 表示檔名. 162 表示遊標位置.
:b
序號(代號) 此命令將指定序號(代號)的檔案在本視窗開啓, 其中的序號(代號)就是用 :ls 命令看到的.
:set diff
此命令用於比較兩個檔案, 可以用
:vsp filename 命令開啓另一個檔案, 然後在每個檔案視窗中輸入此命令,就能看到效果了.
8.
宏替換
vi 不僅可以用 abbr 來替換文字, 也可以進行命令的宏定義. 有些命令輸起來很費勁,
因此我把它們定義到 <F1>-<F12> , 這樣就很方便了.這些設定可以預先寫到 ~/.vimrc (windows 下爲 $VIM/_vimrc) , 寫進去的時候不用寫前面的冒號.
:nmap <F2> :nohls<cr>
取消被搜尋字串的高亮
:nmap <F9> <C-W>w 命令模式下轉移遊標到不同視窗
:imap <F9> <ESC><F9> 輸入模式下執行<F9>
:nmap <F12> :%s= *$==<cr>
刪除所有行尾多餘的空格.
:imap <F12> <ESC><F12>
同上
:java : (, 這裏爲什麼說 java , 因爲以下定義對其他檔案格式不起作用, 下文會說到如何實現這一點)
:nmap <F3> :comp javac<CR>:mak -d . %<CR>
此命令用 javac 編譯 java 檔案, 它會自動將遊標定位到出錯點. 不過這需要定義一個 javac.vim 檔案在 $VIM/compiler , javac.vim 裏面只有兩行字:
setlocal makeprg=javac
setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
:nmap <F4> :comp ant<CR>:mak<CR>

此命令用 ant 編譯 java 檔案, 它會自動將遊標定位到出錯點. 一般來說, 安裝vim 後已經有了compiler/ant.vim檔案, 因此這個命令可以直接使用. 但是需要在當前目錄下有 build.xml 檔案, 當然還必須安裝 ant 才行.
:nmap <F5> :cl<CR>
此命令用於檢視所有的編譯錯誤.
:imap <F5> <ESC><F5>
:nmap <F6> :cc<CR>
此命令用於檢視當前的編譯錯誤.
:imap <F6> <ESC><F6>
:nmap <F7> :cn<CR>
此命令用於跳到下一個出錯位置.
:imap <F7> <ESC><F7>
:nmap <F8> :cp<CR>
此命令用於跳到上一個出錯位置.
:imap <F8> <ESC><F8>
:nmap <F11> :JavaBrowser<cr>

此命令用於在視窗左部分割出一個新視窗, 裏面的內容是 java 的資源樹, 包括本檔案中出現的類, 類的成員變數及成員方法, 就好像 JCreator 表現的那樣.在這個視窗中輸入 ? 會看到幫助. 嘿嘿, 很好用, 不過需要 ctags 支援.
:imap <F11> <ESC><F11>
9. TAB
TAB
就是製表符, 單獨拿出來做一節是因爲這個東西確實很有用.
<<
輸入此命令則遊標所在行向左移動一個 tab.
>>
輸入此命令則遊標所在行向右移動一個 tab.
5>>
輸入此命令則遊標後 5 行向右移動一個 tab.
:12,24>
此命令將12行到14行的數據都向右移動一個 tab.
:12,24>>
此命令將12行到14行的數據都向右移動兩個 tab.
那麼如何定義 tab 的大小呢? 有人願意使用 8 個空格位, 有人用4, 有的用2.有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 沒關係, vim 能幫助你.以下的設定一般也都先寫入組態檔中, 免得老敲.
:set shiftwidth=4
設定自動縮排 4 個空格, 當然要設自動縮排先.
:set sts=4
即設定 softtabstop 4. 輸入 tab 後就跳了 4 .
:set tabstop=4
實際的 tab 即爲 4 個空格, 而不是預設的 8 .
:set expandtab
在輸入 tab , vim 用恰當的空格來填充這個 tab.
10. autocmd

這個命令十分的強大, 可以用這個命令實現對不同的檔案格式應用不同的設定; 可以在新建檔案時自動新增上版權宣告等等. 這些命令一般定義在 ~/.vimrc 這樣的組態檔裏面. 由於他很強大, 所以我不能給出很具體的說明, 只能舉幾個例子, 詳細的請看幫助.
:autocmd!
刪除所有之前的自動命令.
autocmd FileType java source ~/.vim/files/java.vim
autocmd FileType java source ~/.vim/files/jcommenter.vim

以上兩條命令讓我在開啓 java 檔案時才應用後面提到的兩個組態檔.
autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel

以上這條命令讓我在新建 java 檔案時自動加入 java.skel 檔案的內容.
autocmd BufNewFile *.java normal gnp

以上這條命令讓我在新建 java 檔案時自動執行 gnp 命令, 這個命令進行一些特殊化處理, 比如將新 java 檔案中的 __date__ 替換成今天的日期什麼的.
11.
常用指令碼
vim.sf.net 你可以發現很多指令碼(script), 這些指令碼常常有讓你意想不到的作用.
我常用的有:
jcommenter.vim
自動加入 javadoc 風格的註釋.
JBrowser.vim
類資源瀏覽. C, C++ 等可以用 Tlist
還有許多有用的, 比如 checkstyle.vim 可以檢驗你的程式設計風格, jad.vim 可以直接反編譯 .class 檔案等等.
12.
常用設定
~/.vimrc 組態檔中你常常需要一些個性化設定. 比如上面寫的一些宏定義, 一些
autocmd 定義等等. 比如:
set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc

這樣在vim中開啓檔案時, tab 鍵補齊檔名時它會忽略上述檔案.
set nu
顯示行號
set ai 設定自動縮排
map Y y$ Y D 一樣, 要不然 Y 的本意和 yy 一樣.
13.
其他
還有許多有意思的命令, 記錄在這裏免得忘記.
.
重複上次編輯命令.
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
在行首插入行號
:runtime! syntax/2html.vim 轉換 txt html, 會按照你的
顏色設定來轉
支援Java
對標籤跳躍的支援
標籤是Java的識別符號,它們可以是包裝名、類名、方法名,或者是欄位名。在你的程式碼裡建立一個所有標籤的大型索引,能夠讓你使用單個按鍵就跳躍到任何類、方法或者欄位的定義上。這些索引檔案都是使用ctags程式建立的,後者在vim的發行版裡都有。Ctags會獲取Java原始檔或者包含有Java原始碼的目錄的列表,從中提取識別符號的資訊,再生成所vi需要的用於跳躍到標籤的排序索引。下面 下麪一行程式碼是ctags呼叫的一個例子,只要JAVA_HOME變數被正確地定義,它會生成一個包含有專案原始碼裡所有識別符號的標籤檔案,Sun核心庫原始碼也是如此:
ctags -f ~/.tags -R ~/myprojects/src $JAVA_HOME/src
一旦標籤索引建立好了,你所需要做的只是告訴vi要在哪裏找到它。這一步是通過將set
tags=~/.tags
新增到你的~/.vimrc檔案裏實現的。有了可用的標籤索引檔案,而且vi也知道了要到哪裏去找到它,
你現在就可以通過按[CTRL]]來跳躍到任何識別符號上了。儘管這對於跳躍到你已經定義的方法、類和你自己編寫的欄位上很有用,但是如果你將Java核心類庫加到你的標籤索引裡將會更加有用。現在,只用簡單地對任何核心類庫的類或者方法按[Ctrl] ],你就會跳躍到它完全使用javadoc所編寫成的定義。.
標籤名的填充
雖然跳躍到類、方法和欄位定義所在的位置對於檢視其javadoc以及檢查其內容是有很用處的,但是更常見的情況是,你只是需要檢查一個關鍵字的定義。在大多數IDE裡,這一點是通過輸入關鍵字完成的。但是,如果你已經將你的標籤檔案像前面一部分所講的那樣設定了,那麼在vi裡填入關鍵字就只是一個導向性的設定了。
set complete=.,w,b,u,t,I這一行放到你的~/.vimrc檔案裡,能夠讓你在插入模式下通過按[Ctrl]N自動地將任何類、方法或者欄位名填滿。連續按[Ctrl]N將移動到下一個相匹配的地方。當你看到你想要找的標籤時,只用繼續輸入你原始碼剩下的部分就行了。你可以在vimWeb網站上找到其他關於標籤名填充的提示,包括使用Tab鍵來進行填充。方法的摺疊好的實踐經驗告訴我們:你應該保持類的短小和簡單,因爲程式複雜性表現在類的層次性上,而不是500行的方法上。不幸的是,有些類已經脫離了控制,變得事實上無法移動操作了。IDE常常會在左邊一個狹窄的框體提供一個列出了內容裡方法的表格,以此來減輕開發人員檢視冗長原始碼的困難。與之相對的是,vi提供了一種它叫做方法摺疊(methodfolding的可摺疊程式塊。摺疊允許你隱藏被縮排過的(indented)程式碼塊開頭和結尾之間的所有程式碼。要啓用摺疊,就要把set foldmethod=indent加到你的~/vimrc裡。一旦方法的摺疊被啓用,你就可以使用:setfoldlevel=0來極大地精簡一個Java的原始檔。如果將摺疊的層數設定爲零,那麼你就是在告訴vi只顯示完全沒有被縮排的命令列,而後者在大多數Java原始檔裡代表着包裝、匯入,以及類或者介面的定義行。設定foldlevel=1就是告訴vi說:除了沒有被縮排的命令列,只縮排過一次的命令列也應該被顯示,它們包括方法的簽名以及其他一些不多的內容。要開啓一個摺疊夾並檢視某個方法所隱藏的內容,你就要在被摺疊的命令列上輸入zO
通過設定foldlevel就能夠很輕易地開啓或者取消方法的摺疊。我喜歡在偵錯的時候使用它,但是不喜歡在編寫新程式碼的時候使用它。你要自己來決定它應該如何去適應你的工作方式。
IDE不僅僅只是用於編輯;它們還是編譯環境。Vi在不需要使用外部編譯器和剖析結果資訊上的工作做得非常好。現在很多Java的專案都將易於編寫指令碼的Ant作爲一個建立環境。我沒有向.vimrc檔案裡載入很多Ant專用的設定,而是單獨建立了一個做作vimAnt指令碼,見Listing B
這個指令碼呼叫了一個帶有幾個參數的Ant可執行檔案,然後對輸出進行過濾,讓其只包含編譯器輸出。你現在幾乎就準備好從vi裡呼叫Ant了。你只需要將Listing C裡的命令列加到你的~/.vimrc檔案裡。這些命令列告訴vi要呼叫你所建立的vimAnt指令碼,並提示它如何剖析Antjikes輸出。在你的系統路徑下有了vimAnt指令碼之後,你現在就可以使用:make命令來初始化編譯了。當前目錄及其所有的父目錄都會被搜尋,以尋找一個build.xml檔案,這個檔案的類物件會被呼叫。錯誤輸出會被vi自動地剖析。
一旦你在vi裡進行了帶有錯誤的編譯,你就可以使用快速修復(quick fix)模式來迅速地到達錯誤地點,進行及時的修補。:cn命令會把你帶到下一個出錯地點,而不考慮它在什麼檔案裡。:cc命令會向你顯示當前錯誤的編譯器輸出資訊;而:cl會生成一個列有專案所有錯誤的列表,以供瀏覽這些錯誤。修補好你的錯誤,你就離成功的編譯只有一:make之遙了。

檢視進程,kill進程:

  1. ps 命令用於檢視當前正在執行的進程。
    grep 是搜尋
    例如: ps -ef | grep java
    表示檢視所有進程裡 CMD java 的進程資訊
    2ps -aux | grep java
    -aux
    顯示所有狀態
    ps
    3. kill
    命令用於終止進程
    例如: kill -9 [PID]
    -9
    表示強迫進程立即停止
    通常用 ps 檢視進程 PID ,用 kill 命令終止進程
  2. 看埠:直接使用 netstat   -anp   |   grep  portno