linux常用命令练习

ls命令

ls命令列出目录下的内容

[root@orcl2 ~]# ls

anaconda-ks.cfg  install.log  test

加上-s参数列出内容的同时列出该文件或目录的大小

[root@orcl2 ~]# ls -s

 8 anaconda-ks.cfg  36 install.log         32 test

加上-h参数将会显示出文件大小的单位

[root@orcl2 ~]# ls -sh

8.0K anaconda-ks.cfg   36K install.log          32K test

-l参数显示该目录下的详细信息

[root@orcl2 ~]# 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查看的是磁盘非配的大小

 

使用stat 命令列出目录或文件的详细信息

[root@orcl2 ~]# 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@orcl2 ~]# ls -u | head -1

Desktop

列出最近改变时间排序的文件的详细信息

[root@orcl2 etc]# ls -l `ls -u | head -1`

-rw-r--r-- 1 root root 889 Dec 12 19:37 group

列出目录信息:

[root@orcl2 /]# ls -ld u01

drwxr-xr-x 6 oracle oinstall 4096 Dec  4 19:44 u01

文件类型标识符:

* 可执行文件

/ 目录文件

= Socket文件

@ 符号链接文件

| 管道文件

使用-F参数可以列出文件的标识符

[root@orcl2 db_1]# ls -F

assistants/     install.platform  oc4j/        rdbms/

bin/          inventory/      odbc/        relnotes/

cdata/        javavm/        olap/        root.sh*

cfgtoollogs/    jdbc/          OPatch/      root.sh.old*

 

sort命令

sort命令可以完成多类别排序

将当前目录下的文件按照大小排序:

[root@orcl2 ~]# du -k *

8       anaconda-ks.cfg

4       Desktop

36      install.log

8       install.log.syslog

32      test

[root@orcl2 ~]# du -k * | sort -n

4       Desktop

8       anaconda-ks.cfg

8       install.log.syslog

32      test

36      install.log

 

按照指定的列排序

查看当前目下下的文件信息并按照第六列的信息以数字排序

[root@orcl2 ~]# 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@orcl2 ~]# 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@orcl2 ~]# 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

 

headtail命令

head -ntail -n分别查看文件的前几行和后几行记录,不加参数默认的是10

[root@orcl2 ~]# cat number 

1

2

3

4

5

[root@orcl2 ~]# tail -2 number

4

5

[root@orcl2 ~]# head -2 number 

1

2

 

-n 参数后面跟 +n(数字) 用来显示第n行前(head)或第n行后(tail)的所有数据结合两者可以实现显示第n-m行的数据

如显示第2-5行数据的显示

[root@orcl2 ~]# head -n +5 number | tail -n +2

2

3

4

5

tail -f 动态刷新木文件的后十行数据

[root@orcl2 ~]# tail -f number 

1

2

3

4

5

 

Find查找命令

 

查找当前目录下名为number的文件

[root@orcl2 ~]# find . -name number

./number

查找当前目录下num开头的文件

[root@orcl2 ~]# find . -name 'num*'

./number

查找当前目录下test001,test002文件

[root@orcl2 ~]# find . -name 'test00[1-2]'

./test001

./test002

不区分大小写来查找Test001[1-2]test00[1-2]'

[root@orcl2 ~]# find . -iname 'test00[1-2]'

./test001

./Test002

./Test001

./test002

查找最近连天修改过的文件

[root@orcl2 linux]# find . -mtime -2

.

./test001

./Test003

./Test002

./Test001

./test003

./test002

查找两天之前修改过的文件

[root@orcl2 ~]# find . -mtime +2

./.gnome

./.gnome/gnome-vfs

./.dmrc

./.gnome2_private

./.Trash

./.bashrc

./install.log.syslog

mtime改成ctime:按照改变时间查找 atime按照访问时间查找

也可以把mtimectimeatime改成mmincminamin来按照分钟改变查找

[root@orcl2 linux]# find . -mmin -10

.

./test001

./Test003

./Test002

./Test001

-maxdepth定义递归查询的级数

[root@orcl2 ~]# find . -maxdepth 1 -iname 'test00[1-2]'

./test001

./Test002

./Test001

./test002

[root@orcl2 ~]# find . -iname 'test00[1-2]'

./linux/test001

./linux/Test002

./linux/Test001

./linux/test002

./test001

./Test002

./Test001

./test002

查找当前目录下大于10k的文件

[root@orcl2 ~]# 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@orcl2 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@orcl2 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@orcl2 ~]# find . -maxdepth 1  -type d

.

./linux

./.gnome

./.gnome2_private

grep命令用来过滤信息

测试文件如下:

[root@orcl2 ~]# cat number 

1       number1

2       number2

3       number3

4       number3

5       number5

显示number含有2的行:

[root@orcl2 ~]# grep 2 number 

2       number2

查看/home/oracle/.bash_profile中的注释信息

[root@orcl2 oracle]# grep "#" .bash_profile 

# .bash_profile

# Get the aliases and functions

# User specific environment and startup programs

查询.bash_profile中含有exportalias的行

[root@orcl2 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@orcl2 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@orcl2 ~]# grep NUMBER number 

[root@orcl2 ~]# grep -i NUMBER number 

1       number1

2       number2

3       number3

4       number3

5       number5

-v 参数查找不包括某个字符的行

[root@orcl2 ~]# grep -i NUMBER number | grep -v 5 

1       number1

2       number2

3       number3

4       number3

-n 参数用来标记行号

[root@orcl2 ~]# grep -i NUMBER number | grep -v 5 -n 

1:1     number1

2:2     number2

3:3     number3

4:4     number3

过滤掉空行和过滤行:

[root@orcl2 ~]# 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@orcl2 ~]# grep -n -v '^$' number | grep -v '#' 

1:1     number1

2:2     number2

4:3     number3

6:4     number3

7:5     number5

 

cut命令用来选取指定列

[root@orcl2 ~]# cat number 

1       :number1

2       :number2

 

3       :number3

4       :number3

5       :number5

# This is a test file

[root@orcl2 ~]# cat number | grep -v "#" | grep -v "^$" | cut -d ":" -f2

number1

number2

number3

number3

number5

上面的命令等于是在grep的基础上,去除注释和空行,以:为分隔符,显示第二列

 

只显示当前目录下文件名和创建时间

[root@orcl2 ~]# 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@orcl2 ~]# df |grep -v Filesystem | awk '{ print $5 }'

/

13%

0%

[root@orcl2 ~]# df |grep -v Filesystem | awk '{ print $5 }'|cut -d '%' -f1

/

13

0

 

sed流编译器

打印1-3

[root@orcl2 ~]# sed '1,3p' number 

1       :number1

1       :number1

2       :number2

2       :number2

 

 

3       :number3

4       :number3

5       :number5

取消打印1-3

[root@orcl2 ~]# sed -n '1,3p' number 

1       :number1

2       :number2

删除第3行记录

[root@orcl2 ~]# cat number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

[root@orcl2 ~]# sed '3d' number 

1       number1

2       number2

3       number3

4       number4

5       number5

删除最后一行

[root@orcl2 ~]# sed '$d' number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

删除第三行到最后一行

[root@orcl2 ~]# sed '3,$d' number 

1       number1

2       number2

 

删除包含number2的行

[root@orcl2 ~]# sed '/number2/d' number 

1       number1

 

3       number3

4       number4

5       number5

Hello

awk生成数据

[root@orcl2 ~]# cat number 

1       number1

2       number2

 

3       number3

4       number4

5       number5

Hello

查找包含number2的行

[root@orcl2 ~]# awk '/number2/' number 

2       number2

匹配第二列中数据包含number2的数据

[root@orcl2 ~]# awk '$2 ~ /number2/' number 

2       number2

$2匹配表示第二列数据,~为匹配符

 

打印number中第一列的内容

[root@orcl2 ~]# awk '{print $1}' number 

1

2

 

3

4

5

Hello

 

-F参数指定分隔符

打印passwd中的第一列的最后十名用户名信息

[root@orcl2 ~]# awk -F: '{print $1}' /etc/passwd | tail -10

sabayon

test2

ldap

ais

test1

oracle

admin

user01

user02

xtt

使用cut也能达到此效果

[root@orcl2 ~]# cut -d: -f1 /etc/passwd|tail -10

sabayon

test2

ldap

ais

test1

oracle

admin

user01

user02

xtt

 

简单的邮件:

[root@orcl2 ~]# service sendmail status

sendmail (pid  3845) is running...

[root@orcl2 ~]# hostname xue.com

[root@orcl2 ~]# hostname

xue.com

[root@xue ~]# mail root

Subject: Hello   

[root@xue ~]# mail root

Subject: Hello   

Hello,Admin   

Bye

Cc: 

 

自动化作业:

使用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@orcl2 ~]# crontab -l

0,15,30,45 * * * 0 /home/backup/cold_bak.sh

 

实验at命令完成自动作业

[root@xue cron]# at *:15

syntax error. Last token seen: *

Garbled time

[root@xue cron]# at 0:15

at> find / -name "passwd"

at> 

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 0x0000 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: 0x00085274

 

   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

 

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

 

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 

-bash: TEST: command not found

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29320885/viewspace-1063361/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29320885/viewspace-1063361/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值