UNIX基本的命令与知识
//不指定用户登陆
#ssh -p 12333 192.168.0.11
//指定用户登陆
#ssh -l root -p 12333 216.230.230.114
#ssh -p 12333 root@216.230.230.114
//进入某个目录
#cd /home/data
//打印当前目录
#pwd
//列出/home/data下的文件
#ll /home/data
#ls /home/data
#ls -l /home/data
//创建目录
#mkdir newdir
#mkdir /home/data/newdir
//删除目录
#rmdir newdir
//删除data下目录及其文件
#rm -rf /home/data/
//使用编辑器浏览文件
#emacs .bashrc
//只是快速地浏览文件,不编辑
#cat .bashrc
//大文件先显示一屏幕,再使用Enter键继续阅读,还可以使用/keyword搜索
#more bigfile.txt
//类似more还有less命令可以标记文件中的某个特殊位置,过一会再回到那里
//符号链接(Symbolic Link)
#ln -s source_file softlink_file
//目前流行的shell
bash,Bourne Again shell,符合POSIX(Portable Operating System Interface based on unix,以unix为基础的可携带操作系统界面/标准收集)标准,是早期Bourne shell的升级版,是liunx系统上最常用的shell,它是GNU工程的产物。
csh是Berkeley开发的,与Bourne shell大多是兼容的。
还有ksh(Korn shell),它在UNIX系统下可能最普遍;sh(Bourne shell),最原始的shell;tcsh,C shell的加强版;zsh,Z shell,最新的shell,与Bourne shell兼容。
//查看当前使用的shell版本
#echo $SHELL
//改变使用的shell版本
#chsh
//常用按键和用法
Ctrl+U //删除整行
Ctrl+C //停止正在执行的命令
Ctrl+Z //暂停正在执行的命令,按fg继续执行,fg(foreground)
stty erase ^H //stty修复功能键,^H是由退格键产生的ASCII代码
stty -a 显示目前终端的配置
//TAB自动补齐命令和文件名称
#chm //按tab键会自动补齐为chmod
#cd /home/wwwr //按tab键会自动补齐文件夹名称为cd /home/wwwroot
#cd /usr/l //连续按两下tab键,bash将会显示出所有l开头的文件
lib local
//使用上下左右键编辑选用已输入的命令
//如果你是vi的爱好者,可以设定shell使用vi的按键习惯
#export VISUAL=vi
//如果是tcsh,请使用下列命令
#setenv VISUAL vi
//展开文件名
#ls inv?ji.c
显示inv1ji.c inv2ji.c inv3ji.c
#ls inv[13]ji.c
显示inv1ji.c inv3ji.c
#ls inv*ji.c
显示inv1ji.c inv2ji.c inv3ji.c inveji.c
//存储输出结果, >符号后加文件名
#ls /usr/bin > /tmp.log
ls的执行结果会输出到tmp.log里,如果文件存在则被毁掉再把ls输出结果写入文件
csh或tcsh下使用
#set noclobber
bash下使用
#noclobber=1
如果想继续追加输出结果到tmp.log文件,可以使用
#ls /bin >> /tmp.log
//标准输出和错误输出
大部分的UNIX都有两种输出,标准输出(standard output)和标准错误输出(standard error)
如下三种命令都是把错误输出到指定的文件error-msg
#gcc invinitijig.c >& error-msg
#gcc invinitijig.c &> error-msg
#gcc invinitijig.c 2> error-msg
shell很专制地把1指定给标准输出,把2指定给标准错误输出
如果想要抛弃标准输出,使它不出现在屏幕上,解决办法是把它重定向一个叫做/dev/null的特殊文件中。
/dev目录是UNIX系统用以存放指向终端,磁带机和其他设备的特殊文件之处,但是/dev/null是独特的,这是一个会把送入的数据投入黑洞的地方,如:
#gcc invinitijig.c 2> error-msg > /dev/null
//有的时候,你会希望某个程序是以另一个程序的输出为输入,比如sort,笨拙的方法如下
#du > du_output
#sort -n du_output
但是UNIX提供了一个更简洁,更有效的方法使用“管道”(pipe),只要在第一个命令和第二个命令间加一条竖线 (|)
上例子可以用如下替换:
#du | sort -n
-n是按照数字大小排序,-r是按照倒叙排序
#du | sort -rn | more
在第二管道使用more让它一页一页显示(more是最常用的pipe命令)
//何谓命令
UNIX的命令是一个个文件,如ls命令位于bin目录下的一个可执行文件(binary file),因此ls命令也可以使用绝对路径
#/bin/ls
//查看命令预设路径
#echo $PATH
有些命令如cd不是文件形式,而是shell的一部分,它们称之为内置命令
//把命令放到后台执行
#gcc invinitijig.c & //加上&号即可
[1] 23412
这1是工作序号,23412是进程识别码
//使用fg把这些命令带回前台
#fg %1 //%不可少,1是工作序号
#fg 23412 //23412是进程识别码
//终止后台进程
kill %1
//参考手册
#man ls
man手册manual单词缩写,此命令查看ls命令手册
手册里第1章(用户命令),第5个章(文件格式)和第8章(系统管理命令)
对于同一个命令如chmod即是用户命令有属于系统调用,所以使用手册可以
#man 1 chmod
//查找和edit相关的命令
#apropos edit
UNIX的信息来源并非只有man pages一处,GNU工程的info pages就为GNU程序提供相关信息。
#info find
//文件所有权和权限
UNIX下有三种文件权限READ,WRITE,EXECUTE
那么是谁可以拥有这些权限?为了让用户可以一起工作,UNIX有三种不同程度的权限:owner,group,other
//如下图是所有权和权限的列表,最左侧-表示这是一个普通的文本文件,如果是d表示这是一个目录
//改变拥有者,所属群组及权限
//安装一个软件后,可能需要修改拥有者与其所属群组为bin:
#chown bin sampsoft
#chgrp bin sampsoft
//给所有用户,群组和其他人添加或删除权限
#chmod +x document
#chmod -x document
//只给用户增加写权限
#chmod u+w document
//给用户和群组增加读写执行权限
#chmod ug+rwx document
//只有用户拥有可读权限
#chmod 400 document
//给用户,组,其他都加读权限
#chmod 444 document
//给用户,组,其他都加读,执行权限,计算法方法:400+100+40+10+4+1=555
#chmod 555 document
//配置文件
这些文件常以rc(resource configuration)结尾,如.bashrc
//重要目录
/home 存放所有用户文件的目录
/boot 系统开机时,内核或其他文件有时候会放在这里
/bin 存放最基本的UNIX命令,如ls
/usr/bin 其他较不常用的命令,其实它和/bin没有多大的区别
/usr/sbin 作为系统管理员用途的命令,s是supervisor的意思
/usr/lib 标准函数库,例如libc.a,这里的usr应该是unix system resource
/usr/lin/X11 X Window系统的分法包(distribution),包括了X客户端使用的函数库(如字型),范例资源文件和其他X软件的重要部分
/usr/include C语言所使用的头文件(include file),例如stdio.h
/usr/src 系统的源代码存放地方
/etc 子系统(subsystem)所用到的文件。所谓的子系统通常与网络或周边设备相关,如NFS,电子邮件系统,网络服务,外挂硬盘等
/etc/skel 启动配置文件的样本,可以利用这些文件为新用户设定登陆环境
/var 用于存放一些用于监控的文件,如日志文件(log file)
/var/spool 用于暂时存放等待打印的文件
//为您服务的程序
很多电脑活动并不是简单的文件或者静态资源,而是必须要和其他执行中的进程进行交互。
如运行FTP,连接到另一个系统上,改系统会执行一个程序接受你的连接,并且解析你所下的命令,改程序叫做ftpd,d是看守程序/伺服机daemon,所谓daemon就是在服务器的后台不断执行并提供某种服务的程序,大部分的看守程序都是用来处理网络上的活动。
看守程序在开机后就已经启动了,在一个网络上的系统,每种服务都有各自的daemon负责,如fingerd处理远程的finger要求,httpd处理http的请求,当然非网络性的服务也有,如lpd
//进程
UNIX的运行时建立在进程(process)的概念上的,进程是一个独立执行的程序,拥有自己的一套资源。如在你登陆之前,你的终端会被getty进程所监控,而在你登陆之后,getty会把终端的控制权交给shell接管(shell其实是另一个进程),然后自我了结
//查看当前用户哪些进程正在执行
#ps
ps命令所显示的信息中,第一列是专属于该进程的标识代号(Process ID,PID),如果你有一个失控的进程,且无法使用Ctrl+C或其他方法摆脱他,使用;TTY显示该进程在哪一个终端上执行,STAT标识进程状态,如S(Suspended,搁置的),T(Time Out,超时);TIME表示该进程占了多少CPU时间
#kill PID
即可结束进程
//查看整个系统所有进程,-a表示all processes,-x表示包括那些没有控制终端的进程
#ps -a | more
#ps aux
#ps -aux