第1部分: Linux的基本操作
1.执行程序
./program_name
2.终止出错程序
4.1 显示当前系统中由该用户运行的进程
ps - print status
e.g ps –axu | more
列出正在运行的所有进程(选项a)
包括那些没有控制终端的进程(选项x)
包括每个进程所属的用户名(选项u)
因为显示的内容可能要超过一个屏幕,所以用管道命令“|”加上“more”让换屏幕之间有个停顿。
4.2 kill PID
强制一个进程终止。首先要用ps确定终止的进程的进程标识号(PID)。
e.g kill 123
4.3 killall
通过程序名终止一个(组)程序
e.g killall netscape 中止netscape的所有进程
3.查找
2.1 查找文件名
e.g find / -name “netscape” 从根目录“/”开始查找
e.g find $HOME -name core -exec rm -f {} /;
从$HOME目录寻找文件 "core". 对于每一个被找到的文件,执行 "rm -f" (强制删除文件).
{} 代表了已发现的文件, "/"终止了该命令列表.
e.g 查找当前目录下所有cpp或h文件
find . -name "*.cpp" -o -name "*.h"
e.g 查找当前目录下所有不是cpp的文件
find . ! -name "*.cpp"
e.g 查找当前目录下所有内容包含abc的cpp文件
find . -name "*.cpp"| xargs grep abc
2.2 快速查找
e.g locate netscape
因为locate基于数据库(通常在夜间重建),所以你无法找到刚刚存到文件系统的文件.
2.3 显示执行文件全路径
e.g which executable_name
2.4 grep/rgrep
e.g rgrep -r 'celeste' . |more
e.g grep -r 'celeste' . |more
在当前目录和所有子目录中搜索含有字符串"celeste"所有文件(选项"-r"代表递归).
显示文件名和在文件中包含所寻找的字符串所在的行.
4.修改文件访问权限
e.g chmod a+x my_file 把“my_file”变成是所有人都可以执行的
“a”表示所有用户(all)
“u”表示用户(user)
“g”表示用户组(group)
“o”表示其他用户(other users)
加号“+”增加权限
减号“-”删除权限
“=”设置权限
4.1 字符权限(x r w)
4.2 数字权限
execute=1
write=2
read=4
用户级别: 文件拥有者 用户组 其他用户
权限设置例子 rwx rw- r--
权限的二进制表示法 111 110 100
权限的八进制表示法 7 6 4
5.文件所有权
文件有一个所有者和一个用户组
e.g -rwx------ 1 gaagaa AP1 27 Apr 24 14:12 junk junk文件属于拥有者gaagaa和用户组AP1
6.文件的权限
6.1 文件三种访问属性:
x(执行) r w
6.2 三种用户级别:
文件拥有者(u)
所属文件组(g)
系统其它用户(o)
6.3 文件类型
“-” 表示普通文件
“ d” 表示目录文件
“ l” 表示链接文件
“c”表示字符设备
“b”表示块设备
“p”表示命名管道比如FIFO文件(First In First Out, 先进先出)
“ f”表示堆栈文件比如LIFO文件(Last In First Out,后进先出)
e.g -rwxr-xrwx
第一个字符“-”显示文件的类型,参考6.3。
第一个字符之后的第一个三位字符组表示对于文件拥有者对该文件的权限
第二个三位字符组表示文件用户组对该文件的权限
第三个三位字符组表示系统其他用户对该文件的权限。
如果没有权限,一般显示“-”字符。
7.后台执行命令
e.g eclipse&
e.g fg eclipse 把后台进程恢复到前台运行
e.g bg eclipse 把前台的进程送到后台运行
8.Shell脚本的编写
1.文件头
#!/bin/bash 告诉shell应该用哪一个程序来解释我的脚本,“#!”是必须。
2.参数
参数$0, $1, $2…是传递到脚本里面的参数。
e.g myscript a b c d e f g 参赛$0就是myscript, $1就是a, $2就是b,$3就是c...
3.执行
./script_name
e.g
#!/bin/bash
echo untarring the file $1
# this calls tar with options -xvzf (extract,verbose, filter through gzip, input filename)
tar -xvzf $1
9.输入输出重定向
9.1 重定向标准输出
e.g dir my_dir > filelisting.txt
9.2 重定向标准错误
e.g dir my_dir 2> errorlisting.txt
9.3 重定向追加
dir my_dir >> filelisting.txt
dir my_dir 2>> errorlisting.txt
9.4 “tee”命令把标准输出同时写到文件和屏幕
e.g dir | tee filelisting.txt
10. 转意字符
* = 用于匹配任意长度大于等于零的字符序列。以 . (点)开头的文件名除外。
? = 用于匹配任意单个字符
[abC1] = 用于匹配枚举集合中任意单个字符。比例中,集合由‘a’,‘b’,C’,‘1’组成。
[a-z] = 用于匹配任意小字字母
[A-F] = 用于匹配任意大写字母
[0-9] = 用于匹配任意个位数字
[a-zA-Z0-9] = 用于匹配任意字母(大小写)或者数字。
/ (反斜线)屏蔽后继特殊字母的特殊含义(转意),使该字符仅取其符号所代表的字面意义。
e.g
ls [abA-Z]* 列出当前目录中所有文件名以a,b或者任意大写字母开头的文件
11.文本拷贝粘贴
鼠标选中要被复制的文本,切换到复制的目的地址。点击鼠标中键键执行粘贴操作.(如果你的鼠标只有两个按键,则同时按下两个键)
12.文件复制
cp source destination
-r (recursive)复制整个目录树的内容
13.文件改名、移动
mv source destination
14.建立链接
14.1 硬链接
ln source destination
14.2 软链接(标志链接)
ln -s source destination
15.删除
15.1 删除文件
rm files
“-f”(force),强制删除
15.2 删除目录
rm -r files
删除文件,目录和所有它们的子目录
16.文件管理器
mc 激活“Midnight Commander”文件管理器
17. 解压缩和压缩
打包和压缩
打包是指将一大堆文件或目录什么的变成一个总的文件。
压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,
你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩
打包程序 - tar
压缩程序 - gzip、gunzip;
bzip2、bunzip2;
compress、uncompress;
zip、unzip
tar
e.g tar -cf all.tar *.jpg
将所有.jpg的文件打成一个名为all.tar的包。
-f 指定包的文件名
-c 表示产生新的包
-r 增加文件
-u 表示更新文件
-t 列出文件的意思
-x 解开文件包
tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等
-z 调用gzip (*.gz)
-j 调用bzip2(*.bz2)
-Z 调用compress(*.Z)
16.1 tar
e.g tar -cvf filename.tar filename 压缩
e.g tar -xvf filename.tar 解压
16.2 tar.gz/tgz
e.g tar -zcvf filename.tar.gz filename 压缩
e.g tar -zxvf filename.tar.gz 解压
16.3 gz/z
e.g
e.g gunzip filename.gz 解压
16.4 zip
e.g zip all.zip *.jpg 压缩
e.g unzip filename.zip 解压
18. 别名
我不喜欢Linux的一个地方就是它并不是为老百姓使用的,它的命令虽然很强大,可是也决定了它的不易操作性。更何况,我的记性很烂,所以,我只能使用别名。
定义别名的语法是:alias shortcut='command'
定义在~/.bashrc中,记得定义完执行一下。
. ~/.bashrc
注意,您可以用单引号或双引号。
两者区别是单引号将剥夺其中的所有字符的特殊含义,而双引号中的‘$’(参数替换)和‘`’(命令替换)是例外。建议使用双引号。
18.1 不带命令或参数的别名
定义解压缩别名
e.g alias tarx="tar -zxvf "
#>tarx A.tar.gz
18.2 带参数的函数
定义在当前目录下所有文件中查找'endif'的别名,$1是位置参数
e.g function dgrep() { grep -r $1 . ; }
#>dgrep 'endif'
alias据称能支持一个参数,可我没有试成功。:(
19. 查看磁盘的空间
df -k
20. 把错误输出屏蔽
e.g grep -r cpp . 2>/dev/null
21. vi 使用
21.1 gg/1G 移到文章第一行
21.2 G 移到文章最后一行
21.3 nyy(拷贝n行) ndd(剪切n行) p (粘贴在游标的下一行) P (粘贴在游标的上一行)
21.4 r filename (在当前光标读入文件名为filename的内容)
21.5 替换
n1,n2s/old/new/g (从n1到n2查找old替换成new)
1,$s/old/new/g (从第一行到最后一行查找old替换成new)
21.6 u ( 取消操作) Ctrl+r (恢复操作)
21.7 set nu (显示行号) set nonu (不显示行号)
21.8 nG (到第n行)
21.9 n (往下查) N (往上查)
21.10 /word (从当前位置向下查找word) ?word (从当前位置向上查找word)
22. xargs
xargs从标准输入中读取数据,并以空白和换行符分割每个参数(引号中的空白不作为分割符)。然后执行指定的命令(并把分解后的参数附加到命令后面)。
参考
http://campus.nbc.net.cn/nbcdn/data/1/60.html
http://people.linux.net.cn/xgwu/cmuo/basics/cbshell6.html