Linux基本命令
[用户名@主机名 文件夹名] #/$
为终端的基本格式,其中文件夹名为~
时,代表主文件夹,#
代表root
用户,$
代表普通用户
Linux系统中,一切皆是文件
Ctrl + U
用来清除已输入但并未执行的命令
目录结构
含义
目录 | 含义 |
---|---|
bin | 本意是二进制的意思,所有能够执行的命令都会存储到这个目录下,这个目录并不是真正在根目录下的,是一个映射后的目录,真实是的位置在usr/bin |
sbin | 系统二进制,是系统的命令目录,也是一个映射后的目录,真实的地址在usr/sbin |
lib/lib64 | 库目录,用来存放应用程序共享库的文件,实际位置usr/lib 、usr/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
模式:
- 一般模式:直接进来的页面,主要用来进行删除、复制、粘贴
- 编辑(插入)模式:用来编辑文本,按
i
、a
、o
进入 - 命令模式:进行命令操作,按
:
或者/
进入
命令
基本命令:
-
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
-
大写的
H
(shift + h
)gg
代表移动到这个文本的开头 -
大写的
G
、大写的L
代表移动到这个文本的末尾,数字 + G
移动到第数字行
:set number
或者:set nu
代表开启行号显示,:set nonumber
关闭行号
插入模式
按下i
即可进入插入模式
插入模式插入的位置是当前光标之前,退格键将会删除光标之前的字符,delete键删除光标之后的内容
进入插入模式:
i
:在当前光标前
I
:在当前行首
A
:在当前行尾
o
:在当前光标下一行,相当于行尾按回车,在一个空行
O
:在当前光标的上一行,相当于将光标所在及其后内容下移一行,并将光标指向上一行的空行
命令模式
已修改但不想报错,退出时需要使用:q!
命令
直接退出q
直接保存w
保存并退出wq
/要查找的内容
,n
代表查找下一个,N
代表查找上一个
noh
取消查找到的高亮显示
:s/要替换的内容/要替换后的内容
:将会替换光标所在行的第一个要替换的内容
:s/要替换的内容/要替换后的内容/g
:将会替换光标所在行的所有要替换的内容:%s/要替换的内容/要替换后的内容
:将会替换每一行的第一个要替换的内容:%s/要替换的内容/要替换后的内容/g
:将会替换每一行的所有要替换的内容
系统管理
正在执行的程序和命令称为进程(process),启动之后一直存在、常驻内存的进程称为服务
可以通过ls /etc/init.d
查看服务(centOS6
)
systemctl start | stop | restart | status | disable | enable 服务名
, ctl
全称为control
,disable
关闭自启动,enable
开启自启动
init
进程是系统启动的第一个进程,其他自启动的进程将由init
进程启动
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
就代表这是一个目录,例如downloads
、learn
等
[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
将内容输出到控制台
输入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
可以以特定的格式显示时间
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 -l
和ll
查看的文件的完整信息中第一个字段代表文件的权限信息,共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
开头,代表这是一个链接 - 如果以
l
、b
开头,代表这是一个设备文件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 + N ,PID 从大到小 |
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.