- 论坛徽章:
- 0
|
本帖最后由 haide1014 于 2014-07-07 17:53 编辑
1、关于ls命令
ls命令列出目录下的内容
[root@ 51itstudy.com ~]# ls
anaconda-ks.cfg install.log test
加上-s参数列出内容的同时列出该文件或目录的大小
[root@ 51itstudy.com ~]# ls -s
8 anaconda-ks.cfg 36 install.log 32 test
加上-h参数将会显示出文件大小的单位
[root@ 51itstudy.com ~]# ls -sh
8.0K anaconda-ks.cfg 36K install.log 32K test
-l参数显示该目录下的详细信息
[root@ 51itstudy.com ~]# ls -lh //该命令可简写为ll -h
-rw——- 1 root root 1.5K Nov 5 16:28 anaconda-ks.cfg
-rw-r–r– 1 root root 32K Nov 5 16:27 install.log
-rw-r–r– 1 root root 32K Nov 6 17:37 test
注:根据上面的两个命令可以看到,install.log用ls -s查看时大小是36K,而用ll -h查看时大小是32K,这是因为ll -h命令查看的是实际文件所占有的大小,而ls -h查看的是磁盘非配的大小
2、使用stat 命令列出目录或文件的详细信息
[root@ 51itstudy.com ~]# stat install.log
File: `install.log'
Size: 32062 Blocks: 72 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 5898242 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-11-06 17:37:03.000000000 +0800
Modify: 2013-11-05 16:27:52.000000000 +0800
Change: 2013-11-05 16:28:19.000000000 +0800
ls排序的问题
ls默认状态下是按照文件目录的首字母排序
-t : 按照文件最后的修改时间排序
-u : 按照文件的最后访问时间排序
-c : 按照文件的最后inode改变时间排序
比如要查看当前目录下最新改变的文件或目录:
[root@ 51itstudy.com ~]# ls -u | head -1
Desktop
列出最近改变时间排序的文件的详细信息
[root@ 51itstudy.com etc]# ls -l `ls -u | head -1`
-rw-r–r– 1 root root 889 Dec 12 19:37 group
列出目录信息:
[root@ 51itstudy.com /]# ls -ld u01
drwxr-xr-x 6 oracle oinstall 4096 Dec 4 19:44 u01
文件类型标识符:
* 可执行文件
/ 目录文件
= Socket文件
@ 符号链接文件
| 管道文件
使用-F参数可以列出文件的标识符
[root@ 51itstudy.com db_1]# ls -F
assistants/ install.platform oc4j/ rdbms/
bin/ inventory/ odbc/ relnotes/
cdata/ javavm/ olap/ root.sh*
cfgtoollogs/ jdbc/ OPatch/ root.sh.old*
3、sort命令
sort命令可以完成多类别排序
将当前目录下的文件按照大小排序:
[root@ 51itstudy.com ~]# du -k *
8 anaconda-ks.cfg
4 Desktop
36 install.log
8 install.log.syslog
32 test
[root@ 51itstudy.com ~]# du -k * | sort -n
4 Desktop
8 anaconda-ks.cfg
8 install.log.syslog
32 test
36 install.log
按照指定的列排序
查看当前目下下的文件信息并按照第六列的信息以数字排序
[root@ 51itstudy.com ~]# ll -s | sort -n -k 6
8 -rw——- 1 root root 1482 Nov 5 16:28 anaconda-ks.cfg
8 -rw-r–r– 1 root root 3995 Nov 5 16:26 install.log.syslog
4 drwxr-xr-x 2 root root 4096 Nov 6 00:03 Desktop
36 -rw-r–r– 1 root root 32062 Nov 5 16:27 install.log
32 -rw-r–r– 1 root root 32063 Nov 6 17:37 test
注:RedHat4以后再没有sort +4这样的格式,取而代之的是sort -k 4
也可加入-r参数来实现逆向排序
[root@ 51itstudy.com ~]# ll -s | sort -n -k 6 -r
32 -rw-r–r– 1 root root 32063 Nov 6 17:37 test
36 -rw-r–r– 1 root root 32062 Nov 5 16:27 install.log
4 drwxr-xr-x 2 root root 4096 Nov 6 00:03 Desktop
8 -rw-r–r– 1 root root 3995 Nov 5 16:26 install.log.syslog
8 -rw——- 1 root root 1482 Nov 5 16:28 anaconda-ks.cfg
加入tail来选择输出最后的几行
[root@ 51itstudy.com ~]# ll -s | sort -n -k 6 -r | tail -3
8 -rw-r–r– 1 root root 3995 Nov 5 16:26 install.log.syslog
8 -rw——- 1 root root 1482 Nov 5 16:28 anaconda-ks.cfg
total 88
5、head和tail命令
head -n和tail -n分别查看文件的前几行和后几行记录,不加参数默认的是10行
[root@ 51itstudy.com ~]# cat number
1
2
3
4
5
[root@ 51itstudy.com ~]# tail -2 number
4
5
[root@ 51itstudy.com ~]# head -2 number
1
2
-n 参数后面跟 +n(数字) 用来显示第n行前(head)或第n行后(tail)的所有数据结合两者可以实现显示第n-m行的数据
如显示第2-5行数据的显示
[root@ 51itstudy.com ~]# head -n +5 number | tail -n +2
2
3
4
5
tail -f 动态刷新木文件的后十行数据
[root@ 51itstudy.com ~]# tail -f number
1
2
3
4
5
6、Find查找命令
查找当前目录下名为number的文件
[root@ 51itstudy.com ~]# find . -name number
./number
查找当前目录下num开头的文件
[root@ 51itstudy.com ~]# find . -name 'num*'
./number
查找当前目录下test001,test002文件
[root@ 51itstudy.com ~]# find . -name ’test00[1-2]'
./test001
./test002
不区分大小写来查找Test001[1-2]或test00[1-2]'
[root@ 51itstudy.com ~]# find . -iname ’test00[1-2]'
./test001
./Test002
./Test001
./test002
查找最近连天修改过的文件
[root@ 51itstudy.com linux]# find . -mtime -2
.
./test001
./Test003
./Test002
./Test001
./test003
./test002
查找两天之前修改过的文件
[root@ 51itstudy.com ~]# find . -mtime +2
./.gnome
./.gnome/gnome-vfs
./.dmrc
./.gnome2_private
./.Trash
./.bashrc
./install.log.syslog
把mtime改成ctime:按照改变时间查找 atime按照访问时间查找
也可以把mtime,ctime,atime改成mmin,cmin,amin来按照分钟改变查找
[root@ 51itstudy.com linux]# find . -mmin -10
.
./test001
./Test003
./Test002
./Test001
-maxdepth定义递归查询的级数
[root@ 51itstudy.com ~]# find . -maxdepth 1 -iname ’test00[1-2]'
./test001
./Test002
./Test001
./test002
[root@ 51itstudy.com ~]# find . -iname ’test00[1-2]'
./linux/test001
./linux/Test002
./linux/Test001
./linux/test002
./test001
./Test002
./Test001
./test002
查找当前目录下大于10k的文件
[root@ 51itstudy.com ~]# find . -size +10k
./.bash_history
./test
./install.log
./.gconfd/saved_state
./.gnome2/yelp.d/omfindex.xml
./.gnome2/yelp.d/manindex.xml
./.gnome2/yelp.d/sk-content-list.last
./.gstreamer-0.10/registry.i686.bin
查找当前目录下oracle用户的文件,递归深度为2
[root@ 51itstudy.com home]# find . -maxdepth 2 -user oracle
./oracle
./oracle/.sqlplus_history
./oracle/hot_backup.sh
./oracle/.gnome2_private
./oracle/rman_full_backup.sh.bak
./oracle/.bashrc
./oracle/log
显示当前目录下文件所属组是oinstall的文件,深度为二,只显示出前两个文件的详细信息
[root@ 51itstudy.com home]# ls -l `find . -maxdepth 2 -group oinstall`|head -2
-rw——- 1 oracle oinstall 8502 Dec 7 14:37 ./oracle/.bash_history
-rw-r–r– 1 oracle oinstall 33 Nov 6 16:09 ./oracle/.bash_logout
查找当前目录下的所有目录:
[root@ 51itstudy.com ~]# find . -maxdepth 1 -type d
.
./linux
./.gnome
./.gnome2_private
grep命令用来过滤信息
测试文件如下:
[root@ 51itstudy.com ~]# cat number
1 number1
2 number2
3 number3
4 number3
5 number5
显示number中含有2的行:
[root@ 51itstudy.com ~]# grep 2 number
2 number2
查看/home/oracle/.bash_profile中的注释信息
[root@ 51itstudy.com oracle]# grep "#" .bash_profile
# .bash_profile
# Get the aliases and functions
# User specific environment and startup programs
查询.bash_profile中含有export或alias的行
[root@ 51itstudy.com oracle]# grep "export\|alias" .bash_profile
# Get the aliases and functions
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib
alias sqlplus=' rlwrap sqlplus'
alias rman=' rlwrap rman'
使用egrep完成上面的题目
[root@ 51itstudy.com oracle]# egrep "export|alias" .bash_profile
# Get the aliases and functions
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib
alias sqlplus=' rlwrap sqlplus'
alias rman=' rlwrap rman'
-i参数用来忽略大小写
[root@ 51itstudy.com ~]# grep NUMBER number
[root@ 51itstudy.com ~]# grep -i NUMBER number
1 number1
2 number2
3 number3
4 number3
5 number5
-v 参数查找不包括某个字符的行
[root@ 51itstudy.com ~]# grep -i NUMBER number | grep -v 5
1 number1
2 number2
3 number3
4 number3
-n 参数用来标记行号
[root@ 51itstudy.com ~]# grep -i NUMBER number | grep -v 5 -n
1:1 number1
2:2 number2
3:3 number3
4:4 number3
过滤掉空行和过滤行:
[root@ 51itstudy.com ~]# cat number -n
1 1 number1
2 2 number2
3
4 3 number3
5
6 4 number3
7 5 number5
8 # This is a test file
[root@ 51itstudy.com ~]# grep -n -v '^$' number | grep -v '#'
1:1 number1
2:2 number2
4:3 number3
6:4 number3
7:5 number5
7、cut命令用来选取指定列
[root@ 51itstudy.com ~]# cat number
1 :number1
2 :number2
3 :number3
4 :number3
5 :number5
# This is a test file
[root@ 51itstudy.com ~]# cat number | grep -v "#" | grep -v "^$" | cut -d ":" -f2
number1
number2
number3
number3
number5
上面的命令等于是在grep的基础上,去除注释和空行,以:为分隔符,显示第二列
只显示当前目录下文件名和创建时间
[root@ 51itstudy.com ~]# ll | cut -c 37-
16:28 anaconda-ks.cfg
00:03 Desktop
16:27 install.log
16:26 install.log.syslog
10:53 linux
11:33 number
17:37 test
10:49 test001
10:51 Test001
10:49 test002
10:51 Test002
10:49 test003
10:51 Test003
10:49 test004
-d参数用来删除指定的字符
[root@ 51itstudy.com ~]# df |grep -v Filesystem | awk '{ print $5 }'
/
13%
0%
[root@ 51itstudy.com ~]# df |grep -v Filesystem | awk '{ print $5 }'|cut -d '%' -f1
/
13
0
8、sed流编译器
打印1-3行
[root@ 51itstudy.com ~]# sed '1,3p' number
1 :number1
1 :number1
2 :number2
2 :number2
3 :number3
4 :number3
5 :number5
取消打印1-3行
[root@ 51itstudy.com ~]# sed -n '1,3p' number
1 :number1
2 :number2
删除第3行记录
[root@ 51itstudy.com ~]# cat number
1 number1
2 number2
3 number3
4 number4
5 number5
[root@ 51itstudy.com ~]# sed '3d' number
1 number1
2 number2
3 number3
4 number4
5 number5
删除最后一行
[root@ 51itstudy.com ~]# sed '$d' number
1 number1
2 number2
3 number3
4 number4
5 number5
删除第三行到最后一行
[root@ 51itstudy.com ~]# sed '3,$d' number
1 number1
2 number2
删除包含number2的行
[root@ 51itstudy.com ~]# sed '/number2/d' number
1 number1
3 number3
4 number4
5 number5
Hello
9、awk生成数据
[root@ 51itstudy.com ~]# cat number
1 number1
2 number2
3 number3
4 number4
5 number5
Hello
查找包含number2的行
[root@ 51itstudy.com ~]# awk '/number2/' number
2 number2
匹配第二列中数据包含number2的数据
[root@ 51itstudy.com ~]# awk '$2 ~ /number2/' number
2 number2
$2匹配表示第二列数据,~为匹配符
打印number中第一列的内容
[root@ 51itstudy.com ~]# awk '{print $1}' number
1
2
3
4
5
Hello
-F参数指定分隔符
打印passwd中的第一列的最后十名用户名信息
[root@ 51itstudy.com ~]# awk -F: '{print $1}' /etc/passwd | tail -10
sabayon
test2
ldap
ais
test1
oracle
admin
user01
user02
xtt
使用cut也能达到此效果
[root@ 51itstudy.com ~]# cut -d: -f1 /etc/passwd|tail -10
sabayon
test2
ldap
ais
test1
oracle
admin
user01
user02
xtt
简单的邮件:
[root@ 51itstudy.com ~]# service sendmail status
sendmail (pid 3845) is running…
[root@ 51itstudy.com ~]# hostname xue.com
[root@ 51itstudy.com ~]# hostname
xue.com
[root@xue ~]# mail root
Subject: Hello
[root@xue ~]# mail root
Subject: Hello
Hello,Admin
Bye
Cc:
10、自动化作业:
使用corn命令完成自动化作业
查看服务是否正常启动
[root@xue ~]# service crond status
crond (pid 3871) is running…
使用corntab命令下的三个参数:-l,-e,-r分别为产看,编译和删除自动化任务
自动化任务的语法很简单:
* * * * 0 df -h >> /var/log/system.log
其中:前面的五个列分别表示:分,时,日,月,星期;若为*表示不适用该时间格式进行计划任务,若需要多个时间段,可用,分开
比如上面的命令表示每周日的时候查看一下系统信息,并追加入system.log
每周的工作日,每个十五分钟执行一个备份脚本:
0,15,30,45 * * * 0 /home/backuo/cold_bak.sh
执行计划在/var/spool/cron下可以找到
[root@xue cron]# pwd
/var/spool/cron
[root@xue cron]# ls
root
[root@xue cron]# cat root
0,15,30,45 * * * 0 /home/backup/cold_bak.sh
或者直接用corntab -l命令查看
[root@ 51itstudy.com ~]# crontab -l
0,15,30,45 * * * 0 /home/backup/cold_bak.sh
11、实验at命令完成自动作业
[root@xue cron]# at *:15
syntax error. Last token seen: *
Garbled time
[root@xue cron]# at 0:15
at> find / -name "passwd"
at> <EOT>
job 1 at 2013-12-17 00:15
改命令意思是在次日凌晨15分执行查找passwd文件路径的命令
at -l查看执行计划
[root@xue cron]# at -l
1 2013-12-17 00:15 a root
atrm 计划编号 删除指定计划
[root@xue cron]# at -l
1 2013-12-17 00:15 a root
[root@xue cron]# atrm 1
[root@xue cron]# at -l
磁盘分区:
[root@redhat6-3 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xce359e4e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0×0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1): (回车,默认将所有空间分配给第一个主分区)
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):
Using default value 261
Command (m for help): t(修改磁盘格式为LVM)
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
再次查看磁盘情况
[root@redhat6-3 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0×00085274
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2611 20458496 8e Linux LVM
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xce359e4e
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM
12、tar命令解压压缩:
tar zcvf 创建压缩文件
tar [-cxtzjvfpPN] 文件与目录 ….
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令
-t :查看 tarfile 里面的文件
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程
-f :使用档名,请留意,在 f 之后要立即接档名
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file
如果加 j 参数,则以 .tar.bz2 来作为附档名啊
如把root目录下的内容全部压缩成root.tar.gz
[root@xue ~]# tar zcvf ./root.tar.gz ./*
解压[root@xue ~]# tar zcvf ./root.tar.gz ./*
解压root.tar.gz文件
[root@xue ~]# mkdir root
[root@xue ~]# tar zxvf root.tar.gz root/
root@xue ~]# cd /root/
[root@xue ~]# ls
anaconda-ks.cfg install.log number test test002 Test003
dead.letter install.log.syslog root test001 Test002 test004
Desktop linux root.tar.gz Test001 test003
13、I/O重定向:
输出重定向>(创建)或>>(追加)
[root@xue ~]# echo "Hello" > Hello
[root@xue ~]# cat Hello
Hello
[root@xue ~]# echo "Hello" >> Hello
[root@xue ~]# echo "Hello" >> Hello
[root@xue ~]# cat Hello
Hello
Hello
Hello
使用>&1命令。将stderr和stdout也导入到stdin指定的文件中,及若命令错误,也将重定向到指定文件
如:将TEST命令的错误信息重定向至Hello
[root@xue ~]# TEST
-bash: TEST: command not found
[root@xue ~]# TEST > Hello 2>&1
[root@xue ~]# cat Hello
-bash: TEST: command not found
输入重定向:
输入重定向指的是将输入的内容重后面的文件中获取
如:
[root@xue ~]# cat < Hello
-bash: TEST: command not found
转自:http://www.51itstudy.com/10109.html |
|