Linux基本命令

[用户名@主机名 文件夹名] #/$为终端的基本格式,其中文件夹名为~时,代表主文件夹,#代表root用户,$代表普通用户

Linux系统中,一切皆是文件

Ctrl + U用来清除已输入但并未执行的命令

目录结构

image-20220628184310315

含义

目录 含义
bin 本意是二进制的意思,所有能够执行的命令都会存储到这个目录下,这个目录并不是真正在根目录下的,是一个映射后的目录,真实是的位置在usr/bin
sbin 系统二进制,是系统的命令目录,也是一个映射后的目录,真实的地址在usr/sbin
lib/lib64 库目录,用来存放应用程序共享库的文件,实际位置usr/libusr/lib64
usr 全称为Unix System Resources
boot 挂载的引导分区目录
dev 全称为device,设备的目录,将所有的硬件设备映射到不同的文件上
etc 存放一些系统管理的配置文件
home 存放每个用户的主目录,不包含root用户的主目录
root 相当于root用户的主目录
opt 可选目录,可以理解为为第三方软件预留的目录
media 媒体目录,可以识别一些可移动设备,例如U盘、光驱等,当插入U盘后,会将分区挂载到这个目录下
mnt 也是一个挂载目录,和media目录差不多
proc process,进程目录,存放当前硬件和进程的一些信息
run 存放系统运行以来的所有实时信息
srv service的缩写,存放系统服务相关的东西
sys system,存放系统硬件信息的相关文件
tmp temporary,临时文件目录
var variable,可变目录,存储一些不断变化的东西,例如:日志等

opt、home、tmp、root、var目录下一般可以随便动

Vim

模式:

  • 一般模式:直接进来的页面,主要用来进行删除、复制、粘贴
  • 编辑(插入)模式:用来编辑文本,按iao进入
  • 命令模式:进行命令操作,按:或者/进入

命令

基本命令:

  • w:写入文件(相当于保存)

  • u:相当于撤销

  • q:退出

一般模式

  • p:粘贴

  • yy:复制当前一行

    • 先按数字,再按p,代表连续粘贴相应数字的行数
    • 先按数字,再按yy,代表连续复制相应数字的行数,或者y数字y
    • y$代表复制光标处到这行末尾
    • y^代表复制光标处前一个字符到这行开头
    • yw代表复制一个单词
  • dd:删除一行,带有数字代表删除多行

    • dw代表删除一个单词
    • d$删除光标到末尾
    • d^代表删除开始到光标
    • db代表删除上一个词
    • de代表删除下一个词
    • dgg代表删除从开始位置到当前行
    • dG代表删除这一行到最后的位置
  • ^代表移动到当前行首

  • $代表移动到当前行尾

  • w代表对单词进行操作,每按一次w就会跳转到下一个单词词首

  • e代表移动到下个单词的词尾

  • b代表移动到上一个词的词首

  • x代表剪切光标处的一个字符,大写的X(shift + x)代表剪切光标之前的字符(类似于Windows的退格)

  • r代表更改当前光标位置的字符,大写的R代表依次替换光标处的字符,替换完成后,需按esc

  • 大写的Hshift + hgg代表移动到这个文本的开头

  • 大写的G、大写的L代表移动到这个文本的末尾,数字 + G移动到第数字

:set number或者:set nu代表开启行号显示,:set nonumber关闭行号

插入模式

按下i即可进入插入模式

插入模式插入的位置是当前光标之前,退格键将会删除光标之前的字符,delete键删除光标之后的内容

进入插入模式:

i:在当前光标前

I:在当前行首

A:在当前行尾

o:在当前光标下一行,相当于行尾按回车,在一个空行

O:在当前光标的上一行,相当于将光标所在及其后内容下移一行,并将光标指向上一行的空行

image-20220629160127551

命令模式

已修改但不想报错,退出时需要使用:q!命令

直接退出q

直接保存w

保存并退出wq

/要查找的内容n代表查找下一个,N代表查找上一个

  • noh取消查找到的高亮显示

:s/要替换的内容/要替换后的内容:将会替换光标所在行的第一个要替换的内容

  • :s/要替换的内容/要替换后的内容/g:将会替换光标所在行的所有要替换的内容
  • :%s/要替换的内容/要替换后的内容:将会替换每一行的第一个要替换的内容
  • :%s/要替换的内容/要替换后的内容/g:将会替换每一行的所有要替换的内容

image-20220629163105142

系统管理

正在执行的程序和命令称为进程(process),启动之后一直存在、常驻内存的进程称为服务

可以通过ls /etc/init.d查看服务(centOS6

systemctl start | stop | restart | status | disable | enable 服务名ctl全称为controldisable关闭自启动,enable开启自启动

init进程是系统启动的第一个进程,其他自启动的进程将由init进程启动

image-20220629195517900

centOS启动模式简化为两种:

  • multi-user.target多用户有网络,但无图形界面
  • graphical.target多用户有网络,有图形界面

获取系统运行级别systemctl get-default

查看开机自启动的服务:systemctl list-unit-files

  • enable代表开机自启动
  • disable代表不开机自启动
  • static代表不能确定是否自启动,因为这个服务是与其他服务相关联的

关机

shutdown,默认需要等一分钟后才会自动关机

  • 在关机前将会执行sync,即将数据从内存同步到硬盘中

shutdown -c,取消关机

shutdown now,立即关机

shutdown 数字,将会在数字分钟后关机

shutdown hh:mm,指定关机时间

reboot重启,与shutdown -r now作用一样

显示帮助信息

命令 --help,这种方式看到的帮助信息是简洁化的帮助信息

或者

man 命令

man

全称为manual,中文含义为手册,音标为ˈmænjə(wə)l

按空格键、f显示手册的下一页

按回车键显示手册的下一行

按b回滚一页(向上翻页),按q退出

help

有一些命令是内嵌到shell中的,无法通过man进行查看帮助,例如cd,但可以通过help 命令名查看,直接输入help命令可以查看全部的内嵌命令

可以使用type 命令名查看这个命令类型(内嵌或者外部)

文件操作命令

命令 英文 作用
ls list 查看当前目录下的文件列表,后边也可以跟着路径,跟着路径代表查看这个路径下的文件或者文件夹
pwd print work directory 查看当前所在的文件夹,diˈrektərē目录
cd 目录名 change directory 切换文件夹
touch 文件名或者路径文件名 touch 如果文件不存在,新建文件
mkdir 文件夹名 make directory 新建文件夹,多个文件夹用空格隔开,例如mkdir d1 d2
rm 文件名 remove 删除指定的文件
clear clear 清屏
rmdir 删除文件夹,文件夹非空时不能直接删除,后边可以跟多个文件夹名称

当文档中显示的某个命令被[]括起来时,代表这个命令可有可无

cd -返回上一次的目录

cd后边如果什么都不跟,代表回到用户主目录

mkdir不能嵌套创建,例如mkdir a/b/c,代表最终创建c这个文件夹,如果没有a或者b,那么将无法创建,但可以mkdir a a/b a/b/c实现相应的效果,如果想要实现嵌套创建,可以添加-p参数,例如mkdir -p a/b/c

ls

参数 含义
-a或者--all 显示所有文件,包括隐藏的文件
-l 以列表的方式显示信息,相当于ll,包括文件的属性和权限信息
h 配合-l使用,单独使用没有用处,更加方便的显示文件大小

Linux中,文件、文件夹的名称的最大长度为256,以.开头的为隐藏文件,通过ls -a可以显示所有的文件,所有文件中只带有.的为当前目录,只带有..的为上级目录

执行ls -l文件会以列表的方式显示,左侧第一列会显示一堆字母,第一个如果是字母d代表是文件夹,如果是文件,则为-

ls -lh或者ll -h查看的文件详情中所包含的文件大小会添加单位、

  • [root@VM-24-15-centos learn]# ll -h
    total 144K
    drwxr-xr-x 2 song song 4.0K Jul  3 11:30 abc
    -rwxr-xrwx 1 root root  29K Jul  3 10:39 aria2.sh
    -rw-r--rw- 1 root root   68 Jul  3 10:39 change.txt
    lrwxrwxrwx 1 root root    8 Jul  3 10:39 do -> download
    drwxr-xrw- 2 root root 4.0K Jul  3 10:39 download
    drwxr-xrw- 2 root root 4.0K Jul  3 10:39 downloads
    -rw-r--rw- 1 root root  86K Jul  3 10:56 first.txt
    -rw-r--rw- 1 root root  268 Jul  3 10:39 log1.txt
    -rw-r--rw- 1 root root   25 Jul  3 10:39 newnew.tx
    

多个命令可以分开写也可以一块写,例如以列表的形式显示所有的文件

ls -al #一块写
ls -a -l #分开写

在权限信息中,开头为d就代表这是一个目录,例如downloadslearn

[root@VM-24-15-centos ~]# ll
total 436
-rwxr-xr-x  1 root root  29496 Dec 11  2021 aria2.sh
-rwxr-xr-x  1 root root  16153 Feb 11 18:23 box.sh
-rw-r--r--  1 root root 102260 Feb 12  2020 bt-libmcrypt-2.5.8.rpm.1
-rw-r--r--  1 root root  61492 Feb 12  2020 bt-mcrypt-2.6.8.rpm.1
-rw-r--r--  1 root root 132484 Feb 12  2020 bt-mhash-0.9.9.9.rpm.1
drwxr-xr-x  2 root root   4096 Dec 11  2021 downloads
-rwxr-xr-x  1 root root  24760 Nov  5  2021 install
-rw-r--r--  1 root root  24760 Nov  5  2021 install.sh
drwxr-xr-x  2 root root   4096 Jun 29 19:06 learn
drwxr-xr-x  3 root root   4096 Apr  5 10:38 qinglong
drwxr-xr-x  8 root root   4096 Nov 27  2021 ql
drwxr-xr-x  2 root root   4096 Dec 18  2021 searx
drwxr-xr-x  4 root root   4096 Jan 20 21:21 shiori
-rw-r--r--  1 root root   2421 May  8 12:13 superbench.log
-rw-r--r--  1 root root      0 Dec 11  2021 wget-log
-rw-r--r--  1 root root      0 Dec 11  2021 wget-log.1
drwxr-xr-x 12 root root   4096 Nov 26  2021 wizdata
drwxr-xr-x 13 www  www    4096 Mar  3 15:37 workspace

查看文件夹大小du

通过ll看到的文件夹大小并不是实际的大小,而是文件夹自己的大小,并不包含子文件、目录的大小

通过du命令看到的大小将会把所有子文件夹的大小都列出来,最后还有个总大小,单位是k

du的全称为disk usage,usage中文为用法、运用

# 普通用法,列出来的大小单位为k
du 目录/文件/文件列表

#自动的显示单位,根据实际的大小自动转换为G、M、K等
du 目录/文件/文件列表 -h

# 显示每个子目录、文件大小
du 目录 -a

# 显示每个所有文件和子目录大小后,再显示总和
du 目录/文件/文件列表 -c

# 只显示总和
du 目录/文件/文件列表 -s

# 指定统计子目录深度为第n层,更深层的仍会统计,只不过不会输出
--max-depth=n

以上命令也可以组合使用,例如du -sh代表以合适的单位只显示总和大小

例如统计根目录每个文件夹大小可以使用du --max-depth=1 -ah

查看磁盘空间使用情况df

直接使用df命令即可,df -h代表将会以适合的单位显示硬盘空间使用情况

df全称为disk free

信息中,从左到右依次是

文件系统      容量  已用 可用 已用% 挂载点

通常只需要看挂载点为/的分区的信息就可以,这个分区中的容量为实际可用的

查看内存使用情况free

free可以直接查看内存使用情况,free -h代表将会以适合的单位显示内存的使用情况

列出当前块设备的挂载情况lsblk

lsblk命令,lsblk查看详细的情况

复制

cp [选项] 源文件 目的位置,复制单个文件

cp [选项] 源文件 目的位置,复制整个文件夹

也可以复制并覆盖,目的位置填写为一个文件

[root@VM-24-15-centos learn]# cp first.txt ../downloads/a
cp: overwrite '../downloads/a'? y

如果要覆盖的文件有很多,那么每个文件可能提醒要不要覆盖,可以添加\用来直接确认,例如\cp first.txt ../downloads/a


这里的反斜杠\代表使用原生命令

[root@VM-24-15-centos learn]# type cp
cp is aliased to `cp -i'

可以看到,执行cp就相当于执行cp -i,又比如之前的ls就相当于执行ls --color=auto,如果执行\ls就是使用ls的原生命令,此时的文字颜色都是白色


可以执行:

[root@VM-24-15-centos learn]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias php='php -c /www/server/php/74/etc/php-cli.ini'
alias php74='php74 -c /www/server/php/74/etc/php-cli.ini'
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

查看所有的别名

删除

rm [选项] 文件名删除单个文件

[root@VM-24-15-centos learn]# rm t2
rm: remove regular empty file 't2'? y

rm -f 文件名直接删除某个文件,不给提示

rm -r 文件夹名删除某个文件夹(包含子文件),每次将会询问这个文件是否要删除

rm -rf 文件夹名直接删除某个文件夹(包含子文件),不询问

*代表匹配所有的文件/文件夹

移动

mv 文件名 文件夹路径将一个文件移动到某个位置

mv 文件名 路径/文件名将一个文件移动到某个路径并重命名

mv 文件名 当前路径/文件名相当于将当前目录下的一个文件移动到当前文件并修改名字,相当于重命名

查看文件

cat 文件名查看文件

cat -n 文件名查看文件并显示行号

全称为catch捕捉

more 文件名相当于文件分屏的查看器,全屏并按页显示文件内容

  • 空格翻页
  • q退出
  • Ctrl + F下滚一屏,F为大幅度滚动
  • Ctrl + B上滚一屏,B为大幅度滚动
  • =输出当前行号
  • :f输出当前文件名和行号

less 文件名也用来文件分屏查看,比more更强大,是对文件的部分加载,可用于查看比较大的文件

  • 空格翻页
  • q退出
  • pagedown下翻
  • pageup上翻
  • Ctrl + F下滚一屏,F为大幅度滚动
  • Ctrl + B上滚一屏,B为大幅度滚动
  • =查看显示的行数范围,文件名,文件大小,字符数量,已查看的字符数量,进度
  • g直接转到文件开头,G直接转到文件末尾
  • /内容搜索关键词,然后按n 表示向下搜索,N表示向上搜索
  • ?内容也可以搜搜关键词,只不过按键与/相反,按n 表示向上搜索,N表示向下搜索

echo

将内容输出到控制台

image-20220701175317147

输入echo $并按tab键可以查看系统的环境变量

输出重定向

可以将一个命令的输出结果写到一个文件中

命令 > 文件名将会把命令的输出写入到一个文件中,每执行一次覆盖整个文件,而不在控制台中显示

命令 >> 文件名将会把命令的输出追加到一个文件末尾,而不在控制台中显示

head 查看文件头部内容

head 文件名将会查看文件中前10行的内容

head -n 文件名将会查看文件中前n行的内容

tail 查看文件尾部内容

tail 文件名将会查看文件中后10行的内容

tail -n 文件名将会查看文件中后n行的内容

tail -f 文件名可以实时的追踪文件内容的变化,将会把新增的内容显示出来

  • Ctrl + S暂停追踪
  • Ctrl + Q继续追踪

软链接

ln -s 目录/文件 软链接名

删除:rm 软链接名是删除这个软连接

  • rm 软链接/是删除软连接下的所有文件

此时使用pwd命令看到的路径是在当前软连接下的,如果想要看原始的路径,需要pwd -P(大写的P),cd 软连接名进入的是软连接下的文件夹,如果想要进入原始路径,也可以cd -P 软链接名

查找文件find

从指定的目录向下递归的查找文件,将满足条件的显示出来,并且包括隐藏文件

格式如下:

find [搜索范围(路径)] [选项]

搜索范围可以不给出,默认以当前路径为基准

选项 含义
-name 按照文件名查找文件
-user 按照文件所有者查找文件
-size 按照指定的大小查找文件,单位:b块(512字节)、c字节、w字(2字节)、k(千字节)、M、G
  • 按文件名

    • find 路径 -name 文件名称
      
    • 可以使用通配符*

      • 例如查找.java结尾的文件

      • find 路径 -name *.java
        # 或者
        find 路径 -name "*.java"
        
  • 按用户

    • find 路径 -user 用户名
      
  • 按大小

    • find 路径 -size 大小
      
    • +表示大于

    • -表示小于

    • 缺省等于

    • 例如查找等于10M的文件

      • find 路径 -size 10M
        
    • 查找小于10K的文件

      • find 路径 -size -10k
        
    • 查找大于10K的文件

      • find 路径 -size +10k
        

定位文件路径locate

locate中文为定位,是利用事先建立好的locate数据库实现快速定位文件,无需遍历整个系统,查询速度比较快,为保证结果的准确性,管理员必须定期更新locate

一般情况下,这个数据库每天更新一次

为保证查询结果的准确性,需要使用updatedb进行手动更新数据库,第一次进行更新数据库会比较慢

locate 字符

只要包含相关字符的文件都会被查出来

which

可以进行定位命令

which 命令

例如

[root@VM-24-15-centos learn]# which java
/usr/lib/jvm/jdk-17.0.2/bin/java

whereis

可以查看某个命令是位于哪里的命令

whereis 命令

例如

[root@VM-24-15-centos learn]# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/lib/jvm/jdk-17.0.2/bin/java /usr/share/man/man1/java.1.gz

grep

相当于筛选、过滤、查找

grep [选项] 匹配内容 [源文件]

# 显示行号,即匹配的内容在第几行出现了
grep -n 匹配内容 [源文件]

例如查看某个文件中含有关键词的行

grep [选项] 匹配内容 文件名

管道符|,表示在上个命令的输出结果上进行操作,相当于作为一个参数传到后边

# 可以在一个文件输出结果中筛选内容
cat 文件名 | grep 内容

# 筛选文件列表
ls | grep 内容

wc

全称为word count

wc [操作] [文件]

也可以结合grep

输出结果行数 单词数 文件大小 文件名

tree命令

可以将当前目录中的所有文件以树状进行显示

压缩/解压缩

分为:

  • gzip只能压缩文件,而不能压缩目录,压缩后不保留原来的文件,同时压缩多个文件会产生多个压缩包

    • gzip 文件名压缩
    • gunzip 文件名解压缩
  • zip压缩后保留源文件,可以压缩目录

    • zip [选项] 压缩后的文件名 文件列表
      • 选项-r代表压缩目录
      • 压缩一个目录时,如果希望把目录中的所有文件也放到压缩包,可以添加这个参数
    • unzip 文件名代表将文件解压到当前目录
    • unzip -d 目录名 文件名代表将文件解压到指定目录
  • tar进行打包归档,一般不压缩文件,可以配合gzip实现压缩

    • tar [选项] xxx.tar.gz 要打包的文件

    • -c产生打包的tar文件

    • -x解包tar

    • -z打包时同时压缩,结合使用了gz,也有解压缩的意思

    • -f指定压缩后的文件名,这个参数是必须的,要放到最后

    • -C解压到指定目录、打包到指定的目录

    • -v显示解压和压缩过程中的详情信息

      • 打包tar

        • 打包,并在当前目录生成打包后的文件

        • # 不显示详细过程
          tar -cf 文件名 文件列表
          # 显示详细过程
          tar -cvf 文件名 文件列表
          
      • 解包tar

        • 解包到当前目录

          • # 不显示详细过程
            tar -xf all.tar
            # 显示详细过程
            tar -xvf all.tar
            
        • 解包到指定目录

          • # 不显示详细过程
            tar -xf all.tar -C 文件夹名
            # 显示详细过程
            tar -xvf all.tar -C 文件夹名
            
      • 打包并压缩

        • # 不显示详细过程
          tar -zcf all.tar
          # 显示详细过程
          tar -zcvf all.tar
          
      • 解压并解包

        • # 不显示详细过程
          tar -xzf all.tar -C 文件夹名
          # 显示详细过程
          tar -xzvf all.tar -C 文件夹名
          

history

用来查看历史执行过的命令

history查看输入过的所有命令

history 数字查看输入过的后数字次的命令

历史记录中的命令结构为:数字 时间 命令

也可以重复执行历史记录中的命令,只需要!数字,即可执行相应的命令

history -c可以清除历史记录中的所有命令

date

date命令可以查看当前日期

date +%Y年%m月%d日%H时%M分%S秒,时间戳%s可以以特定的格式显示时间

image-20220701195100010

cal日历

cal代表获取当天所在月份的日历

cal -3可以查看后一月、当月、前一月的日历

cal -m日历从周一开始显示(默认周日)

cal 数字代表查看数字年的日历

cal -y可以查看本年度的日历

用户

useradd 用户名添加新用户

useradd -g 组名 用户名将新用户添加到某个组

所创建的用户都会在/home文件夹下创建一个文件夹

useradd -d 路径/文件夹名 用户名手动指定创建的这个用户的文件夹名

passwd 用户名用户名设置一个密码

id 用户名可以查看是否存在这个用户

  • uid用户的id
  • gid用户组的id

cat /etc/passwd可以查看所有的用户,所查出来的信息格式如下

  • 用户名:密码占位符:用户UID:用户组GID::所对应的主目录:用户登录的shell

切换用户su

su 用户名su全称为switch user

root用户可以随便切换用户且不需要密码

exit退出用户

who查看当前用户

sudo

可以让普通用户临时获取管理员权限,需要事先在/etc/sudoers文件中进行配置

按照root用户的配置进行配置就可以使这个用户获取到所有的权限

当这个用户访问无法访问的文件夹时,添加sudo即可访问

删除用户

userdel 用户名删除用户时不会删除这个用户的文件夹

user -r 用户名删除这个用户时同时删除这个用户的文件夹

6900多个学生,4900多个县级重点高中,2700多个市级别重点高中,1100多个省级重点高中。5100多个县市区直属初中

用户组

创建的用户默认都对应自己的用户组,每个用户是一个用户组,用户组的配置文件在/etc/group

groupadd 用户组名新建一个用户组

usermod -g 用户组名 用户名修改这个用户的用户组

groupdel 用户组名删除这个用户组

/etc/sudoers文件中,可以看到类似于:

%wheel	ALL=(ALL)	ALL

的配置项,wheel用来表示用户组,可以按照这个格式定义用户组

文件属性和权限

使用ls -lll查看的文件的完整信息中第一个字段代表文件的权限信息,共10位,第一位单独一组,后边9位每三位一组

  • 第一位是否可以读,第二位是否可以写,第三位是否可以执行,如果没有相应权限,则为-
  • r可以读取
    • 作用在文件:可以读取文件
    • 作用在目录:可以读取这个目录,即可以用ls查看这个目录
  • w可以写入
    • 作用在文件:可以修改文件,但并不代表可以删除这个文件,删除一个文件的前提是对所在的目录有写权限
    • 作用在目录:可以修改这个目录,目录内可以创建、删除、重命名文件/目录
  • x可以被执行
    • 作用在文件:可以执行相应的文件,例如脚本等
    • 作用在目录:可以进入这个目录,即可以执行cd
   权限       硬链接数 属主(文件所有者) 用户组  大小  最后的修改时间  文件名
-rwxr-xr-x      1           root      root  29496 Dec 11  2021 aria2.sh
-rw-r--r--      1           root      root 102260 Feb 12  2020 a.rpm
drwxr-xr-x      4           root      root   4096 Jul  1 19:13 learn
  • 第一位,代表文件的类型
    • 如果以-开头,代表这是一个普通文件,可以用文本编辑器打开
    • 如果以d开头,代表这是一个普通文件夹
    • 如果以l开头,代表这是一个链接
    • 如果以lb开头,代表这是一个设备文件
      • c为字符设备文件,例如键盘输入的字符
      • b为块设备文件,例如硬盘
  • 234
    • 表示属主权限,即该文件的创建者、所有者的权限
  • 567
    • 属组权限,即当前用户组的权限
  • 8-10
    • 其他用户的权限

新建的文件夹默认的硬链接数为2,这两个硬链接分别是...

更改文件权限 chmod

chmod全称为change mode

格式:chmod 分类(ugoa其中的一个字母)符号(+-=)权限(rwx) 文件/目录

  • 分类
    • u属主权限
    • g用户组权限
    • o其他用户权限
    • a以上的全部权限(可以不写)
  • 符号
    • +加上某个权限
    • -减去某个权限
    • =赋予某个权限

例如

chmod o+r folder

如果一个普通文件拥有x执行权限,那么此时显示的是绿色的

修改权限方式2:chmod 3位数字 文件名/文件夹名

  • 3位数数字的取值:1,2,4,3,5,6

  • 3位数字从左到右依次设置属主、属主用户组、其他用户的权限

  • 其中r = 4, w = 2, x = 1

  • 例如777代表属主、用户组、其他用户都有读写执行的权限

  • 646代表属主有读写权限、用户组有读权限,其他用户有读写权限

  • 相当于对这三个权限进行了二进制编码,相应位置有权限为1,没有则为0

  • 通常一个普通文件只需要644权限就可以了,表示属主有读写权限、用户组有读权限、其他用户有读权限,这也是创建一个文件时默认的权限

  • 一个文件夹默认是755权限,即属主拥有所有权限,用户组、其他用户有进入和读取的权限

chmod -R 权限 文件夹名可以给这个文件夹设置权限时递归的修改这个文件夹下的所有的子文件/文件夹的权限

更改文件/文件夹所有

者(属主)和所属的组

更改所有者:

chown 用户名 文件夹名/文件名

#递归的修改子文件/子目录的属主
chown -R 用户名 文件夹名

更改用户组:

chgrp 组名 文件夹名/文件名

#递归的修改子文件/子目录的所属的用户组
chgrp -R 组名 文件夹名

仅管理员才可以修改文件的所有者和组

文件的所有者和管理员可以修改文件的权限

进程

一个正在执行的程序命令为一个进程process,执行系统服务的进程称为守护进程

查看进程

查看系统所有的守护进程:

ls /usr/lib/systemd/system | grep d.service

查看进程状态命令:

ps

全称为:process status,直接执行这个命令只会显示当前用户调用的进程以及和终端相关联的进程

选项 含义
a 列出带有终端的所有用户的进程
x 列出当前所有用户的进程,包括没有终端的
u 以友好的形式显示,即显示出所有的详情信息
-e 列出所有进程,相当于au
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表,相当于u

一类是带有横线的命令,一类不带有横线,带有横线的命令是标准Unix命令,没有横杠的是BSD风格的

# 显示所有用户的所有进程,并显示详情,列出的信息内容如下
# 用户名 PID CPU占用百分比 内存占用百分比 占用的虚拟内存 占用的实际物理内存 当前所用的终端(?代表没有终端) 进程的状态 当前进程启动的时间 当前进程占用CPU的运算时间 进程所执行的命令
ps aux

# 显示的信息比aux详细,并且带有父进程的id
ps -ef 
# 可以配合less
ps aux | less
# 可以配合more
ps aux | more
# 可以配合grep筛选
ps aux | grep 关键词

# 查看某个用户的所有进程
ps -u 用户名
  • stat:当前进程的状态
    • R:运行状态
    • S:睡眠状态
    • T:暂停状态
    • Z:僵尸状态
      • 将要退出或者没有退出干净,父进程可能需要这个进程提供一些信息,当父进程退出时,这个进程会退出
    • s:包含子进程
    • l:多线程
    • +:前台显示
    • <:当前进程有很高的优先级
    • N:当前进程优先级比较低
root           1  0.0  0.2 247672  9408 ?        Ss   Jun28   0:43 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2  0.0  0.0      0     0 ?        S    Jun28   0:00 [kthreadd]
  • 1号进程是系统启动的进程
  • 2号进程是守护进程,不少进程都是2号进程管理启动的

杀死进程

命令:

kill 进程号
# 强制进程停止
kill -9 进程号

# 通过进程名杀死进程,谨慎使用
killall 进程名(支持通配符)

实例程序:

#include <unistd.h>

int main() {
	while(1) {
		sleep(1000);
	}
	return 0;
}

编译并运行

查看进程

root     2586517  0.0  0.0   7360   868 pts/2    S+   11:22   0:00 ./a.out

杀死进程

kill 2586517

查看进程树

可以以一种直观的方式查看进程之间的父子关系

直接使用以下命令:

pstree [选项]
选项 含义
-p 显示进程的PID
-u 显示进程所属用户

实时监控进程

使用以下命令:

top [选项]

按上下箭头看上一条/下一条的信息,page up/page down上下翻页

选项 含义
-d 秒数 每隔一定的秒数更新,默认为3秒,可以为小数
-i 不显示闲置或者将死进程,闲置的标准为上次显示后到这次显示的这段时间内没有占用CPU
-p id 指定监控的进程id
按键操作 含义
P CPU使用量进行排序,这是默认项,按shift + P
M 以内存使用量排序,按shift + M
N PID进行排序,按shift + NPID从大到小
q 退出

执行命令后展示出来的信息分为两部分:

  • 第一部分为总体的统计信息
    • 第一行:
      • 当前执行的命令
      • 当前时间
      • 开机时间
      • 正在使用的用户数
      • 平均负载:会显示三个数字,分别为第1、3、5分钟的负载
    • 第二行:
      • 总的任务(进程)数量
      • 正在运行的个数R
      • 休眠的个数S
      • 停止(暂停)的个数T
      • 僵尸进程的个数Z
    • 第三行:为CPU的占用详情
      • us 用户进程占用CPU的时间比例,默认情况下没有经过更改优先级的进程
      • sy 系统进程占用CPU的时间比例
      • ni 经过优先级调整后的占用CPU的时间比例
      • id CPU的空闲时间
      • wa 等待的时间,例如I/O操作
      • hi 硬件中断的时间占比
      • si 软件中断的时间占比
      • st 被虚拟化的时间占比
    • 第四行:内存占用情况
      • 总量
      • 空闲的大小
      • 占用的大小
      • 放在缓冲中的大小
    • 第五行:交换内存占用情况
  • 第二部分为表格:
    • PID 进程ID
    • USER 用户
    • PR 调度优先级
    • NI 用户指定的优先级
    • VIRT 虚拟内存占用的大小
    • RES 物理内存占用的大小
    • SHR 共享内存占用大小(共享内存:一些进程放到共享内存中的资源,其他进程也可以拿来用)
    • S 当前的状态,例如僵尸状态等等
    • %CPU CPU占比
    • %MEM 内存占比
    • TIME+ 当前运行的时间占用CPU总时间的多少,+代表精确到0.01秒
    • COMMAND 调用当前进程的命令

网络状态和端口监控netstat

命令:

netstat [选项]
选项 含义
-a 显示所有正在监听(listen)和未监听的套接字(socket
-n 拒绝显示别名,把能显示的数字的全部转换为数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用

应用:

# 查看进程的网络信息
netstat -anp | grep 进程号
# 查看端口号占用情况
netstat -nlp | grep 端口号

系统定时任务

crontab后台是有个守护进程的,在系统中所对应的服务为crond也是系统启动后默认开启的

# 查看所有定时任务
crontab -l
# 编辑定时任务
crontab -e 
# 删除所有定时任务
crontab -r

编辑就相当于打开了一个vim编辑器,格式如下:

* * * * * 执行的任务
  • 第一个*:一小时中的第几分钟,范围0-59
  • 第二个*:一天中的第几小时,范围0-23
  • 第三个*:一个月中的第几天,范围1-31
  • 第四个*:一年中的第几个月,范围1-12
  • 第五个*:一周中的星期几,范围0-7,0和7都表示周天

含义:

  • *代表任何时间,有的意思
    • 例如* * 8,代表8点的每一分钟执行一次,11 20 ***,代表每天的20:11执行一次
  • ,代表不连续的时间
    • 例如:11 19,21,23 ***代表每天的19:11、21:11、23:11执行一次
  • -代表连续的时间
    • 11 19-21 ***代表每天的19:11、20:11、21:11执行一次
  • */n代表每隔n执行一次
    • 例如*/2每隔两分钟执行一次
    • 0 0 1,15 * 1代表每月1号和15号00:00,每周一的00:00都会执行命令
    • 每周和每个月的月份、日尽量不要同时出现

软件包管理

RPM全称为RedHat Package Manager

# 查看安装的所有软件
rpm -qa
# 查看软件详情
rpm -qi 软件名称
# 卸载
rpm -e 软件包名
# 忽略依赖并卸载
rpm -e -nodeps 软件包名

安装:

npm [选项] rpm包

# 例如
npm -ihv xxx.rpm

选项:

  • -i安装
  • -v显示详情信息,verbose
  • -h显示进度条
  • --nodeps忽略依赖

yum

全称为yellow dog updater modified,基于RPM,能从指定的服务器自动下载依赖

yum [选项] [参数]
  • 选项
    • -y对所有的提问都回答yes
  • 参数
    • install安装
    • update更新
    • check-update检查是否有可用的升级
    • remove卸载
    • list显示已安装的所有软件包信息
    • clean清空过期的缓存
    • deplist显示包的依赖关系

Q.E.D.


念念不忘,必有回响。