Unix

一、Shell

1、shell:字符操作系统与外部最主要的接口。它是操作系统最外面的一层。

(1)shell 管理你与操作系统之间的交互:等待你输入命令,向操作系统解释你的输入,并

且处理各种各样的操作系统的输出结果。

(2)shell 提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,

并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script 是放在

文件中的一串shell 和操作系统命令,它们可以被重复使用。本质上,shell script 是命

令行命令简单的组合到一个文件里面。

(3)Shell 基本上是一个命令解释器。

2、shell分类:

(1)Bourne shell (sh)

Bourne shell 是一个交换式的命令解释器和命令编程语言。

此系统后来发展出ksh(Korne Shell)、bash(Bourne Again Shell)、等

·Bourne Again shell(bash):

Bash的提示符号

$:代表一般身份使用者

#:代表root权限

·Korn Shell(ksh)

ksh 结合了所有的C shell 的交互式特性,并融入了Bourne shell 的语法。Korn

Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX

(2)C shell

它主要是为了让用户更容易的使用交互式功能,并把ALGOL 风格的语法结构变成了C 语

言风格。

注意:各主要操作系统下缺省的shell

·AIX 下是Korn Shell.(ksh)

·Solaris 和FreeBSD 缺省的是Bourne shell.(sh)

·Linux 是Bourne Again shell.(bash)

二、基本操作

1、登录

(1)先执行/etc/profile

(2)接着bash会检查使用者的自家目录中,是否有.bash_profile 或者.bash_login或者

.profile,若有,则会执行其中一个,执行顺序为:

·.bash_profile 最优先

·.bash_login其次

·.profile 最后

这三个档案只有在登入时,才会被bash读取

(3)用户注册信息放在/etc/password 里:

tiantian:x:200:1::/sd0905/tiantian:/bin/csh

用户名:密码占位符:uid(系统唯一标号):gid(组编号):说明信息:主目录:login shell

密码已加密形式放在/etc/shadow 文件里: Permission denied

格式:用户名:密文口令

2、几种退出:

(1)exit:退出当前shell,如果是login shell,和logout 一样.

(2)logout:中断当前连接//这个命令只能那个在login shell 里敲出来,b shell: 不支持logout

(3)ctrl+c:终止一个前台运行程序

(4)ctrl+d:结束终端输入

三、常用命令

1、passwd:改密码旧密码/新密码

2、clear:清屏

3、pwd:当前路径//以绝对路径显示

4、id:查看当前用户有效身份

5、whoami 显示登陆本机的用户信息,相当于id,但是su 之后,显示的是root

who am i 显示当前有效用户身份,比如su 改变身份后,仍然显示真正的用户

6、cd:改变当前工作目录//可以使绝对路径或相对路径

(1)~ 用户主目录

cd ~tiantian cd 到用户名tiantian 的主目录

cd ~/dir1 cd 到主目录的dir1 目录下

(2).当前目录

cd s090501 和cd ./s070801 是等价的

(3).. 父目录

cd .. 返回上层目录

(4)/ 根目录

cd / 进到根目录下

注意:cd 没有选项,转到用户主目录

7、ls 查看文件和目录

ls –l 除名称外,显示详细信息

文件类型-

拥有者权限-

同组人权限-

其他人权限硬连接数拥有者拥有组大小最后修改时间文件名

ls –a 在ls 基础上显示隐藏文件,即以. 开头的文件

ls –t 在ls 基础上以时间排序,最近的在最上面。不写这一项是以ASCII 码排序

ls –F 在名称后面加显示文件类型:@是二进制文件,/是目录,*是可执行文件,文本文

件什么都显示

ls –R 在ls 基础上显示目录及目录下的文件

8、file * 查看所有的文件的类型

9、chmod 修改权限

(1)只有文件的拥有者或root,才可以修改文件或文件夹的权限

(2)rwx-分别代表读,写,执行权限,没有权限,也可用数字421 表示

(3)文件:

r 可以查看文件内容可以more

w 可以修改vi file

x 可以运行它a.sh +回车

(4)目录:

r 可以查看目录内容ls

w 可以在这个目录下可以创建/删除子目录,文件

x 可以进入目录

(5)chmod g-r file1 删除同组人对file1 的读权限

chmod a=rw file1 所有人对file1 有读写权限

chmod 644 file1 拥有者有读写权限,同组人和其他人有读权限

chmod +t dir5 或chmod 1777 dir5 t代表粘着位,是/tmp 临时文件特有的,对文件只有

读权限,d rwxrwxrwt

(6)644 是文件的缺省权限

755 是目录的缺省权限

10、touch 创建新的文件,如果文件已经存在,则改变文件的时间戳

11、mkdir 创建目录

mkdir dir1/dir2 前提是dir1 必须存在

mkdir dir1 dir2 创建多个目录

mkdir ~/dir1 在主目录下创建dir1

mkdir –p dir1/dir2 创建新的目录层次

12、cp 将一个或多个档案复制成另一个档案或者是将其复制到另一个目录去。

(1)cp f1 f2 : 将档名为f1 的档案复制一份为档名为f2 的档案。

cp f1 f2 f3 ... dir : 将档案f1 f2 f3 ... 都以相同的档名复制一份放到目录dir 里面。

cp -r dir1 dir2 : 将dir1 的全部内容全部复制到dir2 里面。

(2)cp 也有一些参数,如下:

-i : 交互是否覆盖

-r : 此参数是用来做递归复制用,可将一整个子树都复制到另一个目录中。

注意:将父目录拷入子目录中会造成死循环

13、mv 剪切文件/目录、将一文件改名。如同cp ,它也有三种格式:

(1)mv f1 f2 : 将档名为f1 的档案变更成档名为f2 的档案。

mv dir1 dir2 : 将档名为dir1 的目录变更成档名为dir2 的目录。

mv f1 f2 f3 ... dir : 将档案f1 f2 f3 ... 都移至目录dir 里面。

(2)mv 的参数有两个,

-i 的意义与cp 中的相同,均是interactive 询问之意。

-f 为强迫( force ) , 就是不管有没有同名的档案,反正我就是要搬过去,所有其他的参

数遇到-f 均会失效。

14、rm & rmdir 用来删除的指令。

(1)rm 的格式如下:

rm f1 f2 f3 .....

(2)rm 的参数比较常用的有几个: -f , -i , 与-r

-f : 将会使得系统在删除时,不提出任何警告讯息。

-i : 交互是否真要删除。

-r : 递归式的删除。

注意:小心不要随便使用rm -rf , 否则有一天你会"欲哭无泪"......

15、ln 链接(是文件/目录的别名)

(1)硬链接:是文件名到文件的对应关系。

ln file1 file2 :为file1 建立硬连接file2t,目标文件事先不能存在。file1 和file2 的硬链

接数一样。

(2)软连接:相当于windows 中的快捷方式,维护的是一个文件到另外一个文件名的对应

关系。

ln -s file1 file2: 链接数不变,file2 相当于file1 的快捷方式,文件类型为l

ln –s d5 d6:为目录d5 建立软连接,若cd d6 然后pwd,显示的是d5 目录

(3)查看节点号加-i,ls –il/ls -i 可看到inode

(4)区别

16、man 命令/函数

man –k keyword(一般是函数)

回车-------下一行

空格-------下一页

q--------退出

/string 查找关键字

17、cat 命令:

(1)cat:查看文件的内容,把文件内容显示到屏幕上,不分屏//可以用|more 分屏,缺省输入键盘

(2)cal > /dev/null 把输出仍掉,显示到空设备,写shell 脚本时,不关心输出结果

cat /dev/null > ~/b.txt 清空一个文件datablock 没有了,字节变为0,但inode 还在

(3)cat 适合查看小文件,一般用作将很多小文件连成一个大文件:cat file* >a.txt

18、more 是分屏显示,适合于看大文件

19、head & tail 前多少行后多少行

(1)head -n filename

head -10 a.txt 看文件a.txt 的前10 行

(2)tail -n filename

(3)tail +n filename 从第n 行开始显示

(4)tail -f filename 时时刷新//常用来查看日志文件

20、特殊字符

(1)* :匹配0 或多个字符,可以放文件的地方就能放通配符ls d*

(2)? :匹配一个字符

(3)[]: 匹配一组或一个范围的字符例: ls [a-h]f //a-h 范围ls[A a]f //A 或a

(4); : 命令之间顺次执行例cd;ls 显示主目录内容

(5)>输出重定向: 可以把一个命令的输出重定向到一个文件里,如果文件存在,覆盖源文

件.

(6)>> 追加: 把一个命令的输出追加到一个存在的文件里.

(7)< 输入重定向: 输入重定向到file

(8)| : 管道左右两边连接命令,把前一个命令的输出,做为下一个命令的输入

(9)tee 既可以显示在屏幕上,又可以保存在文件里例cal | tee a.txt

21、grep:过滤功能,把包含这个串的行输出来,可以使用正则表达式,实现过滤用| grep

(1)ls|grep a 把含有a 这个字符的文件名和目录列出来

(2)grep ^d 列出子目录

(3)grep ^l 列出软连接文件

(4)grep -i 忽略大小写

(5)grep -v 找出不能匹配的行

22、find:找文件

(1)语法: find 路径查询条件

(2)find 是精确匹配: find . –name file1

如果要模糊匹配:find . –name "file*"

(3)参数:

-name 文件名

-mtime 10 修改时间距今10 天那天的文件,-10 表10 天以内,+10 表超过10 天

-user 0 表userid=0 的文件,即root 的文件

-size +400 表文件大小超过400 个block,一个blok 是512 字节的文件,即200K

-print 打印

-perm 777 权限是777 的文件

-type f 只查普通文件,

-atime +365 访问时间超过一年的

(4)xargs:建立参数表并执行命令。

在使用find 命令的-exec 选项处理匹配到的文件时, find 命令将所有匹配到的文件一起

传递给exec 执行。但有些系统对能够传递给exec 的命令长度有限制,这样在find 命令运行

几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs

命令的用处所在,特别是与find 命令一起使用。find 命令把匹配到的文件传递给xargs 命令,

而xargs 命令每次只获取一部分文件而不是全部,不像-exec 选项那样。这样它可以先处理

最先获取的一部分文件,然后是下一批,并如此继续下去。

例: find . -type f -print | xargs file

23、wc:对单词进行统计:

(1)wc -l 以行为单位统计

(2)wc -w 以单词为单位统计

(3)wc -c 以字母为单位统计

(4)wc -C 统计字符个数

24、date:显示或设置日期和时间,只有超级用户才有权限设置日期

25、cal:用来显示某年内指定的日历

cal [[month] year] 例:cal 1998

26、du:统计磁盘容量

(1)du -k:当前目录下和所有子目录空间占用情况(单位block=512k)// -k 以千字节方式

显示.

(2)df -k:文件系统使用情况

27、crontab [-elr [username]] [File] 定时服务,系统会定时执行用户配置的任务

(1)username:是指设定指定user 的时程表,这个前提是你必须要有其权限(比如说是

root)才能够指定他人的时程表。

如果不使用-u user 的话,就是表示设定自己的时程表

(2)参数:

-e:设置定时任务(回车后进入vi 模式)

-l:查看有哪些定时服务

-r:删除目前的任务表

(3)配置的任务文件格式是:* * * * * 指令;

(4)每位表示的含义是:

分钟(0-59);小时(0-23);日期(1-31);月(1-12);星期(0-6,0 表示周日)

eg. 26 17 * * 5 ls -l >> test.txt:表示每到周五的17 点26 分,执行命令ls -l >>

test.txt

28、alias 用户可以将常用的命令用自己习惯的名称来重新命名,不同的Shell语法不同

(1)C Shell:alias dir 'ls -F';

(2)Bourne Shell:alias dir='ls -a'

29、ps:列出当前在系统中运行的进程,只列出跟终端相关的进程

(1)参数:

-e 列出系统中运行的所有的进程

-f 列出完整信息,并格式化输出

-U uid:列出某个用户或用户id相关的进程

无参数:列出当前终端相关的进程

(2)ps -ef:uid pid ppid c stime tty time cmd

uid:进程的onwer

pid:进程号(不会重复)

ppid:父进程号每个进程都有自己的父进程

stime:进程创建日期

tty:终端号//tty ? 服务进程

time: 累计使用cpu 的时间

cmd :进程名

(3)进程状态:

T挂起:被暂停ctrl+Z

Z僵尸进程:子进程先结束,父进程没结束

父进程先走: 托孤交给init

(4)结束一个进程:

前台进程: ctrl+c

kill 进程号//从内存清掉,中止

kill -9 强制终止

pkill 进程名kill sleep

后台进程&: stop %2

可以把前台程序变成后台运行: bg%n n 可用jobs 查到

30、echo:回显字符和查看环境变量值

(1)回显:echo 要显示的字符,如:echo AAA

(2)查看环境变量值:echo $环境变量名,如:echo $PATH

31、网络命令:

ifconfig -a:查看本机IP,在pc 机上用/sbin/ifconfig

netstat –nr:查看网络信息(路由表)

ping: 看网路通不通

telnet:远程登录

rlogin: 在一台服务器上重新登录到其他服务器上

不指定用户名则以现有的用户名登录,否则用-l 指定用户名

ftp:文件传输协议

32、VI的基本使用方法:

四、环境变量(是系统设置的)

1、全局变量:当前进程及子进程有效,环境变量名一般大写.

env查看所有的环境变量。大写,用:分隔

2、局部变量:当前进程有效

echo $path查看,小写,用空格分隔

3、设置环境变量的文件:

(1)csh

:系统环境变量配置文件是/etc/.login,用户的环境变量配置文件是$HOME/.cshrc

和$HOME/.login

1)如果用户的登录Shell是csh,则执行顺序是

etc/.login--> $HOME/.cshrc--> $HOME/.login

2)用户退出时会执行$HOME/.logout。

3)使用env命令可以查看当前环境下的所有环境变量

4)set 语法:只能在当前shell 下使用,shell 切换后不能访问,即局部变量

① 单值set varName=varValue;

② 多值set varName=(varV1 varV2 varV3 ...) 括号、空格分隔

③ 引用其他:set var1=value1 set var2=($var1 value2 value3 ...)

eg. set path=($path ./bin),注意小写path

5)setenv 语法:shell 切换后仍能使用,即全局变量

① 单值setenv varName varValue;

② 多值setenv varName varV1:varV2:varV3:... 冒号分隔

③ 引用其他:setenv var1 value1 setenv var2 value2:value3:$value1 注意顺序,引

用的放在最后

eg. setenv PATH ./bin:$PATH 注意大写PATH

注意:修改后的配置文件如果想立即生效,需要执行:source 配置文件名

eg. source .cshrc 相当于重新加载配置文件,配置我们当前的环境(但这样难免

造成某些属性配置的值会有多份,最好注销重新登录)

(2)sh

:系统环境变量配置文件是/etc/profile,用户的环境变里那个配置文件是

$HOME/.profile

1)执行顺序是先执行系统的文件,再执行用户自己的

2)语法:

① 单值varName=varValue;

② 多值varName=varV1:varV2:varV3:... 冒号分隔

③ 引用其他:var1=value1 var2=$var1:value2:value3:... 定义的顺序无所谓

eg. PATH=$PATH:./bin 这样会将已有的PATH 环境加在./bin 前面

上面的设置方式只能在当前Shell 有效,如果需要在不同Shell 中都有效,需要做

export

eg. export PATH

④ export

也可以在定义的同时export eg. export PATH=$PATH:./bin

也可以定义多个变量后一起export eg. export PATH JAVA_HOME CLASSPATH

注意:修改后的配置文件如果想立即生效,需要执行:. 配置文件名

eg. . .profile 相当于重新加载配置文件

(3)bash

:也使用/etc/profile,用户的环境变里那个是$HOME/.bash_profile、

$HOME/.bash_login、$HOME/.profile 和$HOME/.bashrc

1)执行顺序是

/etc/profile--> $HOME/.bash_profile--> $HOME/.bash_login--> $HOME/.profile,如果

当前的Shell 不是登录Shell,则会读取$HOME/.bashrc 文件,因此在我们的Linux 系统

上,如果修改.bashrc 文件中的环境变量配置,只需要重开一个终端就可以加载(此终端

不是login shell),比较方便。

退出时会找$HOME/.logout 文件

2)语法:与sh 相同

注意:修改配置文件后,如果想立即生效,需要执行:source 配置文件名

eg. source .bash_profile

常用环境变量配置:

PATH:寻找命令或可执行文件的搜索路径;系统寻找时会从头开始,如果到最后

也找不到,则报命令找不到错误

ORACLE_HOME:ORACLE_HOME 下则是ORACLE 的命令、连接库、安装助手、

listener 等

ORACLE_SID:Oracle 数据库的实例名

NLS_LANG:Oracle 数据库的字符集

LD_LIBRARY_PATH:系统查找动态链接库的路径

JAVA_HOME:JDK 的安装目录

CATALINA_HOME:Tomcat 服务器的安装目录

EDITOR:在终端上的编辑环境,使用crontab 或在sqlplus 环境下使用edit 时会用

到此环境变量配置的命令,一般都配置为vi

CVSROOT:服务器上存放工程文件路径

3、常用的环境变量:

(1)HOME:存的是用户主目录

(2)path: 命令(可执行文件)存放的路径!

解决“Commad Not Found! ”的方法。

(3)CLASSPATH:类路径

4、权限掩码(umask)

注意:权限的“减”是不能“借位”的!

权限掩码umask数值对应的项表示它要屏蔽什么权限,有则屏蔽,无则略过。

eg. 022从左往右一次如下

‘0’表示(000)不屏蔽拥有者(u)的任何权限。

‘2’表示(010)屏蔽同组用户(g)的写权限。

‘2’表示(010)屏蔽其它用户(o)的写权限。

所以权限掩码为022表示:屏蔽同组用户和其它用户对文件或目录的写权限!

猜你喜欢

转载自ldaolong.iteye.com/blog/2146148