输入

终端窗口中的命令以Enter键结束,且Shell命令区分大小写。如果命令太长,一行放不下时,在行尾输入\并按Enter键。这时Shell会返回一个大于号(>)作为提示符,表示该命令行尚未结束,允许继续输入有关信息。
02-Linux常用命令 - 图1

echo

echo命令把命令行中的参数全部显示到标准输出(终端)中。如果参数用引号引起来,会按原样输出。否则会把各个单词按字符串输出,字符串之间用空格隔开。单引号/双引号的区别请看Shell那一部分。
02-Linux常用命令 - 图2

输出重定向

Linux的标准输出是屏幕,把结果输出到指定的文件叫做输出重定向。

  • >:目标文件不存在,系统将建立该文件;文件存在,重定向将会删除该文件,并重新建立一个新文件存放结果。
  • >>:目标文件不存在,系统将建立该文件;如果目标文件存在,新的输出结果将会追加到文件末尾。

    pwd

    显示出当前所在目录的路径。

    历史命令

    history命令可以看到用户所有曾经输入过的命令。

  • !!:执行上一个命令;

  • `!n:执行第n个命令;
  • !-n:执行倒数第n个命令;
  • !xxx:执行以xxx开头的命令,如之前使用过clear,!cle会执行clear。

~/.bash_history文件中会存储你近期使用过的命令。查看此文件:cat ~/.bash_history

date

  • date命令在屏幕上显示或设置系统的日期和时间:
    • date [+格式控制字符串]格式控制字符串常用单引号引起来。年:Y 月:m 日:d 小时:H 分:M 秒:S

02-Linux常用命令 - 图3

  • 有且只有超级用户能设置或修改系统时钟,语法如下:
    • date -s “year-month-day hour:minute:second”

02-Linux常用命令 - 图4
系统在启动的时候是从CMOS(用来存储计算机某些参数的芯片)中加载时钟,为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,而hwclock –w强制把系统时间写入CMOS。

cal

列出日历信息。

  • 单独一个cal:列出当前月的日历信息。
  • cal xxxx:列出xxxx年的日历信息。
  • cal yy xxxx:列出xxxx年yy月的日历信息。
  • cal dd yy xxxx:列出xxxx年yy月xx日所在月的日历信息。

02-Linux常用命令 - 图5

clear

clear命令清除屏幕上的信息,清屏后,提示符移到屏幕左上角。

关机 & 重启

  • shutdown -h now:立刻关机
  • shutdown -h 15:30:15:30 关机
  • shutdown -h +30:30 分钟后关机
  • reboot:重启
  • shutdown -k +2 "一会要关机,抓紧保存":向所有用户输出关机通知,但不做真正操作。+2表示通知的关机时间是现在之后的两分钟。

    帮助命令

    如果我们忘记某些命令或其参数如何使用,需要使用帮助命令。

  • whatis <命令>:显示命令的简短描述。

  • <命令> -help:显示使用方法概述和参数列表。
  • man <命令>:为命令提供相关帮助文档,页面分成章节。
  • info <命令>:类似man命令,但是通常比它更详细。

    切换路径命令

  • cd <位置>:切换到指定位置;

  • cd ~:切换到用户家目录;
  • cd -:切换到上一个所在目录;

    passwd

    修改密码。

  • 单独的passwd:修改使用该命令的用户的密码。

  • passwd 用户名:root用户可以使用该命令修改其他用户的密码。

    Linux用户

    登录Linux系统时,必须通过指定的用户名和密码进行登录。不过所有的用户在Linux眼中都是一个数字,用userid(一个32位的二进制整数)来表示。可以通过id命令,查看自己的userid。userid为0的表示根用户。同时,在系统运行的每个进程、所创建的每个文件都有一个userid,这个userid代表运行这个程序的用户,或者文件的所有者。Linux系统中,用户被保存在/etc/passwd文件中。用户又分成三类:一般用户(userid>=500)、超级用户(userid=0)和系统用户(userid<500)。
    02-Linux常用命令 - 图6

    查看用户

    Linux是一个多用户系统,即很多个用户同时操作一个设备中的资源,但不同的用户有不同的权限。这些用户中有一个是超级用户(root),它是权限最高的用户。root用户在终端中的输入命令以#开头,其他的用户以$开头。
    02-Linux常用命令 - 图7
    02-Linux常用命令 - 图802-Linux常用命令 - 图9

  • who am i:列出使用该命令的用户、所用的终端名和注册到系统的时间。 02-Linux常用命令 - 图10

    用户组

由于不同的用户有不同的权限。为了给不同的用户赋予相同的权限更加方便,诞生了用户组的概念。即同一个用户组里的人员可以有相同的某些权限。Linux中的用户或文件至少属于一个用户组

添加用户

useradd或者adduser。执行后的具体操作(不同发行版有区别):

  • 分配一个新的userid,数值等于之前所有userid中数值最大的加一。
  • 在/etc/passwd中添加一行。
  • 为用户在/home下建立一个新的目录(用户的家目录),目录名和用户名相同。 02-Linux常用命令 - 图11
  • 在/etc/group中为用户建立一个新的个人组。
  • 在/var/spool/mail中创建用户的邮件文件。

02-Linux常用命令 - 图12

删除用户

userdel <用户>。删除用户及部分相关信息,家目录和邮件文件还会存在。

  • -r:包括家目录和邮件池等在内的所有用户信息都会被删除。

    添加/删除组

  • groupadd <组名>。所有的组都保存在/etc/group文件中。

  • groupdel <组名>。删除组。

/etc/passwd & /etc/shadow

  • /etc/passwd有7列:用户名、密码、用户id、主要组id、备注信息、主目录、登录shell。
    • 各列之间使用:分割。同时密码一般都是x(被加密了),加密后的密码在/etc/shadow中。

02-Linux常用命令 - 图13

  • /etc/shadow有9列:用户名、加密密码、最近更改密码的日期、密码不可更改的天数、密码需要重新更改的天使、密码更改期限前的警告期限、密码过期的宽限时间、帐号失效日期、保留字段。但这里显示的密码是加密的。 02-Linux常用命令 - 图14

    查看用户所属的组

  • groups:查看使用此命令的用户所属组;

  • groups <用户>:查看指定用户所属组。用户可多选,使用空格隔开。

    /etc/group & /etc/gshadow

  • /etc/group:组名、组密码、组id、组中附加用户。

02-Linux常用命令 - 图1502-Linux常用命令 - 图16

为用户添加备注

  • 在创建的时候添加:useradd -c <备注> 用户名
  • 创建后修改:usermod -c <备注> 用户名。(会清除之前的备注信息)。

    usermod

    改变用户某些属性的命令。

  • -l:改变用户的名称;

  • -G:改变用户支持的用户组,会退出原来的附属组,配合-a不会删除之前组; 02-Linux常用命令 - 图17
  • -L:不让该用户登录;
  • -e:设定用户失效日期。日期格式:“YYYY-MM-DD”。
  • -s:改变Shell。新创建的用户默认使用bash,此选项修改登录Shell。

    • 如:usermod -aG 组名 用户

      gpasswd

      gpasswd -d userName groupName:从组中删除用户

      切换用户

  • 超级用户输入su 用户名可以不用输入密码切换到其他用户。

  • 普通用户切换到其他所有用户(su 用户名)需要输入密码。

    文件系统

    操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

  • 文件:文件系统中存储数据的一个命名的对象。即使是空文件(不包含用户数据)也会为操作系统提供其他信息。

  • 目录:包含文件项目的一类特殊文件。Linux中在应用层上来看目录和文件是被区分开来的。 02-Linux常用命令 - 图18

    查找文件

    find <路径> -name '正则表达式':如find . -name '*.so',查找当前目录下以.so结尾的文件。

    cat

  • cat <文件>:显示文件的内容。文件可以多选,之间用空格隔开。

  • cat f1 > f2:把f1文件的内容合并到f2文件中。

    touch

  • 文件不存在:则创建一个空的新文件;

  • 文件存在:把文件的时间标签更新为系统当前时间。

    grep

    命令的意思:global search regular expression and print out the line。

    部分选项如下:

  • -a:将 binary 文件以 text 文件的方式搜寻数据

  • -c:计算找到 ‘搜寻字符串’ 的次数
  • -i:忽略大小写的不同,所以大小写视为相同
  • -n:顺便输出行号
  • -v:反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
  • --color=auto:可以将找到的关键词部分加上颜色的显示喔!

    举例如下:

    02-Linux常用命令 - 图19

    管道命令

    管道命令是用来过滤信息的,比如我们之前grep -n root /etc/passwd之后显示带有root的行,如果想在结果中再按其他条件过滤就要使用管道命令:“|”。
    02-Linux常用命令 - 图20

    统计文件信息

    wc:统计指定文件的字节数(-c)、字数(-w)、行数(-l

  • 例子:统计文件a中以b开头的行数:cat a | grep ^b | wc -l

    创建目录

    mkdir <文件名>

  • -p:父目录不存在时也可以创建。

    删除文件/目录

    rm -rf <文件名>-r表示递归删除;-f表示强制删除,不询问。

    列出文件

    ls命令列出指定目录的内容。
    02-Linux常用命令 - 图2102-Linux常用命令 - 图22

  • -a:显示所有文件。之前显示的没有隐藏文件(以.开头)。

  • -h:文件大小以人类可读的方式显示。需要配合-l使用。

    拷贝文件

    cp <文件> <目录>
    02-Linux常用命令 - 图23

    剪切文件

    mv <文件> <目录>
    02-Linux常用命令 - 图24

    修改文件名

    mv <文件> <新文件名>
    02-Linux常用命令 - 图25

    文件结构

    Linux中所有的文件都由两部分构成。

  • 索引结点:包含此文件的信息,如文件权限、文件主、文件大小等。

  • 数据:文件的实际内容,有没有数据都可以。

02-Linux常用命令 - 图26

链接

链接就是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。

  • 硬链接:硬链接是多一个文件名和inode结点关联。由于它依赖于inode,所以不能在不同的文件系统之间做硬链接。硬链接不能用于目录。用法:ln <被链接的文件> <新的文件名> 02-Linux常用命令 - 图27
  • 软连接:软连接是再拓展出一份inode,这个inode指向的区域保存如何找到真正数据的信息。用法:ln -s <被链接的文件> <新的文件名> 02-Linux常用命令 - 图28

    用户和权限

  • 文件主:文件所有者,并赋予唯一的注册名。只有文件主或root才有权利用chown命令改变文件的所有关系(UID)。

  • 用户组:通常,组中包含了有相同需求的用户。文件主或超级用户(root)可以利用chgrp命令改变文件的GID。
  • 用户存取权限:Linux系统中规定了4种不同类型的用户:文件主、同组用户、其他用户、超级用户。
  • 3种访问文件或目录的方式:r(读)、w(写)、 x(可执行或查找)。 02-Linux常用命令 - 图29

    chmod

  • 只有文件主或超级用户root才有权用chmod命令改变文件或目录的存取权限。

  • 使用格式:chmod [选项] MODE 文件。MODE可多选,之间用,隔开。
    • MODE:<who><操作符号><权限>
      • who:u——user、g——group、o——others、a——all(可叠加)。
      • 操作符号:+ 添加- 取消= 赋予
      • 权限:r 读、w 写、x 执行。(可叠加)
  • 举例 02-Linux常用命令 - 图30
  • 以绝对方式改变权限
    • 置为1表示有相应权限,置为0表示没有相应权限。例如:
      r w x r - x r - -
      1 1 1 1 0 1 1 0 0
    • 转换成十进制是754。chmod 754 aachmod u=rwx,g=rx,o=r aa一致。

02-Linux常用命令 - 图31

umask

官方的解释是掩码,其实就是用户创建文件或目录后它们的默认权限。不过和chomd有区别的是它把有权限设置为0,没权限设置为1,而且umask命令显示的是八进制数字。我的umask显示的是0022,转换成二进制就是000 010 010,转换成权限就是rwx r-x r-x。所以创建的目录的默认权限就是这个。但是Linux不允许新创建的文件有可执行权限,所以创建的文件的默认权限是rw- r-- r--
02-Linux常用命令 - 图32

chown

改变某个文件或目录的所有者。chown <用户> <文件>/<目录>

chgrp

改变文件或目录所属的用户组。chgrp <用户组> <文件>/<目录>

文件权限的理解

  • 可读(r):浏览文件中的内容;
  • 可写(w):修改文件中的内容;
  • 可执行(x):将文件作为命令使用。

    目录权限的理解

  • 可读:只能查看到目录下的子目录名和文件名;

  • 可执行:可以访问目录中的文件,包括子目录;
  • 可写:要在目录下添加删除目录和文件,必须有可执行的权利。

    压缩 & 打包 & 解压缩

  • tar -zcvf:打包压缩后的文件名 要打包压缩的文件(多个之间用space分开)

    • z:调用gzip压缩命令进行压缩
    • c:create,打包文件
    • v:显示运行过程
    • f:指定文件名
  • tar -xvf xxx.tar.gz -C 位置
  • x:extract,解包
  • v:显示允许过程
  • f:指定文件名

    别名

    我们可以使用ll代替ls -l。但是对于ls -a,系统并没有提供la命令,不过我们可以使用alias定义la
    02-Linux常用命令 - 图33

    定时任务

    cron工具允许用户配置要定期运行的任务,通过配置crontab的文件可以指定要运行哪些作业以及何时运行。配置crontab文件使用命令crontab。命令由6个用空白分隔的字段组成:
字段 minute hour day of month month day of week command to run
举例 45 16 * * * date>/tmp/date.txt
范围 0-59 0-23 1-31 1-12 0-7 *

corntab命令的参数:

  • -e:编辑crontab的内容(会打开一个文件);

02-Linux常用命令 - 图3402-Linux常用命令 - 图3502-Linux常用命令 - 图36

  • -u:只有root才能执行这个选项,帮助其他用户建立/删除crontab
  • -l:查看crontab的工作内容: 02-Linux常用命令 - 图37
  • -r:删除crontab的工作内容; 02-Linux常用命令 - 图38

    成组命令

    被成组命令约束的命令被认为是一条命令。

  • { 命令; }:需要有空格和命令隔开,且命令后面需要“;”。不创建子进程。

  • (命令):不强制需要有空格和命令隔开,不强制需要“;”。创建子进程完成功能。

例如下例把两条ls命令的值全部由管道输入给grep。
02-Linux常用命令 - 图39

sort

sort lines of text files,将文本文件内容加以排序,以行为单位来排序,但不改变文件原始内容。

  • 默认排序规则:从第每行一个字符开始,依次按照ASCII码值进行比较。
  • -n:按数字的大小排序,默认情况下把数字看成字符。
  • -r:反转排序效果。 02-Linux常用命令 - 图40

    uniq

    文件输出时,删除重复行或列。但如果重复的行不连续则不起作用。

    文件类型

  • -:普通文件

  • l:符号链接文件
  • d:目录
  • s:套接字文件(socket)
  • b:块设备文件
  • p:命名管道文件(pipe)
  • c:字符设备文件

    ex1:用户管理

    在系统中添加三个用户:Blondie、Prince和Madonna

    02-Linux常用命令 - 图41

    他们都希望属于次要组music

    02-Linux常用命令 - 图4202-Linux常用命令 - 图43

    Prince要求使用/bin/csh作为登录shell

    02-Linux常用命令 - 图44

    Madonna的使用期限为2020-12-1。

    02-Linux常用命令 - 图45

    Blondie决定加入摔跤俱乐部wrestle组。

02-Linux常用命令 - 图4602-Linux常用命令 - 图47

Prince要将他的用户名改为tafkap。

02-Linux常用命令 - 图48

Madonna开始对风水感兴趣,加入组fengshui,并要求将她的userid改为888。

  • groupadd fengshui
  • usermod -a –G fengshui Madonna
  • usermod –u 888 Madonna

    Prince又要改名字了,我们觉得太麻烦,干脆锁住他的帐号。

  • usermod –L Prince

    Blondie最近表现不好,我们决定将他踢出去。

  • userdel –r Blondie(想把该用户所有信息都一起删除可以使用-r)

    ex2:文件目录管理

    Ventura同时属于次要组governor和wrestle。

    02-Linux常用命令 - 图49

    Ventura撰写了自己的摔跤计划plans.txt,并将它放到目录/tmp下。

    02-Linux常用命令 - 图50

    Ventura希望将他的摔跤计划和用户Hogan以及其他摔跤组的成员共享,但他不希望组外的成员访问。

    02-Linux常用命令 - 图51

    用户Hogan想往用户Ventura的计划上添加内容,可以吗?怎么做?

    02-Linux常用命令 - 图52

    用户Hogan对他自己的贡献很满意,他希望将这个计划公开,让所有人都能读到这个文件,可以实现吗?

    不可以,只有root和文件主能修改文件访问权。