Linux&Shell命令

目录基本操作

rmdir命令用来删除空目录。
当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。
注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
虽然还可以用带有-r选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
语法:

rmdir(选项)(参数)
选项
-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
--help:显示命令的帮助信息;
--version:显示命令的版本信息。

==mkdir命令用来创建目录。==该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应 包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
语法:

mkdir (选项)(参数)
选项
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。

实例: 在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问:

mkdir -m 700 /usr/meng/test

在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问

mkdir -p-m 750 bin/os_1

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。//rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
语法:

rm (选项)(参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

实例
交互式删除当前目录下的文件test和example
rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)
删除当前目录下除隐含文件外的所有文件和子目录

==pwd命令以绝对路径的方式显示用户当前工作目录。==命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
语法:

pwd(选项)
选项
--help:显示帮助信息;
--version:显示版本信息。

ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法:

ls(选项)(参数)
选项
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。

mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。
source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:

  1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
  2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
    注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
    语法:
mv(选项)(参数)
选项
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
实例
将文件ex3改名为new1
mv ex3 new1
将目录/usr/men中的所有文件移到当前目录(用.表示)中://mv /usr/men/* .

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。
它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法:

cp(选项)(参数)
选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。

参数
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
实例
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点…的形式。例如,下面的命令将指定文件复制到当前目录下:
cp …/mary/homework/assign .
//所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。
将文件file复制到目录/usr/men/tmp下,并改名为file1
cp file /usr/men/tmp/file1
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -r /usr/men /usr/zh
//交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中
cp -i /usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
//cp aaa/* /bbb
复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。

//cp -r aaa/* /bbb
这次依然需要按Y来确认操作,但是没有忽略子目录。

//cp -r -a aaa/* /bbb
依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。

//cp -r -a aaa/* /bbb
成功,没有提示按Y、传递了目录属性、没有略过目录。

cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的目录,…则表示目前目录位置的上一层目录。
语法:

cd (选项) (参数)
选项
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。

实例
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd … 返回上级目录(若当前目录为“/“,则执行完后还在“/"; "…"为上级目录的意思);
cd …/… 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。

文件权限属性设置
chmod命令用来变更文件或目录的权限。
在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式 采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。
语法
chmod(选项)(参数)
选项
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
参数
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!

scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。
可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
语法:

scp(选项)(参数)
选项
-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定ssh配置文件;
-l:指定宽带限制;
-o:指定使用的ssh选项;
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制。
参数
源文件:指定要复制的源文件。
目标文件:目标文件。格式为user@host:filename(文件名为目标文件的名称)。
实例
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
从远处复制文件到本地目录
scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
从10.10.10.10机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中。
从远处复制到本地
scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
从10.10.10.10机器上的/opt/soft/中下载mongodb目录到本地的/opt/soft/目录来。
上传本地文件到远程机器指定目录
scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
复制本地/opt/soft/目录下的文件nginx-0.5.38.tar.gz到远程机器10.10.10.10的opt/soft/scptest目录。
上传本地目录到远程机器指定目录
scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
上传本地目录/opt/soft/mongodb到远程机器10.10.10.10上/opt/soft/scptest的目录中去。

vi(Visual Interface可视化界面)是Unix操作系统和类Unix操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi叫vim,是vi的增强版。

vi编辑器支持编辑模式和命令模式。
Esc :从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
Ctrl+d:将显示内容向下滚动半屏;
Ctrl+u:将显示内容向上滚动半屏;
Ctrl+f:将显示内容向下滚动一屏;
Ctrl+b:将显示内容向上滚动一屏;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x:删除当前光标所在位置的字符;
X:删除当前光标所在位置的前一字符;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行的内容;
ndd:删除当前光标所在行后n行内容;
Y:复制当前光标所在行的全部文本,复制的放到内存缓冲区备用;
nyy:复制当前光标所行后n行内容,复制的放到内存缓存区备用;
p:粘贴文本操作,(?)勇于缓冲区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,勇于缓冲区的内容粘贴到当前光标所在位置的上方; 
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找到的字符串会被加亮显示;
a,b s/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a :从命令模式切换到编辑模式,并且从当前光标所在位置之后开始输入内容;
A::从命令模式切换到编辑模式,并且从当前光标所在位置开始插入文本内容;
i:从命令模式切换到编辑模式,并且从当前光标所在位置开始插入文本;
I:从命令模式切换到编辑模式,并且从当前光标所在行的行首开始插入文本内容;
o::从命令模式切换到编辑模式,并且从当前光标所在行的下方新建一个空行开始插入文本;
O:从命令模式切换到编辑模式,并且从当前光标所在行的上方新建一个空行开始插入文本;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
w!:在命令模式下,执行强制存盘退出操作;
w 文件名:”在命令模式下,执行存盘退出操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi退出操作;
:e 文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开了多个文件,则继续编辑下一个文件;
:f :在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号。
:set nonumber :在命令模式下,用于在最左端显示行号。
本文主要介绍vim的三种主要模式,快捷键操作,命令操作及解释
命令行下的文本编辑器种类可分为两种,一种是行编辑器,比如sed ;一种是全屏编辑器 比如nano,vi ;vim 是vi Improved,vi的增强版
gedit ,gvim 都是简单的图形编辑器
打开文件时可以通过一些命令更方便的找到我们需要操作的位置,可以用以下命令
vim [option]...file…
 +# :打开文件后,直接让光标处于第#行的行首
+/PATTERN :打开文件后,直接让光标处于第一次被PATTERN匹配到的行的行首
+ FILE :直接打开file文件,光标处于最后一行行首
 -b FILE :二进制方式打开文件
  -d FILE1 FILE2... :比较多个文件
              -m FILE :以只读的方式打开文件
              -e FILE :直接进入ex模式和ex file命令执行结果一样
如果该文件存在,打开文件并显示内容
如果该文件不存在,当编辑后第一次存盘时创建它
vim三种主要模式:
        命令模式(默认) : 移动光标,剪切/粘贴文本
        插入(编辑)模式 : 修改文本
        扩展命令模式 :保存,退出等 
Esc键 : 退出当前模式
Esc键 连续按两次 :总是返回到命令模式

各种关系请看下图:
各种模式的转换
命令模式 --> 插入模式
    i :insert,在光标所在处输出
    a :append,在光标所在处后面输入
    I :在当前光标所在行的行首输入
    A :在当前光标所在行的行尾输入
    o :在当前光标所在行的下方打开一个新行
    O :在当前光标所在行的上方打开一个新行
插入模式 --> 命令模式
    ESC
命令模式 --> 扩展模式
    :
扩展模式 --> 命令模式
    ESC
锁定和解锁 :
Ctrl+s 锁定   Ctrl+q 解锁

关闭文件操作命令
扩展模式:
    :q 退出
    :q! 强制退出,丢弃做出的修改
    :wq 保存并退出
     x 保存退出
命令模式:
    ZZ :保存退出
    ZQ :不保存退出
扩展模式:
按 ': '会进入Ex模式
会创建一个命令提示符: ,并处于底部的屏幕左侧
命令如下:
w 将文件写到磁盘上
wq 将文件写到磁盘上并退出
x 写入并退出
q 直接退出
q! 不存盘直接退出,所有更改都将丢失
r filename  读文件内容到当前文件中
w filename  将当前文件内容写入另一个文件中
!command  可以直接执行shell命令
r!command 把执行的命令直接写入到文件中
==vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。==
vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种 模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、 “O”、“o”、“I”、“i”键。
vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;
语法
vi(选项)(参数)
选项
+<行号>:从指定行号的行开始先是文本内容;
-b:以二进制模式打开文件,用于编辑二进制文件和可执行文件;
-c<指令>:在完成对第一个文件编辑任务后,执行给出的指令;
-d:以diff模式打开文件,当多个文件编辑时,显示文件差异部分;
-l:使用lisp模式,打开“lisp”和“showmatch”;
-m:取消写文件功能,重设“write”选项;
-M:关闭修改功能;
-n:不实用缓存功能;
-o<文件数目>:指定同时打开指定数目的文件;
-R:以只读方式打开文件;
-s:安静模式,不现实指令的任何错误信息。
参数
文件列表:指定要编辑的文件列表。多个文件之间使用空格分隔开。
知识扩展
vi编辑器有三种工作方式:命令方式、输入方式和ex转义方式。通过相应的命令或操作,在这三种工作方式之间可以进行转换。
//命令方式
在Shell提示符后输入命令vi,进入vi编辑器,并处于vi的命令方式。此时,从键盘上输入的任何字符都被作为编辑命令来解释,例 如,a(append)表示附加命令,i(insert)表示插入命令,x表示删除字符命令等。如果输入的字符不是vi的合法命令,则机器发出“报警 声”,光标不移动。另外,在命令方式下输入的字符(即vi命令)并不在屏幕上显示出来,例如,输入i,屏幕上并无变化,但通过执行i命令,编辑器的工作方 式却发生变化:由命令方式变为输入方式。
//输入方式
通过输入vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令(c)或取代命令(r)可以从命令方式进入输入方式。在输入方式下,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当做该文件的正文。进入输入方式后,输入的可见字符都在屏幕上显示出来,而编辑命令不再起 作用,仅作为普通字母出现。例如,在命令方式下输入字母i,进到输入方式,然后再输入i,就在屏幕上相应光标处添加一个字母i。
由输入方式回到命令方式的办法是按下Esc键。如果已在命令方式下,那么按下Esc键就会发出“嘟嘟”声。为了确保用户想执行的vi命令是在命令方式下输入的,不妨多按几下Esc键,听到嘟声后再输入命令。
//ex转义方式
vi和ex编辑器的功能是相同的,二者的主要区别是用户界面。在vi中,命令通常是单个字母,如a,x,r等。而在ex中,命令是以Enter;键结束的 命令行。vi有一个专门的“转义”命令,可访问很多面向行的ex命令。为使用ex转义方式,可输入一个冒号(:)。作为ex命令提示符,冒号出现在状态行 (通常在屏幕最下一行)。按下中断键(通常是Del键),可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的(例如,读取文件,把编辑缓 冲区的内容写到文件中等)。转义命令执行后,自动回到命令方式。例如:
:1,$s/I/i/g 按Enter键
则从文件第一行至文件末尾($)将大写I全部替换成小写i。vi编辑器的三种工作方式之间的转换如图所示。

命令功能:
1.字符编辑
x删除光标处的字符
#x删除光标处起始的后#个字符
xp交换光标所在处的字符及其后面字符的位置
~转换大小写
2.替换命令
r将光标所在处的字符替换为输入的字符
R切换为REPLACE模式
3.删除命令
d可结合光标跳转字符,实现范围删除
dKaTeX parse error: Expected 'EOF', got '#' at position 78: …当前词首或者下一个单词的词首 #̲command多次命令操作 d…相似
4.复制命令(y,yank)
y复制,行为相似于d命令
y$复制到行尾
y0复制到非空行首
y^复制到行首
ye复制到下一个单词词首
yw复制到当前词尾或者下一个单词的词尾
yb复制到当前词首或者下一个单词的词首
#command多次命令操作
yy复制光标所在的行
#yy多行复制
Y复制整行

5.粘贴命令(p,paste)
p缓冲区存的数据如果为整行,则粘贴至当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P缓冲区存的数据如果为整行,则粘贴至当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

6.改变命令(c,change)
c修改后切换成插入模式
c$删除到行尾并切换插入模式
c^删除到非空行首
c0删除到行首
cw删除到下一个单词词首
ce删除到当前词尾或者下一个单词的词尾
cb删除到当前词首或者前一个单词的词首
#command多次命令操作
cc删除当前行并输入新内容
#cc多行操作
C删除当前光标到行尾,并切换成插入模式

100icent [ESC] :粘贴 cent 100次

y复制,d删除,gU变大写,gu变小写
例如 0y$ 命令:
0 先到行头
y 然后开始从这里开始拷贝
$ 拷贝到本行地最后一个字符
ye :从当前位置拷贝到本单词的最后一个字符

扩展模式
1. 地址定界:

:start_pos,end_pos
#:具体行数
#,# :从左侧#表示行起始,到右侧#表示行结尾
#,+# :从左侧#表示的行起始,加上右侧#表示的行数
    :2,+3 表示2到5行
. :当前行
$ :最后一行
.,$-1 :当前行到倒数第二行
% :全文,相当于1,$

==2. /pat1/,/pat2/ ==

    从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
    #,/pat/ /pat/,$ 
使用方式:后跟一个编辑命令
 d    删除
 y    复制
 w file 将范围内的行另存至指定文件中
 r file 在指定位置插入指定文件中的所有内容

查找命令:

/PATTERN :从当前光标所在处向文件尾部查找
?PATTERN :从当前光标所在处向文件尾部查找
n: 与命令同方向
N:与命令反方向

查找并替换:

s: 在扩展模式下完成查找替换操作 
格式:s/要查找的内容/替换为的内容/修饰符 
要查找的内容:可使用模式 
替换为的内容:不能使用模式,但可以使用\1, \2, ... 等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容 
修饰符: 
i: 忽略大小写 
g: 全局替换;默认情况下,每一行只替换第一次出现 
gc:全局替换,每次替换前询问 
查找替换中的分隔符/可替换为其它字符,例如 s@/etc@/var@g   s#/boot#/#i

命令模式下的撤销更改

u :撤销最近的更改
#u :撤销之前多次更改
U :撤销光标落在这行后所有此行的更改
按Ctrl+r 重做最后的 "撤销" 更改
. :重复前一个操作
n. :重复前一个操作n次

vim的寄存器
有26个命名寄存器和1个无名寄存器,常存放不同的剪贴板内容,可以不同会话间共享。
用a,b,c,…z表示,用 "寄存器 表示,放在数字和命令之间,比如
3"tyy :表示复制3行到t寄存器中
"tp :表示将t寄存器内容粘贴
未指定,将使用无名寄存器
有10个数字寄存器,用0,1,…9表示,0表示存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,依次类推,数字寄存器不能在不同会话间共享。

vim也可以编辑二进制文件

可以使用 vim -b binaryfile 以二进制方式打开文件
在扩展命令模式下,利用 xxd 命令转换为可读的十六进制 :%!xxd
在扩展命令模式下,利用 xxd 命令转换回二进制文件 :%!xxd -r
保存退出

vim也具有可视化模式

允许选择的文本块
    v :面向字符
    V :面向行
    Ctrl-v :面向块
可视化键可以与用于移动键结合使用: w,),(,}...等
突出显示的文字可以被删除,复制,变更,过滤,搜索,替换等

vim的多文件模式

vim FILE1 FILE2 FILE3 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall 保存并退出所有

vim可以使用多个窗口进行更便捷的操作

多文件分割
  vim -o|-O FILE1 FILE2 ...
  -o :水平分割
  -O :垂直分割
  在窗口间切换:Ctrl+w ,Arrow
单文件窗口分割:
  Ctrl+w,s :split,水平分割
  Ctrl+w,v :vertical,垂直分割
  Ctrl+w,q :取消相邻窗口
  Ctrl+w,o :取消全部窗口
  :wqall :全部保存并退出

vim定制自己的工作特性

  全局:/etc/vimrc
  个人:~/.vimrc
扩展模式:只对当前vim进程有效
行号:
   显示:set number,简写为set nu
   取消显示:set nonumber,简写为set nonu
括号成对匹配
   匹配:set showmatch ,简写为 set sm
   取消匹配:set nosm
自动缩进
   启用:set ai
   禁用:set noai
高亮搜索
   启用:set hlsearch
   禁用:set nohlsearch
语法高亮
   启用:syntax on 
   禁用:syntax off 
忽略字符的大小写 
   启用:set ic 
   不忽略:set noic
文件格式 
   启用:fileformat=unix 
   不忽略: fileformat=dos 
设置文本宽度 
   :set textwidth=65 (vim only) 
   :set wrapmargin=15 
:help option-list 
:set or :set all*/

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数。

#可以用来显示当前的各种用户进程限制
ulimit -a

下面我把某linux用户的最大进程数设为10000个:

ulimit -u 10240

对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
其他建议设置成无限制(unlimited)的一些重要设置是:
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
CPU 时间:ulimit -t unlimited
虚拟内存:ulimit -v unlimited
暂时地,适用于通过ulimit命令登录shell会话期间。永久地,通过将一个相应的ulimit语句添加到由登录shell读取的文件中,即特定于shell的用户资源文件,如:
1)、解除Linux系统的最大进程数和最大文件打开数限制:
vi /etc/security/limits.conf
#添加如下的行

* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100

说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数
2)、让SSH接受Login程式的登入,方便在ssh客户端查看ulimit -a 资源限制:
== a、vi /etc/ssh/sshd_config==
把 UserLogin 的值改为 yes,并把 # 注释去掉
b、重启 sshd 服务:
/etc/init.d/sshd restart
3)、修改所有 linux 用户的环境变量文件:
vi /etc/profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
保存后运行#source /etc/profile 使其生效

有时候在程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
修改2个文件。
1./etc/security/limits.conf
vi /etc/security/limits.conf
加上:

  • soft nofile 8192
  • hard nofile 20480
    2./etc/pam.d/login
    session required /lib/security/pam_limits.so

另外确保/etc/pam.d/system-auth文件有下面内容
session required /lib/security/$ISA/pam_limits.so
这一行确保系统会执行这个限制。

3.一般用户的.bash_profile
#ulimit -n 1024
重新登陆ok

我们经常会发现有两种内存转储(core dump)
一种是段错误(segment error)通常是在一个非法的地址上进行取值赋值操作造成。
一种是总线错误(bus error)通常是指针强制转换,导致CPU读取数据违反了一定的总线规则。

1.每个操作系统都会有自己的进程载入和调度程序,也就是说,虚内存到实内存的映射,每种os都会有自己的特点,他们可以根据自己的情况避开某些小概率事件,“边界”也应该可以称之为小概率事件,在分配空间时做点手脚,对于分配者来说应该不会困难。
2.对齐问题,很久以前就听别人说,是为了提高访问效率,想想也是,多一种情况就不得不“if”,而且对齐也利于硬件“批量”访问数据。
3.采用非对齐方式会降低程序的效率,有些书上可能会提到这些,建议让编译器来决定采用哪种方式,毕竟每种编译器都是根据系统而来的。
4.在进行地址转换取值的时候,尽量用位拷贝,这样不同的os也不用当心。
5.不管os怎样对待bus error问题,不管编译器如何优化,硬件访问数据时的边界问题始终存在,开发可移植系统时,我认为不应该漏掉这个问题。

你的疑问:
1.pi-> a对于开发者来说是int,对于c编译起来说是int,对于汇编器来说是一段空间,对于硬件来说是一段空间,在目标代码一级,没什么所谓的类型。
2.cpu访问数据是通过发指令来控制硬件访问数据的,通常是先读到cache、寄存器。形象一点的话,和十字路口的红绿灯的控制下的车流差不多。看《微机原理》或许会有所帮助。
3.我认为,硬件在遇到边界问题时,应该会有警告,各各os处理不同罢了。
4.Solaris的特点

建议:暂时不用钻得太深,除非你有足够的资料。知道这个问题和大致的可能原因就差不多了,不是说不去掌握它,而是计算机这个东西内容太多,很多硬件问题采用避开而不是花很大代价去解决。等有了足够的知识积累,相信这个问题不会是什么难事。

总线错误和段错误的准确原因是在不同的操作系统之间运行版本的问题。
当硬件告诉系统有错误的内存引用时,会出现这两个error,操作系统向出现错误的进程发送signal与之进行communication。信号就通知一种事件的发生或软中断的产生,在linux系统中使用很广泛,但在应用程序的编写中几乎不会使用;在缺省的情况下,进程在收到段错误或者总线错误信号后就将信息转储并终止,当然可以对这些中断或者信号做一些处理,为它写一些handler函数,用于修改进程的缺省反映。
信号是由于硬件的中断而产生的,对中断的编程是很困难的,因为它是异步产生的对其发生的时间也是不可预测的。

  1. SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。

  2. SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。

linux下怎么解后缀名是gzip的文件?

1.以.a为扩展名的文件:#tar xv file.a
2.以.z为扩展名的文件:#uncompress file.Z
3.以.gz为扩展名的文件:#gunzip file.gz
4.以.bz2为扩展名的文件:#bunzip2 file.bz2
5.以.tar.Z为扩展名的文件:#tar xvZf file.tar.Z或 #compress -dc file.tar.Z | tar xvf -
6.以.tar.gz/.tgz为扩展名的文件:#tar xvzf file.tar.gz或 gzip -dc file.tar.gz | tar xvf -
7.以.tar.bz2为扩展名的文件:#tar xvIf file.tar.bz2或 bzip2 -dc file.tar.bz2 | xvf -
8.以.cpio.gz/.cgz为扩展名的文件:#gzip -dc file.cgz | cpio -div
9.以.cpio/cpio为扩展名的文件:#cpio -div file.cpio或cpio -divc file.cpio
10.以.rpm为扩展名的文件安装:#rpm -i file.rpm
11.以.rpm为扩展名的文件解压缩:#rpm2cpio file.rpm | cpio -div
12.以.deb为扩展名的文件安装:#dpkg -i file.deb
13.以.deb为扩展名的文件解压缩:
#dpkg-deb --fsys-tarfile file.deb | tar xvf - ar p
file.deb data.tar.gz | tar xvzf -
14.以.zip为扩展名的文件:#unzip file.zip
在linux下解压Winzip格式的文件
要是装了jdk的话,可以用jar命令;还可以使用unzip命令。
直接解压.tar.gz文件
//xxxx.tar.gz文件使用tar带zxvf参数,可以一次解压开。XXXX为文件名。 例如:$tar zxvf xxxx.tar.gz
种压缩文件的解压(安装方法)
文件扩展名 解压(安装方法)
.a ar xv file.a
.Z uncompress file.Z
.gz gunzip file.gz
.bz2 bunzip2 file.bz2
.tar.Z tar xvZf file.tar.Z
compress -dc file.tar.Z | tar xvf -
.tar.gz/.tgz tar xvzf file.tar.gz
gzip -dc file.tar.gz | tar xvf -
.tar.bz2 tar xvIf file.tar.bz2
bzip2 -dc file.tar.bz2 | xvf -
.cpio.gz/.cgz gzip -dc file.cgz | cpio -div
.cpio/cpio cpio -div file.cpio
cpio -divc file.cpio
.rpm/install rpm -i file.rpm
.rpm/extract rpm2cpio file.rpm | cpio -div
.deb/install dpkg -i file.deb
.deb/exrtact dpkg-deb --fsys-tarfile file.deb | tar xvf -
ar p file.deb data.tar.gz | tar xvzf
.zip unzip file.zip
bzip2 -d myfile.tar.bz2 | tar xvf
tar xvfz myfile.tar.bz2

x 是解压;v 是复杂输出;f 是指定文件;z gz格式
gzip[选项]要压缩(或解压缩)的文件名
-c将输出写到标准输出上,并保留原有文件。
d将压缩文件压缩。
-l对每个压缩文件,显示下列字段:压缩文件的大小,未压缩文件的大小、压缩
比、未压缩文件的名字
-r递归式地查找指定目录并压缩或压缩其中的所有文件。
-t测试压缩文件是正完整。
-v对每一个压缩和解压缩的文件,显示其文件名和压缩比。
-num-用指定的数字调整压缩的速度。w
举例:把/usr目录并包括它的子目录在内的全部文件做一备份,备份文件名为usr.tar
 tar cvf usr.tar /home
把/usr 目录并包括它的子目录在内的全部文件做一备份并进行压缩,备份文件名
是usr.tar.gz
tar czvf usr.tar.gz /usr
压缩一组文件,文件的后缀为tar.gz
#tar cvf back.tar /back/
#gzip -q back.tar
or#tar cvfz back.tar.gz /back/
释放一个后缀为tar.gz的文件。
#tar zxvf back.tar.gz
#gzip back.tar.gz
#tar xvf back.tar

系统启动(开机)

如果你有一台装有Linux的电脑,加电后系统会自动启动,然后提示你登录系统,只有登录后才能进行其他操作。
登录Linux
第一次使用Linux,会看到登录的提示,如下所示:
login:
登录步骤:
登录Linux必须有用户名(用户ID)和密码,如果没有,可以向管理员所要。
在登录提示处输入用户名并回车;用户名是区分大小写的,输入时要注意。
然后会提示你输入密码,密码也是区分大小写的。
如果用户名和密码正确,那么会成功登录,并看到上次登录信息。
login : amrood
amrood’s password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
登录后会出现命令提示符($),你可以输入任何命令。下面通过 cal 命令来查看日历:
$ cal
$修改密码
Linux系统通过密码来保证数据和文件的安全,防止黑客破解和攻击。你可以通过以下方法来修改密码:
输入 password 命令。
输入你现在使用的密码。
输入新密码。注意密码不要过于简单,简单的密码往往会为入侵者大开便利之门。
确认密码,再输入一遍刚才的密码。
$ passwd
Changing password for amrood
(current) Linux password:******
New Linux password:*******
Retype new Linux password:*******
passwd: all authentication tokens updated successfully

$注意:输入的密码是看不到的,只会看到一个占位符(*)。
查看目录和文件
在Linux中,所有的数据都被保存在文件中,所有的文件又被分配到不同的目录;目录是一种类似树的结构,称为文件系统。
登录系统后,如果你希望知道自己的用户名(用户ID),可以使用 whoami 命令:
$ whoami
amrood
$如果你希望了解更多关于当前用户的信息,可以使用who am i 命令,读者可以自己尝试一下。
查看当前在线用户
如果你希望知道当前在线的用户(同时登录到系统的用户),可以使用 users、who 和 w 命令:
$ users
amrood bablu qadir
$ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu ttyp2 Oct 4 09:08 (calliope)
qadir ttyp4 Oct 8 12:09 (dent)
$w 命令可以看到在线用户的更多信息,读者可以自己尝试。
退出登录
完成工作后,你需要退出系统,防止他人使用你的账户。
使用 logout 命令即可退出登录,系统会清理有关信息并断开连接。
关闭系统(关机)
关系Linux系统可以使用下列命令:

halt 直接关闭系统
init 0 使用预先定义的脚本关闭系统,关闭前可以清理和更新有关信息
init 6 重新启动系统
poweroff 通过断电来关闭系统
reboot 重新启动系统
shutdown 安全关闭系统

注意:一般情况下只有超级用户和root用户(Linux系统中的最高特权用户)才有关闭系统的权限,但是给普通用户赋予相应权限也可以关闭系统。

Linux文件管理:Linux中的所有数据都被保存在文件中,所有的文件被分配到不同的目录。目录是一种类似于树的结构,称为文件系统。
当你使用Linux时,大部分时间都会和文件打交道,通过本节可以了解基本的文件操作,如创建文件、删除文件、复制文件、重命名文件以及为文件创建链接等。

在Linux中,有三种基本的文件类型:

  1. 普通文件
    普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。
  2. 目录
    目录可以包含普通文件和特殊文件,目录相当于Windows和Mac OS中的文件夹。
  3. 设备文件
    有些教程中称特殊文件,是一个含义。Linux 与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux 和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。
    例如,每一个终端都有自己的设备文件来供 Linux 写数据(出现在终端屏幕上)和读取数据(用户通过键盘输入)。
    设备文件和普通文件不一样,设备文件中并不包含任何数据。

设备文件有两种类型:字符设备文件和块设备文件。
字符设备文件以字母"c"开头。字符设备文件向设备传送数据时,一次传送一个字符。典型的通过字符传送数据的设备有终端、打印机、绘图仪、modern等。字符设备文件有时也被称为"raw"设备文件。
块设备文件以字母"b"开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。

通过 ls -l 列出的文件,每一行都是以 a、d、- 或 l 开头,这些字符表示文件类型:

前缀                                描述
-                      普通文件。如文本文件、二进制可执行文件、源代码等。
b                      块设备文件。硬盘可以使用块设备文件。                 
c                      字符设备文件。硬盘也可以使用字符设备文件。
d                      目录文件。目录可以包含文件和其他目录。
l                      符号链接(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。   
p                      具名管道。管道是进程间的一种通信机制。
s                      用于进程间通信的套接字。

提示:通俗的讲软连接就是windows的快捷方式,原来文件删了,快捷方式虽然在但是不起作用了。

元字符
元字符是具有特殊含义的字符。* 和 ? 都是元字符:

  • 可以匹配 0 个或多个任意字符;
    ? 匹配一个字符。

隐藏文件隐藏文件的第一个字符为英文句号或点号(.),Linux程序(包括Shell)通常使用隐藏文件来保存配置信息。
下面是一些常见的隐藏文件:

.profile:Bourne shell (sh) 初始化脚本
.kshrc:Korn shell (ksh) 初始化脚本
.cshrc:C shell (csh) 初始化脚本
.rhosts:Remote shell (rsh) 配置文件

查看隐藏文件需要使用 ls 命令的 -a 选项:

注意:输入密码时,星号(*)作为占位符,代表你输入的字符个数。
创建文件在Linux中,可以使用 vi 编辑器创建一个文本文件,例如:
$ vi filename
上面的命令会创建文件 filename 并打开,按下i键即可进入编辑模式,你可以向文件中写入内容。例如:
This is Linux file…I created it for the first time…
I’m going to save this content in this file.
完成编辑后,可以按esc键退出编辑模式,也可以按组合键Shift + ZZ完全退出文件。这样,就完成了文件的创建。
$ vi filename
$编辑文件
vi编辑器可以用来编辑文件。由于篇幅限制,这里仅作简单介绍,将在后面章节进行详细讲解。
如下可以打开一个名为 filename 的文件:
$ vi filename
当文件被打开后,可以按 i 键进入编辑模式,按照自己的方式编辑文件。如果想移动光标,必须先按esc键退出编辑模式,然后使用下面的按键在文件内移动光标:

l 键向右移动 
h 键向左移动 
k 键向上移动 
j 键向下移动 

使用上面的按键,可以将光标快速定位到你想编辑的地方。定位好光标后,按i键再次进入编辑模式。编辑完成后按esc键退出编辑模式或者按组合键Shift+ZZ退出当前文件。
$可以通过 cat 命令的 -b 选项来显示行号,例如:
$ cat -b filename
1 This is Linux file…I created it for the first time…
2 I’m going to save this content in this file.
$统计单词数目
可以使用 wc 命令来统计当前文件的行数、单词数和字符数,下面是一个简单的例子:

$ wc filename
2  19 103 filename
$每一列的含义如下: 
第一列:文件的总行数 
第二列:单词数目 
第三列:文件的字节数,即文件的大小 
第四列:文件名 
也可以一次查看多个文件的内容,例如: 

$ wc filename1 filename2 filename3

标准的Linux流

一般情况下,每个Linux程序运行时都会创建三个文件流(三个文件):
标准输入流(stdin):stdin的文件描述符为0,Linux程序默认从stdin读取数据。
标准输出流(stdout):stdout 的文件描述符为1,Linux程序默认向stdout输出数据。
标准错误流(stderr):stderr的文件描述符为2,Linux程序会向stderr流中写入错误信息。

Linux目录也是一个文件,它的唯一功能是用来保存文件及其相关信息。所有的文件,包括普通文件、设备文件和目录文件,都会被保存到目录中。

主目录: 登录后,你所在的位置就是你的主目录(或登录目录),接下来你主要是在这个目录下进行操作,如创建文件、删除文件等。

#可以随时进入主目录,这里 ~ 就表示主目录
cd ~
#如果你希望进入其他用户的主目录,可以使用下面的命令:
cd ~username
#返回进入当前目录前所在的目录可以使用下面的命令:
cd -

绝对路径和相对路径

Linux 的目录有清晰的层次结构,/ 代表根目录,所有的目录都位于 / 下面;文件在层次结构中的位置可以用路径来表示。
如果一个路径以 / 开头,就称为绝对路径;它表示当前文件与根目录的关系。举例如下:

/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
#不以 / 开头的路径称为相对路径,它表示文件与当前目录的关系。例如:
chem/notes
personal/res

创建目录

为 mkdir 命令增加 -p 选项,可以一级一级创建所需要的目录,即使上级目录不存在也不会报错。例如

#会创建所有不存在的上级目录
mkdir -p /tmp/amrood/test

删除目录

可以使用 rmdir 命令来删除目录,例如:

rmdir dirname

注意:删除目录时请确保目录为空,不会包含其他文件或目录。
也可以使用 rmdir 命令同时删除多个目录:

rmdir dirname1 dirname2 dirname3

如果dirname1、dirname2、dirname3 为空,就会被删除。rmdir 成功删除目录后不会输出任何信息。

为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种权限:

所有者权限:文件所有者能够进行的操作
组权限:文件所属用户组能够进行的操作
外部权限(其他权限):其他用户可以进行的操作。
查看文件权限
使用 ls -l 命令可以查看与文件权限相关的信息:
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr— 1 amrood users 1024 Nov 2 00:10 mydir
第一列就包含了文件或目录的权限。
第一列的字符可以分为三组,每一组有三个,每个字符都代表不同的权限,分别为读取®、写入(w)和执行(x):
第一组字符(2-4)表示文件所有者的权限,-rwxr-xr-- 表示所有者拥有读取®、写入(w)和执行(x)的权限。
第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr-- 表示该组拥有读取®和执行(x)的权限,但没有写入权限。
第三组字符(8-10)表示所有其他用户的权限,rwxr-xr-- 表示其他用户只能读取®文件。

文件访问模式

文件权限是Linux系统的第一道安全防线,基本的权限有读取®、写入(w)和执行(x):
读取:用户能够读取文件信息,查看文件内容。
写入:用户可以编辑文件,可以向文件写入内容,也可以删除文件内容。
执行:用户可以将文件作为程序来运行。

目录访问模式

目录的访问模式和文件类似,但是稍有不同:
读取:用户可以查看目录中的文件
写入:用户可以在当前目录中删除文件或创建文件
执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。

改变权限

可以使用 chmod (change mode) 命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。
使用符号表示权限
对于初学者来说最简单的就是使用符号来改变文件或目录的权限,你可以增加(+)和删除(-)权限,也可以指定特定权限。

符号                   说明
+                     为文件或目录增加权限
-                      删除文件或目录的权限
=                     设置指定的权限

下面的例子将会修改 testfile 文件的权限:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile
也可以同时使用多个符号: 
$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

使用数字表示权限
除了符号,也可以使用八进制数字来指定具体权限,如下表所示:

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

语法
du [选项][文件]
选项
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件><文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
  1. 显示目录或者文件所占空间:du
    只显示当前目录下面的子目录的目录大小和当前目录的总的大小
  2. 显示指定文件所占空间:du 指定文件
  3. 查看指定目录的所占空间:du 指定目录
  4. 显示多个文件所占空间:du file1 file2
  5. 只显示总和的大小: du -s

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。```

语法:df(选项)(参数)
选项
-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。

参数
文件:指定文件系统上的文件。
实例:查看系统磁盘设备,默认是KB为单位:

[root@LinServ-1 ~]# df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1

使用-h选项以KB以上的单位来显示,可读性高:

[root@LinServ-1 ~]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda2             140G   27G  106G  21% /
/dev/sda1             996M   61M  884M   7% /boot
tmpfs                1009M     0 1009M   0% /dev/shm
/dev/sdb1             2.7T  209G  2.4T   8% /data1

查看全部文件系统:

[root@LinServ-1 ~]# df -a
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1
none                         0         0         0   -  /proc/sys/fs/binfmt_misc

Shell内建命令

ulimit命令用来限制系统用户对shell资源的访问。如果不懂什么意思,下面一段内容可以帮助你理解:
假设有这样一种情况,当一台Linux主机上同时登陆了10个人,在系统资源无限制的情况下,这10个用户同时打开了500个文档,而假设每个文档的大小有10M,这时系统的内存资源就会受到巨大的挑战。
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联系。这时,ulimit可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。
ulimit用于限制shell启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU时间、单个用户的最大线程数、Shell进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
作为临时限制,ulimit可以作用于通过使用其命令登录的shell会话,在会话终止时便结束限制,并不影响于其他shell会话。而对于长期的固定限制,ulimit命令语句又可以被添加到由登录shell读取的文件中,作用于特定的shell用户。

语法ulimit(选项)
选项
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
//-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。

实例

[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 0           #core文件的最大值为100 blocks。
data seg size           (kbytes, -d) unlimited   #进程的数据段可以任意大。
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited   #文件可以任意大。
pending signals                 (-i) 98304       #最多有98304个待处理的信号。
max locked memory       (kbytes, -l) 32          #一个任务锁住的物理内存的最大值为32KB。
max memory size         (kbytes, -m) unlimited   #一个任务的常驻物理内存的最大值。
open files                      (-n) 1024        #一个任务最多可以同时打开1024的文件。
pipe size            (512 bytes, -p) 8           #管道的最大空间为4096字节。
POSIX message queues     (bytes, -q) 819200      #POSIX的消息队列的最大值为819200字节。
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240       #进程的栈的最大值为10240字节。
cpu time               (seconds, -t) unlimited   #进程使用的CPU时间。
max user processes              (-u) 98304       #当前用户同时打开的进程(包括线程)的最大个数为98304。
virtual memory          (kbytes, -v) unlimited   #没有限制进程的最大地址空间。
file locks                      (-x) unlimited   #所能锁住的文件的最大个数没有限制。

more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:
按Space键:显示文本的下一屏内容。
按Enier键:只显示文本的下一行内容。
按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
按H键:显示帮助屏,该屏上有相关的帮助信息。
按B键:显示上一屏内容。
按Q键:退出more命令。

语法
more(语法)(参数)
选项
-<数字>:指定每屏显示的行数;
-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
参数文件:指定分页显示内容的文件。
实例显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc file
显示文件file的内容,每10行显示一次,而且在显示之前先清屏。
more -c -10 file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值