man 命令获取标准的UNIX联机帮助
- 有八个部分,命令和实用程序;系统调用;库例程;专用文件(IO);文件格式;游戏;其他;专用的系统管理员命令
- apropos keyphrase 查找包含keyphrase的一个索引列表
% 符号: C Shell, $符号:Bourne Shell
命令都有很多参数,fileneme arguments directives,很多程序的命令参数可以组合,比如
$ ls -l -a
$ ls -la
文件名大小写敏感,可以包括大小写字母、数字、点、下划线、连字符等,但不能包括斜杠/,/用于路径中分隔目录。(注意点只是文件名中的一个字符,后续的字符不是扩展名)
根目录是/,文件的全名是从根目录开始的一条完整路径
$ pwd #显示当前工作目录
$ cd ~ # ~代表主目录
$ printenv PATH # PATH是系统搜索命令的路径目录列表,冒号分隔
/opt/Qt5.9.0/5.9/gcc_64/bin:/opt/Qt5.9.0/5.9/gcc_64/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/guoj/.local/bin:/home/guoj/bin
$ ls -lF
总用量 3456
-rw-rw-r--. 1 guoj guoj 1998 6月 9 10:49 AUTHORS
drwxrwxr-x. 8 guoj guoj 4096 6月 9 10:50 common/
-rwxrwxr-x. 1 guoj guoj 45003 6月 9 10:49 config.guess*
-rw-rw-r--. 1 guoj guoj 866 6月 9 10:49 config.h
-表示文件,d表示目录;文件拥有者访问权;所属用户组的访问权;其他所有人的访问权;
大多数命令从标准输入读数据(终端的键盘输入),将产生的数据写到标准输出(终端),错误发送到标准错误(终端)
- 标准输出重定向 >, >>
- 标准错误重定向 >&, Shell用1指向标准输出,2指向标准错误
$ cat foop >& errfile
$ cat foop > errfile 2>&1
$ cat foop > outfile 2> errfile # 2和>之间没有空格
将一个程序的输出连接到另一个程序的输入,过滤器,可以用这个机制先调试小程序,然后小程序组合起来完成大型任务。比如sample 从输入设备采集数据,fourier 读数据并作傅立叶变换,filter 从傅立叶变换中滤掉高频成份,plotfourier根据傅立叶变换产生波形。
$ sample | fourier | filter | plotfourier > output.plotfourier
$ emacs #但是当前终端不能继续输入命令,Ctrl+C 强制停止执行
^C $ emacs & #切换到后台指向emacs,[作业号] PID
[1] 13076
$ jobs
[1]+ 运行中 emacs &
$ fg %1 #fg %作业号 从后台切换到前台
emacs
^Z
[1]+ 已停止 emacs #Ctril+D 挂起程序,但不终止
$ bg #把挂起的程序切换到后台指向
[1]+ emacs &
$ kill %1 #kill %作业号,终止后台作业
* kill作业号之前有百分号,否则就是kill进程号(root下可能会终止掉系统的进程)*
解释语言,CentOS使用的是bash《Learning the bash Shell》《学习bash》
$ cat /etc/shells
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
$ echo $SHELL
echo $SHELL
/bin/bash
$ bash -version
bash -version
GNU bash, 版本 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.
for i in list
do
... ...loop commands for $i
done
if command
then
command to execute if command returns ture
else
command to execute if command returns false
fi
#test命令(简写为[args])评估一个条件表达式,并相应返回0或1
if [args]
then
...commands
else
...commands
done
#args的基本表达式
str1 = str2 True if str1 equals str2
str1!= str2 True if str1 does not equal str2
-r file True if file exists and is readable
-w file True if file exists and is writable
-d file True if file exists and is a directory
-f file True if file exists and is not a directory
-s file True if file exists and has nonzero length
expr1 -a expr2 True if both expr1 and expr2 are True
expr1 -o expr2 Ture if both expr1 or expr2 is True
#比如
if [ "$1" = "foo" ] # 如果第一个参数时foo
if [ -r file.txt ] # 如果file.txt存在且可读
.bashrc和.bash_profile, 启动shell执行的是.bashrc,在系统上登陆时执行.bash_profile(仅执行一次)。
PATH供shell和shell启动的程序使用,TERM表示正在使用的终端类型
$ export VARNAME=value, C shell中是%set VARNAME value
$ printenv
$ export PATH=$PATH:/usr/local/bin 来增加PATH路径
C shell中是%set path = ($ PATH /usr/local/bin)
.bash_profile文件中有部分变量时控制shell的行为
$ varname=value
% set varname=value
ignoreeof 设置了该变量,Ctrl-D就不会终止shell的运行,必须显示输入logout或exit
noclobber 当文件foo存在时,ls>foo就不能执行
HISTSIZE(bash) 历史列表中的命令数,可以利用!n取出和执行这些命令
经常执行的命令以及其参数、常拼错的命令自定义为短命名,添加到.bash_profile中
$ alias newname = 'command', C shell中是% alias newname 'command'
$ alias rm="rm -i" #每次删除文件都会请求确认