linux练习

本帖最后由 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=$PATHORACLE_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=$PATHORACLE_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

posted on 2015-11-05 14:17  静以修身!  阅读(249)  评论(0编辑  收藏  举报

导航