Linux操作系统自从出现以来,就备受关注。但是人们往往会有这样的一个印象:Linux比Windows难。为什么好多人都会有这样的想法呢?很简单,因为Windows是在更早的时候,甚至是大多数国人都没有认识到计算机的时候就已经被安装到X86架构的计算机上了。Microsoft公司寻求Intel公司的技术支持,并且建立合作之后,PC的市场就几乎被这两家公司垄断了。所以,很多人刚刚开始接触并逐渐学会使用计算机,Intel的X86架构的主机,而且这个主机上一般安装的都是Windows操作系统。因此,大家对于Windows的印象就是操作简单,易学易用。
可是我想问大家一个问题,如果某个项目启动了,项目部有6个项目小组参与了这个项目。有这么一个需求,利用Windows系统创建一个保存该项目数据的文件夹,并且在这个文件夹下面创建出每个项目小组的子文件夹。就这么简单的一个要求,我们在Windows里面需要完成的操作至少分作7步,先创建项目文件夹,然后进入这个文件夹之后,再分别创建文件夹并改名。每一个习惯使用Windows操作者大概都会这么做,而且还会以为这样非常简单。但是在Linux里面,像上述的操作,其实只要一条命令就可以完成,别说是7个目录的创建,就算是再多些,一个命令足以。所以你还以为Windows的操作真的是简单么?其实从操作角度来讲,Linux是比Windows更简单的操作系统,只是Linux需要的入门起点稍高一些,但也仅此而已了。
接下来我们就来说说Linux系统的基本操作,跟大家简单的剖析一下Linux里面基础命令的使用方法,即使你对Linux很陌生也没有关系,相信大家看过之后能够轻松的玩Linux了。
至于Linux命令的格式,在前面的博文中已经说过了,有需要的请查看之前的那篇博文《Linux操作系统基础解析之(三)——基本命令行操作及获得帮助的方法》。
基本命令:
1.pwd:内部命令
功能:显示当前工作目录的名称
格式:pwd [-L|-P]
常用选项:
-L 如果$PWD变量捕获到了当前工作目录的名称就显示该变量的值。
-P 显示真实的物理路径,而不是用符号链接来显示。
注意:-L选项被指定为pwd命令的默认行为。
退出状态:
除非给出的选项无效或当前目录不可读,返回值均为0。
使用举例:
[root@localhost ~]# cd /etc/init.d [root@localhost init.d]# pwd /etc/init.d [root@localhost init.d]# pwd -P /etc/rc.d/init.d [root@localhost init.d]#
2.cd:内部命令
功能:改变shell的工作目录
格式:cd [-L|-P] [dir]
常用选项:
-L 强制跟随符号链接。(也就是说,如果cd命令的参数是某一目录的符号链接,那么在更改目录之后,使用pwd -L命令显示的结果是符号链接的路径,而不是其真实的物理路径。)
-P 使用物理目录结构而不跟随用符号链接。
退出状态:
如果shell的工作目录成功更改,则状态返回值为0;否则不为0。
使用举例:
[root@localhost ~]# cd /etc/init.d [root@localhost init.d]# pwd /etc/init.d [root@localhost init.d]# cd -P /etc/init.d [root@localhost init.d]# pwd /etc/rc.d/init.d [root@localhost init.d]#
3.ls:外部命令
功能:将目录内容列表显示
格式:ls [OPTION]... [FILE]...
常用选项:
-a, --all:显示指定目录中包括"."和".."在内的所有文件。
-A, --almost-all:显示指定目录中唯独部包括"."和".."在内的其他所有文件。
--color[=WHEN]:给输出结果着色。WHEN的取值可以是always、none或者auto。
-d, --directory:用目录本身的条目代替其内容,并且不参考符号链接。
-F, --classify:给输出条目附加指示符。(可以简单区分文件类型:目录文件附加/;二进制文件附加*;管道文件附加|;套接字文件附加=;符号链接文件附加@,等等)
-h, --human-readable:通常与-l配合使用,以K、M、G为单位显示转换单位以后的文件大小
--help:显示简短的帮助信息
-i, --inode:显示每个文件的索引编号
-l:使用长列表格式显示每个文件的详细属性信息
-n, --numeric-uid-gid:类似于-l,只不过会将文件的属主和属组以ID方式显示,不显示名称
-r, --reverse:将输出结果按照倒序排列
-R, --recursive:递归地列表子目录中的内容
-s, --size:显示为每个文件分配了多少磁盘空间,与-h配合能够显示更加合适的单位,默认单位是KB
-S:将输出结果按照文件大小进行排序
-t:将输出结果按照内容修改时间进行排序
-u:与-lt选项配合,将输出结果按照文件的访问时间进行排序
-U:不排序,按照目录中存放的顺序显示
-1:以每行列表显示一个文件的方式输出结果
-Z, --context:只显示文件的权限、属主、属组、安全上下文和文件名。
--scontext:只显示文件的安全上下文和文件名
退出状态:
0 命名被成功执行
1 小问题(不能访问子目录等)
2 大麻烦(没有权限访问、目标文件不存在、选项错误等)
使用举例:
[root@localhost ~]# ls -lt /tmp total 80 -rw-r--r--. 1 root root 10033 May 18 10:55 install.log.syslog -rw-r--r--. 1 root root 50828 May 18 10:55 install.log -rw-------. 1 root root 1465 May 18 10:55 anaconda-ks.cfg -rw-r--r--. 1 root root 10240 May 18 10:55 a.tar -rw-------. 1 root root 0 May 11 08:14 yum.log [root@localhost ~]# [root@localhost ~]# ls -ltu /tmp total 80 -rw-------. 1 root root 0 May 18 10:57 yum.log -rw-r--r--. 1 root root 10033 May 18 10:55 install.log.syslog -rw-------. 1 root root 1465 May 18 10:55 anaconda-ks.cfg -rw-r--r--. 1 root root 10240 May 18 10:55 a.tar -rw-r--r--. 1 root root 50828 May 18 10:55 install.log [root@localhost ~]# [root@localhost ~]# ls -i /tmp 7340036 anaconda-ks.cfg 7340038 install.log 7340034 yum.log 7340037 a.tar 7340039 install.log.syslog [root@localhost ~]# [root@localhost ~]# ls -Z /tmp -rw-------. root root unconfined_u:object_r:user_tmp_t:s0 anaconda-ks.cfg -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 a.tar -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 install.log -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 install.log.syslog -rw-------. root root system_u:object_r:root_t:s0 yum.log [root@localhost ~]# [root@localhost ~]# ls --scontext /tmp unconfined_u:object_r:user_tmp_t:s0 anaconda-ks.cfg unconfined_u:object_r:user_tmp_t:s0 a.tar unconfined_u:object_r:user_tmp_t:s0 install.log unconfined_u:object_r:user_tmp_t:s0 install.log.syslog system_u:object_r:root_t:s0 yum.log
由于内容过多,其他选项的组合请大家自行尝试。
4.mkdir:外部命令
功能:创建目录
格式:mkdir [OPTION]... DIRECTORY...
常用选项:
-m, --mode=MODE:就像使用chmod命令那样为目录设置权限,而不是用a=rws - umask的方式
-p, --parents:根据需要创建父目录,如果已存在也不会报错
-v, --verbose:为每个被创建的目录显示一条信息
-Z, --context=CTX:将每个被创建的目录的SELinux的安全上下文设置为CTX
--help:显示帮助菜单信息
--version:输出版本信息并退出
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
使用举例:
[root@localhost ~]# mkdir -pv /tmp/myproject/dir{1,2,3/dir{1,2,3}} mkdir: created directory `/tmp/myproject‘ mkdir: created directory `/tmp/myproject/dir1‘ mkdir: created directory `/tmp/myproject/dir2‘ mkdir: created directory `/tmp/myproject/dir3‘ mkdir: created directory `/tmp/myproject/dir3/dir1‘ mkdir: created directory `/tmp/myproject/dir3/dir2‘ mkdir: created directory `/tmp/myproject/dir3/dir3‘ [root@localhost ~]#
5.rmdir:外部命令
功能:移除空目录
格式:rmdir [OPTION]... DIRECTORY...
常用选项:
-p, --parents:如果移除目录后,其祖先目录也为空,则一并移除
-v, --verbose:输出每个被处理执行的目录的操作结果
--help:显示简短帮助信息
--version:输出版本信息并退出
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
使用举例:
[root@localhost ~]# rmdir -pv /tmp/myprojects/james/first rmdir: removing directory, `/tmp/myprojects/james/first‘ rmdir: removing directory, `/tmp/myprojects/james‘ rmdir: removing directory, `/tmp/myprojects‘ rmdir: removing directory, `/tmp‘ rmdir: failed to remove directory `/tmp‘: Directory not empty [root@localhost ~]#
6.touch:外部命令
功能:改变文件的时间戳
格式:touch [OPTION]... FILE...
常用选项:
-a:只改变访问时间
-c, --no-create:不创建任何文件
-d, --date=STRING:分析STRING并使用它代替当前时间
-m:只改变修改时间
-r, --reference=FILE:参考指定文件的时间戳来设置目标文件的时间戳,不使用当前时间
-t STAMP:使用[[CC]YY]MMDDhhmm[.ss]格式的时间代替当前时间
--time=WORD:改变指定的时间,WORD可以是:access, atime, modify, mtime
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
使用举例:
[root@localhost test]# touch file1 [root@localhost test]# stat file1 File: `file1‘ Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050dInode: 7340048 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-05-21 18:30:59.844000944 +0800 Modify: 2016-05-21 18:30:59.844000944 +0800 Change: 2016-05-21 18:30:59.844000944 +0800 [root@localhost test]# touch --time=atime file1 [root@localhost test]# stat file1 File: `file1‘ Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050dInode: 7340048 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-05-21 18:31:24.270000248 +0800 Modify: 2016-05-21 18:30:59.844000944 +0800 Change: 2016-05-21 18:31:24.270000248 +0800 [root@localhost test]# touch --time=mtime file1 [root@localhost test]# stat file1 File: `file1‘ Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050dInode: 7340048 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-05-21 18:31:24.270000248 +0800 Modify: 2016-05-21 18:32:40.812005557 +0800 Change: 2016-05-21 18:32:40.812005557 +0800 [root@localhost test]#
7.stat:外部命令
功能:显示文件或文件系统状态信息
格式:stat [OPTION]... FILE...
常用选项:
-L, --dereference:不显示符号链接文件的状态,而是沿着链接路径显示源文件的状态
-Z, --context:在显示结果中添加该文件的SELinux的安全上下文信息
-f, --file-system:显示目标文件所在的文件系统的状态信息而不是该文件的信息
-t, --terse:以简洁模式输出结果,慎用(因为输出结果很难理解)。
-c --format=FORMAT:使用指定格式输出文件的状态信息。
常用的基于文件的有效格式包括(不考虑文件系统):
%a 以数字的格式显示目标文件权限
%A 以模式的格式显示目标文件权限
%C 仅显示目标文件的SELinux的安全上下文信息
%d 以十进制显示目标文件所在设备的设备号
%D 以十六进制显示目标文件所在设备的设备号
%F 显示目标文件的文件类型
%g 显示目标文件的所属组的GID
%G 显示目标文件的所属组的名称
%h 显示目标文件的硬链接数量
%i 显示目标文件的索引节点编号(inode)
%n 显示目标文件的文件名
%N 如果目标文件是符号链接,则引用文件名即链接关系
%s 以字节为单位显示目标文件的完整大小
%t 以十六进制的格式显示目标块设备文件的主设备号
%T 以十六进制的格式显示目标块设备文件的次设备号
%u 显示目标文件的属主的UID
%U 显示目标文件的属主的用户名
%x 显示目标文件的最后访问时间
%X 显示目标文件的最后访问时间,格式为从1970-01-01 0:00:00到最后访问时间所经过
的秒数
%y 显示目标文件的最后修改时间
%Y 显示目标文件的最后修改时间,格式为从1970-01-01 0:00:00到最后修改时间所经过
的秒数
%z 显示目标文件的最后状态改变时间
%Z 显示目标文件的最后状态改变时间,格式为从1970-01-01 0:00:00到最后状态改变时
间所经过的秒数
常用的基于文件系统的有效格式包括:
%a 显示目标文件所在的文件系统中非超级用户可用的空闲块的数量
%b 显示目标文件所在的文件系统中数据块的总量
%c 显示目标文件所在的文件系统中文件索引节点的总量
%d 显示目标文件所在的文件系统中空闲的文件索引节点的数量
%f 显示目标文件所在的文件系统中空闲的数据块
%C 显示目标文件的SELinux安全上下文(很特殊,仍然针对目标文件而非文件系统)
%i 以十六进制显示显示目标文件所在的文件系统的文件系统ID
%l 显示目标文件所在的文件系统中文件名的最大长度
%n 显示目标文件的文件名(很特殊,仍然针对目标文件而非文件系统)
%s 显示目标文件所在的文件系统的块大小
%S 显示目标文件所在的文件系统的基础块大小
%t 以十六进制显示目标文件所在的文件系统的类型
%T 以人们比较熟悉的名称显示目标文件所在的文件系统的类型
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
使用举例:
[root@localhost test]# stat file1 File: `file1‘ Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050dInode: 7340048 Links: 1 Access: (4644/-rwSr--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-05-21 18:31:24.270000248 +0800 Modify: 2016-05-21 18:32:40.812005557 +0800 Change: 2016-05-21 18:40:35.278997593 +0800 [root@localhost test]# stat -c %A file1 -rw-r--r-- [root@localhost test]# stat -c %a file1 644 [root@localhost test]# chmod 4644 file1 [root@localhost test]# stat -c %a file1 4644 [root@localhost test]# stat -c %C file1 unconfined_u:object_r:user_tmp_t:s0 [root@localhost test]# stat -c %d file1 2050 [root@localhost test]# stat -c %D file1 802 [root@localhost test]# stat -c %F file1 regular file [root@localhost test]# stat -c %F /etc directory [root@localhost test]# stat -c %F /dev/sda4 block special file [root@localhost test]# stat -c %F /dev/zero character special file [root@localhost test]# stat -c %F /etc/grub.conf symbolic link [root@localhost test]# stat -c %g file1 0 [root@localhost test]# stat -c %G file1 root [root@localhost test]# stat -c %h /etc 116 [root@localhost test]# stat -c %n /etc/init.d /etc/init.d [root@localhost test]# stat -c %N /etc/init.d `/etc/init.d‘ -> `rc.d/init.d‘ [root@localhost test]# stat -c %s file1 5 [root@localhost test]# stat -c %t /dev/sda4 8 [root@localhost test]# stat -c %t /dev/sda3 8 [root@localhost test]# stat -c %T /dev/sda3 3 [root@localhost test]# stat -c %T /dev/sda4 4 [root@localhost test]# stat -c %x /dev/sda3 2016-05-18 08:58:24.980999987 +0800 [root@localhost test]# stat -c %X /dev/sda3 1463533104 [root@localhost test]# stat -fc %a /dev/sda3 56911 [root@localhost test]# stat -fc %a file1 27752096 [root@localhost test]# stat -fc %a /boot/ 147705 [root@localhost test]# stat -fc %b file1 30204965 [root@localhost test]# stat -fc %b /etc 30204965 [root@localhost test]# stat -fc %b /boot 194241 [root@localhost test]# stat -fc %b /testdir 5006815 [root@localhost test]# stat -fc %a /testdir 4739567 [root@localhost test]# stat -fc %c /testdir 1281120 [root@localhost test]# stat -fc %C /testdir system_u:object_r:etc_runtime_t:s0 [root@localhost test]# stat -fc %i /testdir 8b9a7d2d8533510f [root@localhost test]# stat -fc %l /testdir 255 [root@localhost test]# stat -fc %n /testdir /testdir [root@localhost test]# stat -fc %s /testdir 4096 [root@localhost test]# stat -fc %S /testdir 4096 [root@localhost test]# stat -fc %t /testdir ef53 [root@localhost test]# stat -fc %T /testdir ext2/ext3
8.cp:外部命令
功能:复制文件和目录
格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-a, --archive:归档文件,相当于-dR --preserve=all
-i:交互式操作,防止目标文件被误覆盖
-r, -R: 递归复制目录及内部的所有内容;
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:时间戳
links:符号链接
xattr:扩展属性
context:安全上下文
all:全部
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
9.mv:外部命令
功能:移动(重命名)文件
格式:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i: 交互式选项,移动文件之前提示用户是否覆盖
-f: 强制移动,覆盖文件之前不予提示
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
10.rm:外部命令
功能:移除文件或目录
格式:rm [OPTION]... FILE...
常用选项:
-i: 每一次移除操作执行之前提示用户是否删除
-f: 忽略不存在的文件,也不给予提示,强制删除
-r, -R, --recursive: 递归地删除目录及目录中的内容
--no-preserve-root:不会特别地针对‘/‘实施保护
退出状态:
如果命令执行成功,状态返回值为0;如果命令执行失败,状态返回值为非0。
本文出自 “运维者的家” 博客,请务必保留此出处http://zhaotianyu.blog.51cto.com/132212/1775741
Linux操作系统基础解析之(四)——Linux基本命令剖析(1)
原文地址:http://zhaotianyu.blog.51cto.com/132212/1775741