Linux常用指令

本文最后更新于 2018年2月27日 下午

Linux常用指令

概论

Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本

前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。

Redhat,应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本)、Fedora Core(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。Redhat应该说是在国内使用人群最多的Linux版本,甚至有人将Redhat等同于Linux,而有些老鸟更是只用这一个版本的Linux。所以这个版本的特点就是使用人群数量大,资料非常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。

Debian,或者称Debian系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing 和 unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经 过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是 稳定和安全性都非常的高。Debian最具特色的是apt-get / dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去:)

Arch Linux ,不同于以上两种,属于一种比较“硬核”的Linux系统,是一款基于x86-64架构的 Linux发行版。支持社区参与。系统设计以KISS原则(保持简单和愚蠢)为总体指导原则,注重代码正确、优雅和极简主义,期待用户能够愿意去理解系统的操作。 Arch Linux 系统安装、删除和更新软件的软件包管理器叫做 pacman 。

以上文字摘抄自网络,知道就行了。

Linux目录文件结构

jiegou
  • /:根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
  • /bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
  • /boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可
  • /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。 注:/etc/X11存放与x windows有关的设置。
  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
  • /lib:/usr/lib:/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found
  • /mnt:/media:光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
  • /opt:给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
  • /root:系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
  • /sbin:/usr/sbin:/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
  • /srv:服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
  • /usr:应用程序存放目录,/usr/bin存放应用程序,/usr/share存放共享数据,/usr/lib存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc:系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
  • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件/var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间

以上仍然摘自网络,大体了解各个目录的意义即可。

指令

文件/文件夹相关

  • ls: 列出目录
  • cd:切换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录
  • cp: 复制文件或目录
  • mv:移动文件或目录
  • rm: 移除文件或目录

ls(列出目录)

语法

1
ls[参数](文件)
选项

-a:显示所有档案及目录(ls默认将档案名或目录名称为“.”的视为隐藏,不会列出);
-C:多列显示输出结果。这是默认选项;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
--full-time:列出完整的日期与时间;
--color={never,auto,always}:是否使用不同的颜色高亮显示不同类型

参数

目录:指定要显示列表的目录,也可以是具体的文件。

实例

显示根目录下的所有文件(含属性与隐藏档):

1
[root@aye10032 ~]# ls -al

cd (切换目录)

语法

1
cd (相对路径或绝对路径)
两种路径

比如我们现在有这么一个test文件夹,它的路径是

1
/root/nhjckx/aye10032/test

那么这个/root/nhjckx/aye10032/test就是该目录的绝对路径
但是如果此时我已经在/root/nhjckx/aye10032目录下了,那么也可以用cd ./test来进入test目录。
现在再假设我们在/root/nhjckx/aye10032目录下还有一个文件夹test01,那么同理,他的绝对路径就是

1
/root/nhjckx/aye10032/test01
此时如果我们在/root/nhjckx/aye10032目录下,同样可以用cd ./test01命令来进入test01这个目录。但是,如果我们此时所处的目录是/root/nhjckx/aye10032/test呢?此时我们有两种选择,一种是使用绝对路径,另外一种是使用相对路径:
1
cd ../test01
同样也可以跳转到test01目录。

总结: > 1.绝对路径必定由“/”开头
> 2.绝对路径是为档案/文件的所在位置做指向
> 3.在任何时候,都可以用绝对路径来找到我们想要的文件

1.相对路径不由“/”开头
2.相对路径是相对于现在目前所在的位置,为目的地指向
3.相对路径只对当前所在目录有效,./代表当前路径,../代表上一层目录

其他常用用法

cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录
cd ../.. 返回上两级目录

pwd (显示目前所在的目录)

这个指令没有什么好说的,就是显示当前目录的作用:

1
2
[root@aye10032 test]# pwd
/root/test
### mkdir (创建新目录)

语法

1
mkdir [参数](目录名称)

参数

-m 建立目录的同时设置目录的权限; -p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;

  • 关于权限的问题,我会放在后面再讲。
  • 当创建多个目录时,目录名之间使用空格隔开。

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

1
[root@aye10032 ~]# mkdir -m-p 700 /home/nhjckx/test

rmdir (删除空的目录)

语法

1
rmdir [参数] (目录名称)
参数

-p: 删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
-v: 显示命令的详细执行过程; - 当删除多个空目录时,目录名之间使用空格隔开。

实例
删除子目录test和其父目录nhjckx

1
2
[root@aye10032 ~]# cd /home    
[root@aye10032 home]# rmdir -p nhjckx/test

cp (复制文件或目录)

语法

1
2
cp [参数] (source) (destination)      
cp [参数] source1 source2 source3 .... directory
参数

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

实例/home/test下名为test的文本文档复制到/home/nhjckx目录下并重命名为test01:

1
[root@aye10032 ~]# cp /home/test/test.txt /home/hnjckx/test01.txt
注意,cp指令并不能新建文件夹,所以复制到的目标文件夹必须存在。同时,如果进行操作的文件或文件夹没有权限,则也会报错

mv (移动文件与目录,或修改名称)

语法

1
2
mv [参数] (source) (destination)
mv [参数] source1 source2 source3 .... directory

参数
> -f :如果目标文件已经存在,不会询问而直接覆盖;
> -i :若目标文件 (destination) 已经存在时,会询问是否覆盖;
> -u :若目标文件已经存在,且 source 比较新,才会升级 (update);

实例
/home/test目录下的所有文件(用*表示)移动到当前目录下(用.表示):

1
[root@aye10032 ~]# cp /home/test/* .

rm (移除文件或目录)

语法

1
rm [参数](文件或目录)

参数
> -f :删除时忽略不存在的文件,不会出现警告信息; > -i :互动模式,在删除前会询问使用者是否动作; > -r :递归删除;

实例

删除/home/test下名为test的文本文档:

1
2
[root@aye10032 ~]# rm -i /home/test/test.txt
rm: remove regular file `test.txt'? y

删除整个test目录:

1
[root@aye10032 ~]# rm -rf /home/test

数据无价,删除请谨慎!



文件属性相关

文件属性

Linux系统是一种典型的多用户系统。不同的用户处于不同的地位,拥有不同的权限,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

在Linux中我们可以使用ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:

1
2
3
4
5
6
7
8
9
10
11
12
[root@aye10032 aye10032]# ls -l     
total 29544
-rw-r--r--. 1 root root 2 Feb 26 19:23 banned-ips.json
-rw-r--r--. 1 root root 2 Feb 26 19:23 banned-players.json
-rw-r--r--. 1 root root 180 Feb 23 08:47 eula.txt
drwxr-xr-x. 2 root root 213 Feb 26 19:23 logs
-rw-r--r--. 1 root root 30222121 Feb 23 08:42 minecraft_server.1.12.2.jar
-rw-r--r--. 1 root root 2 Feb 26 19:23 ops.json
-rw-r--r--. 1 root root 753 Feb 26 19:23 server.properties
-rw-r--r--. 1 root root 2 Feb 26 19:23 usercache.json
-rw-r--r--. 1 root root 2 Feb 23 08:47 whitelist.json
drwxr-xr-x. 7 root root 133 Feb 26 19:24 world
我们就以以上我自己的一个文件夹为例来谈一谈,输出的信息从左到右依次包括文件属性、文件硬连接数、所有者、组、文件大小、文件的最后修改时间和文件名,其他的都比较好理解,这里就特别讲一下表示文件属性的三个三元组。 wenjian
这里一共有十个字符,分为四组,其中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件;
  • 若是[ l ]则表示为链接文档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为[ rwx ] 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。这三个三元字符组中第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限。每个字符组都是按照[rwx]的顺序排列,如果该权限组有此权限,则输出相应的字母,如果没有,则输出"-"。
比如如下信息:

1
drwxr-xr-x. 7 root root      133 Feb 26 19:24 world
表现的意思就是有一个名为"world"的目录(第一位是d,表示目录),它对于所有者、也就是建立这个文件夹的用户,拥有读写以及可执行权限(rwx三个字母都有);对于和所有者处于同一的用户,拥有可读和执行权限,但是没有写入权限;对于其他用户,也是拥有除了写入权限的其他两个权限。在看懂这些之后,我们就可以继续接下来的学习了。

chgrp(更改文件属组)

语法

1
chgrp [参数] (属组名)(文件名)

参数 > -R:递归更改文件属组

实例
/home/test及其子目录下的所有文件的用户组改为mrquin:

1
[root@aye10032 ~]# chgrp -R mrquin /home/test

chown(更改文件属主或同时更改文件属组)

语法

1
2
chown [参数] (属主名)(文件名)
chown [参数] (属主名:属组名)(文件名)

参数

-R:递归更改文件属主

实例/home/test及其子目录下的所有文件的拥有者改为ywwuyi:

1
[root@aye10032 ~]# chown -R ywwuyi /home/test

再将其所有者和用户组改回为mrquin:

1
[root@aye10032 ~]# chown -R mrquin:mrquin /home/test

chmod(更改文件9个属性)

语法

1
chmod [参数] (属性) (文件或目录)

属性: > Linux文件属性有两种设置方法,一种是数字,一种是符号。
> Linux文件的基本权限就有九个,分别是[owner/group/others]三种身份,各有自己的[read/write/execute]权限。
> 文件的权限字符为:『-rwxrwxrwx』,其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下: > - r : 4 > - w : 2 > - x : 1 > > 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数就是:
> - owner = rwx = 4+2+1 = 7 > - group = rwx = 4+2+1 = 7 > - others= --- = 0+0+0 = 0
> 这样我们就可以得出文件权限的数字表示了

除了使用数字表达之外,我们也可以使用字符来对用户文件进行操作。我们前面已经将讲过,在代表文件的9个字母中分别代表:用户(user);组(group)和其他用户(others) 的权限,则我们就可以用u,g,o这三个字母来表示三种身份的权限。具体使用时的语法为chmod (u=rwx,g=rx,o=r) [文件名]类似的语法。

实例
/home/test/test.txt文件权限设置为rwxrwxrwx(两种写法):

1
2
[root@aye10032 ~]chmod 777 /home/test/test.txt
[root@aye10032 ~]chmod u=rwx,g=rwx,o=rwx /home/test/test.txt
将上面文件的可执行权限(x)撤销:

1
[root@aye10032 ~]chmod a-x /home/test/test.txt

用户和用户组相关

上文我们讲到了文件的属性当中多次提到了用户这两个概念。对于大部分平常惯用Windows系统的同学们而言,这个概念可能会一时摸不着头脑。这里就先简单提一下Linux系统

TIPS:

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个惟一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

useradd(添加用户)

语法:

useradd [参数] (用户名称)

参数

  • -c 指定一段注释性描述
  • -d 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
  • -g 指定用户所属的用户组

实例:

新建用户mrquin,该用户属于用户组mole,同时生成同名的用户主文件夹。

1
[root@aye10032 ~]useradd -g mole –d /usr/mrquin -m mrquin

userdel(删除用户)

语法:

userdel [参数] (用户名称)

参数:

  • -r 将用户和他的主目录一起删除

实例:

将用户mrquin连同主目录一起删除:

1
[root@aye10032 ~]userdel -r mrquin

usermod(修改用户属性)

语法:

usermod [参数] (用户名称)

参数:

此处的参数与useradd指令的参数完全一致,不再描述。

实例:

将用户mrquin的所属用户组改为rua:

1
[root@aye10032 ~]usermod -g rua mrquin

groupadd(新建用户组)

语法:

1
groupadd [参数] (用户组名称)

参数:

  • -g GID 指定新用户组的组识别号
  • -o 新用户组的GID可以与已有用户组相同(一般与-g同时使用)

实例:

1
[root@aye10032 ~]groupadd -g-o 144 mrquin

常用软件

对于Linux系统来说,有一些常用软件我这里也推荐一下:

文本编辑器

VIM

vim是一款轻量化但是功能强大的文本编辑器,这里只讲一些基础的操作。一般来说,当你装了一个新的Linux系统,他可能没有安装nano,甚至可能没有安装vim,但是肯定可以使用vi指令。


Linux常用指令
https://www.aye10032.com/2018/02/27/2018-02-27-linux/
作者
Aye10032
发布于
2018年2月27日
更新于
2018年2月27日
许可协议