赞
踩
Linux kernel是统一的,但是shell有很多种,比如Bash、Zsh等。
可执行程序一般有两种实现方式:一种是二进制方式,另一种是脚本(script)方式。二进制程序(如.exe文件)是已经编译完的程序,计算机可直接执行;脚本是由一条一条的命令组成的文本文件,脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。
shell脚本在本质上就是将某些Linux命令“堆放”在一起(shell脚本运行时,当中的命令依次接受脚本解释器的解释,例如,一个包含多条命令的脚本,即使最后一条命令有语法错误,前面的命令仍然可以照常运行;即使中间某条命令没有正常运行,假设后面的命令不依赖于它,后面的命令仍然可以照常运行)。
单字符选项(参数)的前面为一个减号“-”,如-f、-i等;多字符选项(参数)的前面为两个减号“--”,如--help、--version等。
Linux系统区分大小写,且不使用扩展名识别文件的类型,而是根据文件头的内容来识别其类型,为了提高文件的可读性,在Linux系统中可以使用扩展名。
ls 显示当前目录中的所有文件,不包含隐藏文件
ls –a 显示当前目录中的所有文件,包含隐藏文件
ls –l 显示文件及其详细信息
多个选项一起使用时,用一个减号即可,选项的放置次序一般可以任意,用-la和-al,效果相同
cat file_name:查看文件的内容
more file_name:分页显示文件的内容,每显示一页,more命令就等待用户的进一步指令。用户的常用指令有:按回车键,显示下一行;按空格键,显示下一页;按b键,返回到上一页;按q键,退出命令
less file_name:与more命令相似 区别:速度(less不必读整个文件,加载速度会比more更快)、内容(less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容)
head file_name:查看文件开头的部分,默认显示文件的前10行,head -5 file_name则显示文件的前5行
tail -f file_name:该命令用来追踪日志,能实时看到最新操作的变化(动态查看日志),与head命令相呼应,默认显示文件的最后10行 eg:tail -f -5 log_test
wc file_name:统计文件的行数、单词数和字节数
-l、-w、-c参数分别显示文件的行数、单词数和字节数
cd dic_name:切换到指定目录
cd ..或cd ../:切换到上级目录
cd ../../:切换到上两级目录
cd -:切换到上一步操作时的目录
cd后面既可以跟相对路径,也可以跟绝对路径
mkdir dic_name:新建目录
mkdir -p dic_name/subdic_name:创建多层目录(mkdir -p命令中的各级目录,可能都不存在,可能某一级或者某几级已经存在,也可能都已经存在,在这几种情况下,mkdir -p命令都不会出错。从上层目录到最后一级目录,哪一级目录不存在就创建哪一级,如果都已经存在,相当于mkdir -p命令做了一个空操作,所以即使只创建一层的目录,也建议加上-p参数)
cp [options] source dest:主要用于复制文件或目录
-r 参数在复制目录时使用
-f:强行覆盖,不会遇到权限不足的问题
-i:若目标文件已经存在,在覆盖前会先询问
cp命令是有危险的,可能会发生这种情况:文件b.txt存在,执行cp a.txt b.txt之后,原来的b.txt的内容就被a.txt的内容给覆盖掉。 -b参数有备份作用(backup),执行cp -b a.txt b.txt,b.txt的内容备份至新文件b.txt~中,b.txt中的内容被a.txt的内容给覆盖。
mv a.txt b.txt:将a.txt重命名为b.txt
mv a.txt b.txt temp:将a.txt和b.txt移动至目录temp下
mv命令的-f、-i、-b参数与cp命令的这些参数作用相同
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用 ln 命令链接(link)它就可以,不必重复的占用磁盘空间。
ln -s 源文件或目录 目标文件或目录:软链接(符号链接)
例如:ln -s /bin/less /usr/local/bin/less
为某一个文件在另外一个位置建立一个同步的链接。符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。当源文件被删除了,链接文件就打不开了。因为记录的是路径,所以可以为目录建立符号链接。
ln 源文件(必须已存在) 目标文件或目录:硬链接(实体链接)
ln命令(软链接和硬链接)会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。
pwd -P:显示实际路径,即物理路径(如果当前目录或各级父目录存在软链接,则显示软链接的“源”路径)
pwd -L:显示的是“表面上”的路径,即逻辑路径
rm -rf file_name :删除当前目录下的指定文件
rm -rf *: 删除当前目录下的所有文件
rm -rf *.txt :删除以.txt为后缀的所有文件
“- f ”忽略不存在的文件,强制删除,不给出提示。
“- r” 指示rm将参数中列出的全部目录和子目录均递归地删除。
“- i ”进行交互式删除。如果用户输入“y”,文件将被删除。
ls -l 命令列出的文件信息的第一部分中的第 1 位为文件类型字段(d : 目录,- : 文件,l : 链接文件),后 9 位为文件权限字段,前3个字符、中间3个字符和后面3个字符分别表示文件所有者、文件所属组和所有其他账户的权限:
文件类型及权限 链接数 文件拥有者 所属群组 文件大小 文件最后被修改的时间 文件名
chmod [ugoa][+-=][rwx-] file_name:改变文件和目录的权限
u表示文件的所有者(user),g表示文件的所属组(group),o表示除所有者和所属组组员以外的其他账户(other),a表示所有账户(all),+、-、=分别表示对权限的增加、减少、定义,r、w、x、-分别表示读权限、写权限、执行权限、无权限。
eg:chmod u+rw example.txt 给文件的所有者增加读写权限
改变文件的权限,还有一种“数值”的方法,r、w、x、-可以分别用4、2、1、0表示
eg:chmod 775 example.txt 给文件的所有者和所属组赋予读、写、执行权限,给其他账户只赋予读和执行权限
-R 参数在修改某个目录内所有文件和子目录的权限时使用
chown和chgrp命令分别可以改变文件的所有者和所属组
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
2>1和2>&1的写法有什么区别:
2>&1 &中最后一个&:&表示把该命令以后台的job的形式运行
&:让程序在后台运行
这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
可以将不需要的标准输出以及标准错误输出重定向到 /dev/null,相当于扔进垃圾箱。
/dev/null 黑洞文件,垃圾桶
/dev/zero 无限0资源设备
tee:输出重定向会将输出内容重定向到文件中,而 tee 不仅能够完成这个功能,还能保留屏幕上的输出。也就是说,使用 tee 指令,一个输出会同时传送到文件和屏幕上。
格式:tee [-a] file -a:附加到既有文件的后面,而非覆盖它
nohup:后台执行,退出shell后进程不会中断
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
管道:可以把前面进程的输出结果作为后面进程的输入内容来处理
eg:head -16 /etc/passwd | tail -1
eg:cat 002999_0 | python mapper.py | sort | python reducer.py(本地测试mapreduce程序)
仅执行一次的工作排程:at 指令(前提:atd是启动的;使用 atq/atrm 来管理 ;用法:将 at 加上一个时间即可,比如now或具体时间 )
batch:功能同at指令,但在系统有空时才进行背景任务(也是使用 atq/atrm 来管理 )
crontab:循环执行的例行性工作排程
vim file_name:编辑(新建)文件
touch file_name:创建空文件(无论文件是否事先存在,运行命令后,该文件的修改时间均被设定为当前时间)
mkdir --help或man mkdir:查询mkdir命令的帮助说明(使用手册、具体的参数解释)
echo text:echo命令后面跟上要输出的文本
-e:text中的转义符号起到转义的作用(比如\n表示换行)
-E:text中的转义符号不起到转义的作用(比如正常输出"\n"这个字符,而不是换行)
gzip:压缩文件 -d:解压 gunzip:解压
tar zxvf file_name.tar:解压文件并显示文件的详细信息
sz:将选定的文件下载(发送)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器
wget 从网络下载一个文件并保存在当前目录
tree dictionary_name:以树形结构显示该目录下的所有子目录
tree:查看当前目录,不用跟目录名
tree -L 3 :在目录树中最深显示到第3层子目录
du -h file_name:查看文件大小,-h可选,表示以K,M,G为单位
du -h --max-depth=1:只显示当前路径下的一级目录的文件大小
ps:查看某个时间点的进程信息
查看自己的进程: ps -l
查看系统所有进程: ps aux
查看特定的进程:ps aux | grep pattern
top:动态观察程序的变化(相对于 ps 是撷取一个时间点的程序状态, top 则可以持续侦测程序运作的状态)
pstree:查看程序之间的相关性
通过md5命令可以检查两个或多个文件的内容是否完全相同:
test命令:检查文件和比较值
测试标志 | 代表意义 |
文件名、文件类型 | |
-e | 该文件名是否存在 |
-f | 该文件名是否存在且为file |
-d | 该文件名是否存在且为目录 |
-b | 该文件名是否存在且为一个block |
-c | 该文件名是否存在且为一个character device设备 |
-S | 该文件名是否存在且为一个socket文件 |
-p | 该文件名是否存在且为一个FIFO(pipe)文件 |
-L | 该文件名是否存在且为一个连接文件 |
文件权限检测 | |
-r | 检测文件名是否存在且具有“可读”权限 |
-w | 检测文件名是否存在且具有“可写”权限 |
-x | 检测文件名是否存在且具有“可执行”权限 |
-u | 检测文件名是否存在且具有“SUID”权限 |
-g | 检测文件名是否存在且具有“SGID”权限 |
-k | 检测文件名是否存在且具有“Sticky bit”权限 |
-s | 检测文件名是否存在且为“非空白文件” |
两个文件的比较 | |
-nt | (newer than)判断file1是否比file2新 |
-ot | (older than)判断file是否比file2旧 |
-ef | 判断file1与file2是否为同一个文件,可用在判断hard link上 |
数字之间的判定 | |
-eq | equal |
-ne | not equal |
-gt | greater than |
-lt | less than |
-ge | greater than or equal |
-le | less than or equal |
判断字符串的数据 | |
test -z string | 判断字符串是否为0,若为空返回true |
test -n string | 判断字符串是否为0,若为空返回false |
test str1 = str2 | 判断str1是否等于str2,若相等,返回true |
test str1 != str2 | 判断str1是否等于str2,若相等,返回false |
多重条件的判断 | |
a | 与,两个条件同时成立,eg:test -r file a test -x file,同时成立返回true |
o | 或,任何一个条件成立,eg:test -r file o test -x file,任意一个成立返回true |
! | 非,反向状态,如test!-x file,当file不具有执行权限时,返回true |
find [起始目录] 选项及寻找条件 [操作]:在目录中搜索文件,它的使用权限是所有用户。
eg:find . -name "*.txt" -print 或 find -name "*.txt" 从当前目录下开始查找后缀名为.txt的文件(默认的操作为-print,就是将找到的内容显示在屏幕上)
df:列出文件系统的整体磁盘使用量。df命令参数功能:检查文件系统的磁盘空间占用情况,可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
ssh:远程登录(服务器)
命令:ssh 客户端用户名@服务器ip地址 eg:ssh fdb@192.168.0.1
如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名 eg:ssh 192.168.0.1
输入ssh命令之后,会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。
免密登录:将本客户机的公钥文件 id_rsa.pub(利用ssh-keygen -t rsa生成的密钥对之一)中的内容添加到服务器上的~/.ssh/authorized_keys文件中即可。
scp [options] source dest:基于 ssh 登陆进行安全的远程文件拷贝命令
如何将vim文本中的 T 全部替换成 t ? :%s/T/t/g
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。
僵尸进程:一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。