1.beginning bash
1.1 解码提示符
problem
我们必须熟悉shell展示给我们的一切,比如提示符。
solution
shell里面的命令输入提示符在不同的系统(不同的版本),不同的shell版本里有不同的表现形式。
在bournn系列的shell中提示符结尾的$通常表示用户是普通帐号,而#表示用户是root帐号,通常root帐号拥有最高的权限。
这是一个标准的shell提示符
jp@adams:~$
jp表示用户名,adams表示机器名,~表示当前的路径是用户的根目录,可以输入pwd得到准确的路径,比如是: /home/jp,$表
示这个是一个普通的用户。
我们再来看看这个提示符
jp@adams:/tmp$
这个表示用户路径变成了/tmp
discussion
shell提示符样式是可以配置的,我们需要修改PS1这个变量,另外在用普通用户登录的时候我们可以使用sudo,su去执行root
才能执行的指令(关于su,sudo的区别请参考:http://blog.chinaunix.net/u/9465/showart_184729.html)。
一般来说,root代表了系统的最高权限,但是在有些系统中存在强制访问控制系统(mandatory access control),比如NAS
的SELinux,类似这样的MAC系统可以近一步保证我们的系统安全。
1.2 想知道你在哪吗
problem
你真的知道自己在哪吗?
solution
1. 通过pwd我们可以自己在哪bash-2.03$ pwd
/tmp
2. 如果你的默认提示符没有显示你所在的问题,我们可以修改PS1
bash-2.03$ export PS1='[\u@\h \w]$ '
[jp@solaris8 /tmp]$
discussion
如果你所在的路径是一个软链接,你可以使用pwd -P得到真实的物理地址
1.3 找到你想要的命令
Problem
你想在bash下找到某个命令并执行。
Solution
试试type,which,apropos,locate,slocate,find,ls等命令。
Discussion
bash通过$PATH环境变量保存的路径去查找可以执行的命令.
type命令不仅可以从$PATH中查找命令,并且还可以查找别名,而which指令只能在$PATH路径下查找,它们都有个-a参数可以列出
所有查找到的命令.例如:
$ type which
which is hashed (/usr/bin/which)
$ type ls
ls is aliased to `ls -F -h'
$ type -a ls
ls is aliased to `ls -F -h'
ls is /bin/ls
$ which which
/usr/bin/which
我们可以通过man指令去查看命令的说明文档,有些程序也提供了内建的帮助,通常你需要在命令后面加上 h或者-help,如果你不清楚
命令的具体名称及作用,你可以用apropos查询,该命令同man -k作用一样,例如:
$ apropos music
cms (4) - Creative Music System device driver
$ man -k music
cms (4) - Creative Music System device driver
locate,slocate命令是用来查找文件的,通过一个定时任务建立索引文件,在查询时我们就能很快找到某个文件,slocate只会显示用户
拥有访问权限的结果路径,对于刚刚建立的文件来说,locate应该是找不到的,另外有些系统默认locate就是slocate的一个软链接.如果
你要执行的指令不在$PATH路径下,你可以用./command执行你的指令,因为默认情况下bash不会把你当前的工作目录添加到$PATH,这个
主要是出于安全考虑.
1.4获取文件信息
Problem
你需要获得更多的文件信息,比如它是什么?拥有者是谁,是否可以执行,有多少个链接指向这个文件,最后的修改时间是什么时候.
Solution
使用ls,stat,file,find,touch命令.
delbert@delbert-desktop:~$ ll myinitlog
rw-rw-rw 1 delbert delbert 3896 2009-07-09 09:46 myinitlog
delbert@delbert-desktop:~$ touch myinitlog
delbert@delbert-desktop:~$ ll myinitlog
rw-rw-rw 1 delbert delbert 3896 2009-07-09 17:33 myinitlog
$ ls /tmp/sample_file
/tmp/sample_file
$ ls -l /tmp/sample_file
rw-rr- 1 jp jp 0 Dec 18 15:03 /tmp/sample_file
$ stat /tmp/sample_file
File: "/tmp/sample_file"
Size: 0 Blocks: 0 IO Block: 4096 Regular File
Device: 303h/771d Inode: 2310201 Links: 1
Access: (0644/rw-rr-) Uid: ( 501/ jp) Gid: ( 501/ jp)
Access: Sun Dec 18 15:03:35 2005
Modify: Sun Dec 18 15:03:35 2005
Change: Sun Dec 18 15:03:42 2005
$ file /tmp/sample_file
/tmp/sample_file: empty
$ file -b /tmp/sample_file
empty
$ echo '#!/bin/bash -' > /tmp/sample_file
$ file /tmp/sample_file
/tmp/sample_file: Bourne-Again shell script text executable
$ file -b /tmp/sample_file
Bourne-Again shell script text executable
1.1 解码提示符
problem
我们必须熟悉shell展示给我们的一切,比如提示符。
solution
shell里面的命令输入提示符在不同的系统(不同的版本),不同的shell版本里有不同的表现形式。
在bournn系列的shell中提示符结尾的$通常表示用户是普通帐号,而#表示用户是root帐号,通常root帐号拥有最高的权限。
这是一个标准的shell提示符
jp@adams:~$
jp表示用户名,adams表示机器名,~表示当前的路径是用户的根目录,可以输入pwd得到准确的路径,比如是: /home/jp,$表
示这个是一个普通的用户。
我们再来看看这个提示符
jp@adams:/tmp$
这个表示用户路径变成了/tmp
discussion
shell提示符样式是可以配置的,我们需要修改PS1这个变量,另外在用普通用户登录的时候我们可以使用sudo,su去执行root
才能执行的指令(关于su,sudo的区别请参考:http://blog.chinaunix.net/u/9465/showart_184729.html)。
一般来说,root代表了系统的最高权限,但是在有些系统中存在强制访问控制系统(mandatory access control),比如NAS
的SELinux,类似这样的MAC系统可以近一步保证我们的系统安全。
1.2 想知道你在哪吗
problem
你真的知道自己在哪吗?
solution
1. 通过pwd我们可以自己在哪bash-2.03$ pwd
/tmp
2. 如果你的默认提示符没有显示你所在的问题,我们可以修改PS1
bash-2.03$ export PS1='[\u@\h \w]$ '
[jp@solaris8 /tmp]$
discussion
如果你所在的路径是一个软链接,你可以使用pwd -P得到真实的物理地址
1.3 找到你想要的命令
Problem
你想在bash下找到某个命令并执行。
Solution
试试type,which,apropos,locate,slocate,find,ls等命令。
Discussion
bash通过$PATH环境变量保存的路径去查找可以执行的命令.
type命令不仅可以从$PATH中查找命令,并且还可以查找别名,而which指令只能在$PATH路径下查找,它们都有个-a参数可以列出
所有查找到的命令.例如:
$ type which
which is hashed (/usr/bin/which)
$ type ls
ls is aliased to `ls -F -h'
$ type -a ls
ls is aliased to `ls -F -h'
ls is /bin/ls
$ which which
/usr/bin/which
我们可以通过man指令去查看命令的说明文档,有些程序也提供了内建的帮助,通常你需要在命令后面加上 h或者-help,如果你不清楚
命令的具体名称及作用,你可以用apropos查询,该命令同man -k作用一样,例如:
$ apropos music
cms (4) - Creative Music System device driver
$ man -k music
cms (4) - Creative Music System device driver
locate,slocate命令是用来查找文件的,通过一个定时任务建立索引文件,在查询时我们就能很快找到某个文件,slocate只会显示用户
拥有访问权限的结果路径,对于刚刚建立的文件来说,locate应该是找不到的,另外有些系统默认locate就是slocate的一个软链接.如果
你要执行的指令不在$PATH路径下,你可以用./command执行你的指令,因为默认情况下bash不会把你当前的工作目录添加到$PATH,这个
主要是出于安全考虑.
1.4获取文件信息
Problem
你需要获得更多的文件信息,比如它是什么?拥有者是谁,是否可以执行,有多少个链接指向这个文件,最后的修改时间是什么时候.
Solution
使用ls,stat,file,find,touch命令.
delbert@delbert-desktop:~$ ll myinitlog
rw-rw-rw 1 delbert delbert 3896 2009-07-09 09:46 myinitlog
delbert@delbert-desktop:~$ touch myinitlog
delbert@delbert-desktop:~$ ll myinitlog
rw-rw-rw 1 delbert delbert 3896 2009-07-09 17:33 myinitlog
$ ls /tmp/sample_file
/tmp/sample_file
$ ls -l /tmp/sample_file
rw-rr- 1 jp jp 0 Dec 18 15:03 /tmp/sample_file
$ stat /tmp/sample_file
File: "/tmp/sample_file"
Size: 0 Blocks: 0 IO Block: 4096 Regular File
Device: 303h/771d Inode: 2310201 Links: 1
Access: (0644/rw-rr-) Uid: ( 501/ jp) Gid: ( 501/ jp)
Access: Sun Dec 18 15:03:35 2005
Modify: Sun Dec 18 15:03:35 2005
Change: Sun Dec 18 15:03:42 2005
$ file /tmp/sample_file
/tmp/sample_file: empty
$ file -b /tmp/sample_file
empty
$ echo '#!/bin/bash -' > /tmp/sample_file
$ file /tmp/sample_file
/tmp/sample_file: Bourne-Again shell script text executable
$ file -b /tmp/sample_file
Bourne-Again shell script text executable