linux常用命令之bash 入门指南

1 什么是Bash 什么是Shell

  Bash 是 GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell。

  Shell 是 *nix提供给用户使用的界面。

  一个操作系统的底层是独立运行的,用户界面和底层分开,可以最大限度的保证系统稳定。Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户。

  Bash Shell一般不需要自己安装,在安装发行版的同时都会安装好。

  Shell的存在是和登陆相关的,从用户名密码验证通过以后,Shell就启动了,知道你退出,Shell就结束了运行。

  除了Bash Shell之外,还有很多其他的Shell。

  2 Linux的文件、目录、程序

  Linux的文件、目录、程序是使用bash操作的主要对象。有必要事先了解一下文件、目录和程序的概念

  文件

  Linux中一切都是文件、普通的文件、设备文件、管道也是文件的形式。一切操作都是文件为基础的。DOS操作系统早期也是模拟这种方式,不过有很多漏洞(比如C:\con\con会蓝屏)

  文件是有属性的,有一个属性表示这个文件是不是目录,有3个属性表示这个文件的访问权限,还有一些表示从这个文件派生出的文件属性。

  目录

  目录是管理文件的手段,不同的文件要分门别类才容易找到。严格的说,目录也是一种文件,是具有目录属性的文件。

  文件和目录都有所有者和所有组。叫UID和GID,对应的,有3个属性表示相应的权限。后面写到ls和chmod有详细地说明。

  程序

  程序是可以执行的代码,有些是直接交给内核或者CPU执行的,有些是通过其他程序执行的(解释脚本),可以运行的程序都有一个可执行的属性。

  3 简单的命令 ls cp mv mkdir rm chown chmod

  前面说了一些枯燥的概念,现在趁着看官还没有烦躁,开始实际操作的例子。

  QUOTE:

  Last login: Mon Aug 14 21:52:47 2006 from 61.149.202.143

  [root@CERNET ~]#

  这就是bash登陆后的样子。#井号是root特权用户的提示符号,一般用户提示符是$符号。

  现在输入ls,列出当前目录的内容

  QUOTE:

  [root@CERNET ~]# ls

  anaconda-ks.cfg install.log.syslog log4cplus-1.0.2 MceMonitor-install-files.tgz.md5sum vmstat_monitor

  Ice-3.0.1 jwsmtp-1.32.11 log4cplus-1.0.2.tar.gz memcached-1.1.12 wuhan.sh

  Ice-3.0.1.tar.gz jwsmtp-1.32.11.tar.gz login_keepalived memcached-1.1.12.tar.gz

  ids.sh libevent-0.8 MceMonitor sar.log

  install.log libevent-0.8.tar.gz MceMonitor-install-files.tgz tmp

  再输入cd /,把当前目录改为根目录

  QUOTE:

  [root@CERNET /]# ls

  bin data etc home lib media mnt proc sbin srv tmp var

  boot dev eth1.route initrd lost+found misc opt root selinux sys usr

  相信你的Linux一定是有颜色的,呵呵。

  现在回到原来的目录(刚登陆的时候那个目录叫用户主目录),然后新建一个目录叫aaa。

  QUOTE:

  [root@CERNET /]# cd ~

  [root@CERNET ~]# mkdir aaa

  [root@CERNET aaa]#

  ~表示用户的主目录,mkdir是建立目录的命令,还可以这样用

  mkdir {aaa,bbb,ccc,ddd} 会同时建立4个目录

  mkdir -p ~/aaa/bbb/ccc/ddd/eee 这样在前面目录不存在的时候,会自动建立。

在当前目录下有这样的文件,复制和移动是这样的:

  QUOTE:

  [root@CERNET /]# ls

  a.log

  [root@CERNET /]# cp a.log b.log

  [root@CERNET /]# ls

  a.log b.log

  [root@CERNET /]# rm a.log

  [root@CERNET /]# ls

  b.log

  [root@CERNET /]# mkdir dir1

  [root@CERNET /]# ls

  b.log dir1

  [root@CERNET /]# rm -r dir1

  b.log

  cp是复制文件,rm是删除文件。cp和rm都有-r的参数,可以复制目录或者删除目录。

  删除时有可能会提示你每个文件都按y确认,可以用-f参数不让它提示。

  -r -f这样的参数可以写成-rf。也就是

  QUOTE:

  [root@CERNET /]# rm -rf dir1

  最后看一下设置权限的两个命令,这通常会给初学者造成很大的困扰,遇到权限不足错误的时候,应该看一下是不是权限的问题。

  先列出完整的文件列表:

  QUOTE:

  [root@CERNET /]# ll

  total 176

  drwxr-xr-x 2 root root 4096 Apr 12 04:02 bin

  drwxr-xr-x 3 root root 4096 Apr 3 15:47 boot

  drwxr-xr-x 4 root root 4096 Apr 27 00:34 data

  drwxr-xr-x 8 root root 5180 Jun 27 13:51 dev

  drwxr-xr-x 76 root root 12288 Aug 13 04:03 etc

  -rw-r--r-- 1 root root 176 Apr 4 14:17 eth1.route

  drwxr-xr-x 2 root root 4096 Aug 13 2004 home

  drwxr-xr-x 2 root root 4096 Aug 13 2004 initrd

  drwxr-xr-x 11 root root 4096 Apr 4 04:04 lib

  drwx------ 2 root root 16384 Apr 3 23:45 lost+found

  drwxr-xr-x 2 root root 4096 Aug 13 2004 media

  drwxr-xr-x 2 root root 4096 Dec 2 2005 misc

  drwxr-xr-x 2 root root 4096 Aug 13 2004 mnt

  drwxr-xr-x 5 root root 4096 Aug 9 00:27 opt

  dr-xr-xr-x 191 root root 0 Jun 27 21:50 proc

  drwxr-x--- 12 root root 4096 Aug 12 09:02 root

  drwxr-xr-x 2 root root 12288 Apr 4 04:05 sbin

  drwxr-xr-x 2 root root 4096 Apr 3 15:46 selinux

  drwxr-xr-x 2 root root 4096 Aug 13 2004 srv

  drwxr-xr-x 9 root root 0 Jun 27 21:50 sys

  drwxrwxrwt 4 root root 4096 Aug 14 22:16 tmp

  drwxr-xr-x 14 root root 4096 Apr 3 15:47 usr

  drwxr-xr-x 22 root root 4096 May 17 16:08 var

  ll命令是RedHat系列一般都有的一个别名,它代表ls -l。每一行是一个文件或者目录,就这一行说明一下:

  QUOTE:

  drwxr-xr-x 14 root root 4096 Apr 3 15:47 usr

  drwxr-xr-x 表示:目录 所有者有rwx权限 所有组有r-x权限 其他用户有r-x权限

  root root 表示:所有者是root,所有组是root。(前面的是用户,后面的是组)

  4096是大小,目录的大小和文件系统有关系,文件的话,大小就是文件真实的大小。

  现在看看修改权限:

  QUOTE:

  [root@CERNET aaa]# ls -l

  drwxr-xr-x 2 root root 4096 Apr 3 15:46 bbb

  drwxr-xr-x 2 root root 4096 Aug 13 2004 ccc

  [root@CERNET aaa]# chown ftp:ftp bbb

  [root@CERNET aaa]# ls -l

  drwxr-xr-x 2 ftp ftp 4096 Apr 3 15:46 bbb

  drwxr-xr-x 2 root root 4096 Aug 13 2004 ccc

  [root@CERNET aaa]# chmod -R 777 bbb

  drwxr-xr-x 2 ftp ftp 4096 Apr 3 15:46 bbb

  drwxrwxrwx 2 root root 4096 Aug 13 2004 ccc

4 管道 和 高级一些的命令 grep less more sed awk

  常用的命令还有很多,在后面有没见过的命令,我会随时说明。

  现在说一些主要用作配合别的命令的命令。

  管道

  配合别的文件操作的这类命令一般是这样工作的:前一个程序的输出结果,是后一个程序的输入。这样衔接起来,可以实现一个很长的串完成复杂的工作。

  *nix的设计概念就是这样的,每个工具完成很简单的工作,都使用文本做输入输出。还有就是关键的“管道”,这就可以串起来了。

  比如:

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg

  这个命令会把/var/log/dmesg显示在屏幕上。但是这个文件里面是系统的日志,非常得多,几百行一个屏幕放不下。所以这样:

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg | less

  自己动手实验看看效果吧,这个很重要。

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg | more

  也是可以分屏显示的,区别是less可以上下的滚动,more只能整屏的向后翻。

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg | grep ACPI

  这会把包含“ACPI”的行,都显示出来,不包含的不显示。这就是grep的作用。

  上面的这个结果,不用管道也可以:

  QUOTE:

  [root@CERNET log]# grep ACPI /var/log/dmesg

  grep有-v的参数,可以把不符合条件的都显示出来。自己试验一下吧。

  -c的参数可以把符合条件和行数数出来。

  awk和sed是稍复杂一些的命令,有很多高级的用法,本文只对初学者,所以只举两个例子说一下最简单的用途。

  QUOTE:

  [root@CERNET log]# cat /etc/passwd | awk -F: '{print $1}'

  这会把/etc/passwd这个文件每一行按冒号分割,输出第一个部分。

  QUOTE:

  [root@CERNET log]# sed -i 's/aaa/bbb/' test

  这会把test文件里面,所有的aaa字符替换成bbb。sed -i的含义是直接在文件里替换。没有-i的参数,它会把替换过的结果输出到屏幕上。

  *学用Linux命令有两个方面下手:一个是命令本身的参数,一个是如何把命令结合的更好。

  命令本身的参数要用帮助慢慢学,man是系统帮助命令。比如

  QUOTE:

  [root@CERNET log]# man grep

  可以显示出grep命令的帮助。有些版本的Linux这个帮助是中文的。

  至于如何结合好不同的命令,就要看自己的理解了。

5 常用的编辑器 vi nano emacs

为了把一个些常用的命令放在一起执行,可以写一个文件,把命令都放在一起,可以通过一个命令执行很多命令。
为了下一节做准备,先来学习一下编辑器。

nano最简单,类似Windows的操作方式,启动以后通过Ctrl+一个键执行一些命令。

vi有插入模式和改写模式,用Insert键操作。按ESC退出这两个模式。
冒号w可以保存文件。
冒号q可以退出。当然也可以写在一起,用:wq退出。如果要不保存退出,用:q!



emacs更适合做程序开发,因为最初是为了做成一个Shell,所以功能十分复杂。编辑之后,用Ctrl+C+X退出。

vi和emacs一直是最受争议的两个编辑器,两者都有各自的特点,各自的忠实用户。这两者的选择完全是个人喜好。
初学者从nano用起也不错,功能稍弱一些,但是至少不至于连退出都不会。

6 编写自己的脚本

好了!开始编写一个自己的bash脚本文件,执行通常的操作。
每次开机都要在桌面上点开lumaQQ,Firefox,Gaim是不是很累?
写个脚本,一起执行!

QUOTE: vi first.sh
按Insert进入插入模式,输入代码:
#!/bin/bash
PATH=~/bin/LumaQQ:${PATH}
lumaqq &
firefox &
gaim &


QUOTE: 然后按ESC键,输入:wq退出。



QUOTE: 看看文件属性:用ll first.sh
给文件加上可执行属性:用chmod +x first.sh
执行这个脚本:./first.sh



之后,lumaqq firefox gaim就都打开了!

上面的例子中有一些需要解释的:
PATH是执行程序寻找的路径,在这个路径下的程序,可以只输入名字就能运行。比如我们刚才用过的chmod,它其实就是这个文件/bin/chmod。因为PATH环境变量包括/bin,所以可以直接使用。
对于PATH中不包括的地方的程序,就要写全路径来执行,比如./first.sh就是执行当前目录下的first.sh文件。
被执行的程序都必须有可执行的权限才可以。

first.sh文件的第一行是一个标志。因为实际上电脑只能执行编译过的二进制文件,对这种用文本写的文件,需要有一个二进制文件来进行解释,然后执行。如果没有这句的话,也可以这样运行:

QUOTE: [root@localhost ~]# /bin/bash first.sh



&符号表示这个程序在后台运行,这样可以在一个脚本里并行启动多个程序。
类似的操作还有Ctrl+Z,可以把前台运行的程序放到后台休眠起来,用bg命令让它在后台继续执行,用fg命令让它回到前台。

7 自动运行crontab

Linux有一个服务叫做Crond,用来定时地完成一定的操作。
这个功能在桌面应用可能不是很多,但是依然是一个十分有趣的功能,值得了解一下。

QUOTE: [root@localhost ~]# crontab -e


可以打开一个vi编辑器,里面包含当前用户的计划表。格式是这样的:

QUOTE: 1 2 3 * * /root/second.sh > /root/second.log 2>&1 &


前面5个表示的就是运行的时间

QUOTE: 1 2 3 * *表示每月3日的2点1分 执行后面的语句
*/15 * * * * 表示每15分钟执行一次
(有的旧版本crond不支持/,就要写成0,15,45 * * * *)
1 1 * * 1 表示每周一运行(也有用0表示周一,要man crond)
一直没有变的那个*,呵呵,表示年,一般没人计划一年的事啦。



QUOTE: [root@localhost ~]# crontab -l


可以列出来当前的计划表。

上面的命令有两个地方需要说明:
>符号表示把运行的结果保存在后面的文件里。因为是自动运行嘛,根本没有一个屏幕供显示结果,所以一般在crontab里面都会保存一个运行结果。
>>符号可以用“追加”模式,将新的结果写在原有文件后面。

2>&1的意思是把错误输出也同时输出到标准输出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值