linux目录结构
根目录下的目录结构
- /bin (/usr/bin, /usr/local/bin)这个目录存放着经常使用的命令
- /sbin(/usr/sbin, /usr/local/sbin)存放的是系统管理员使用的系统管理程序
- /home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
- /root 该目录为系统管理员,也称作超级权限者的用户主目录;
- /lib 系统开机所需要的最基本的动态链接共享库,其作用类似于windows里面的dll文件,几乎所有的应用程序都需要用到这些共享库
- /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /etc 所有系统管理所需要的配置文件和子目录 my.conf
- /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
- /boot 存放启动linux时使用的一些核心文件,包括一些链接文件以及镜像文件
- /proc 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv service缩写,该目录存放一些服务启动之后需要提取的数据
- /sys 这是linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统
- /tmp 这个目录是用来存放一些临时文件
- /dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储
- /media linux系统会自动识别一些设备,例如U盘,光驱等等,当识别后,linux会把识别的设备挂在到这个目录下
- /mnt 系统提供该目录是为了让用户临时挂在别的文件系统的,我们可以将外部的存储挂在到/mnt/上,然后进入该目录就可以查看里面的内容了
- /opt 这是给主机额外安装软件所摆放的目录,如安装oracle数据库就可以放到该目录下
- /usr/local 这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方法安装的程序
- /var 这个目录存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
- /selinux selinux是一种安全子系统,它能控制程序只能访问特定文件
总结:
- linux的目录中有且只要一个根目录
- linux各个目录存放的内容是规划好,不用乱放文件
- linux是以文件的形式管理我们的设备,因此linux系统,一切都是文件
vi与vim编辑器
所有的linux系统都会内建vi文本编辑器
vim具有程序编辑的能力,可以看做是vi的增强版本
vi和vim常用的三种模式
- 正常模式
- 插入模式, 一般输入i即可进入插入模式
- 命令行模式,提供保存,退出等相关命令
安装vim
yum -y install vim*
命令行模式下常用三个命令:
命令 | 含义 |
---|---|
:wq | 保存并退出 |
:q | 退出 |
:q! | 强制退出 |
vi和vim常用快捷键
- 拷贝当前行yy,拷贝当前行向下5行5yy,并粘贴
- 删除当前行dd, 向下删除5行5dd
- 在文件中查找某个单词,命令行下 /搜索内容 回车
- 设置文件的行号,命令行下:set nu, 取消行号 :set nonu
- 达到首行gg和末尾行G
- 撤销输入u
- 编辑文件,并将光标移动到第某行,输入行数,快捷键shfit+g
开关机及用户注销命令
开关机命令
shutdown
命令 | 含义 |
---|---|
shutdown -h now | 立即关机 |
shutdown -h 1 | 1分钟后关机 |
shudown -r now | 立即重启 |
halt
直接使用,效果等同于关机
reboot
现在重启计算机
sync
将内存数据同步到磁盘
用户登录与注销
- 登录时尽量少用root账号登录,因为它是系统管理员,登录后用 su - 用户名 命令来切换成系统管理员身份
- 在提示符下输入logout即可注销用户, 也可以使用exit命令注销该用户
用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须向系统管理员申请一个账号,然后以这个账号的身份进入系统
创建用户指定密码
添加用户
useradd [选项] 用户名
useradd hxb
在/home目录中就会创建一个hxb的文件夹
给新创建的用户指定家目录: useradd -d 指定目录 用户名
useradd -d /home/hxb/ hxb
指定密码
passwd 用户名
passwd hxb
删除用户
- 删除用户,并保留家目录
userdel 用户名
userdel hxb
- 删除用户,并同时删除家目录
userdel -r 用户名
userdel -r hxb
查询用户信息
id 用户名
id hxb
uid=1001(hxb) gid=1001(hxb) 组=1001(hxb)
其中,uid表示用户的标识,gid标识用户组的id,组标识用户组的名称
切换用户
su - 切换的用户名称
[root@localhost home]# su - hxb
[hxb@localhost ~]$
从高权限的用户到低权限的用户是不需要密码的,反之则需要密码
exit 返回到原来的目录
[root@localhost ~]# su - hxb
上一次登录:二 4月 7 02:38:11 CST 2020pts/0 上
[hxb@localhost ~]$ exit
登出
whoami 显示当前用户
[root@localhost ~]# whoami
root
用户组
类似于角色,系统可以对有共性的多个用户进行统一的管理
增加组
groupadd 组名
[root@localhost ~]# groupadd wudang
删除组
groupdel 组名
[root@localhost ~]# groupdel wudang
增加用户时直接加上组
useradd -g 用户组 用户名
# 增加一个用户huangxb,直接将他指定到wudang
[root@localhost ~]# groupadd wudang
[root@localhost ~]# useradd -g wudang huangxb
修改用户组
usermod -g 用户组 用户名
[root@localhost ~]# usermod -g shaolin huangxb
[root@localhost ~]# id huangxb
uid=1002(huangxb) gid=1003(shaolin) 组=1003(shaolin)
用户和组的配置文件
目录 | 描述 |
---|---|
/etc/passwd | 用户配置文件(用户信息) |
/etc/group | 组配置文件(组信息) |
/etc/shadow | 口令配置文件(密码) |
实用指令
指定运行级别
- 切换到指定运行级别的指令
init [0123456]
# 关机
[root@localhost ~]# init 0
标识 | 描述 |
---|---|
0 | 关机 |
1 | 单用户(找回丢失密码) |
2 | 多用户无网络 |
3 | 多用户有网络 |
4 | 保留 |
5 | 图形界面 |
6 | 重启 |
系统的运行级别的配置文件/etc/inittab
2. 找回root密码
思路:进入到单用户模式,然后修改root密码
帮助指令
当我们对某个指令不熟悉时,可以使用Linux提供的帮助指令来了解指令的使用方法
- 语法
man [命令或配置文件] (功能描述,获得帮助信息)
[root@localhost ~]# man ls
- help指令
help 命令
help cd
文件目录类
pwd 指令
pwd (功能描述:显示当前工作目录的绝对路径)
ls 指令
ls [选项] [目录或是文件]
- 选项
-a 显示所有文件(包括隐藏文件)
-l 以列表的形式显示文件
cd 指令
cd [参数] (功能描述:切换到指定目录)
mkdir 指令
mkdir [选项] 要创建的目录
[root@localhost home]# mkdir /home/dog
-p 创建多级目录(一次性创建)
[root@localhost home]# mkdir -p /home/animal/tiger/son
rmdir 指令
rmdir [选项] 要删除的空目录
如果要删除非空目录需要使用 rm -rf 文件名
[root@localhost home]# rm -rf test.java
touch 指令
创建空文件
touch 文件名称
[root@localhost home]# touch Hello.java
cp 指令
拷贝文件到指定目录
cp [选项] source dest
[root@localhost test2]# cp Hello1.java ../test
-r : 递归复制整个文件夹
rm 指令
删除文件或目录
rm [选项] 要删除的文件或目录
-r : 递归删除该文件夹
-f : 强制删除不提示
[root@localhost home]# rm -r test
rm:是否进入目录"test"? y
rm:是否删除普通空文件 "test/Hello1.java"?y
rm:是否删除目录 "test"?y
mv 指令
mv移动文件与目录或重命名
mv oldNameFile newNameFile (功能描述:重命名文件)
mv 文件路径1 文件路径2 (功能描述:移动文件)
cat 指令
cat 查看文件内容
cat [选项] 要查看的文件
-n: 显示行号,
| more 显示更多,可以折叠多余的内容
[root@localhost ~]# cat -n test.txt | more
more 指令
more指令是一个基于VI编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容
more 要查看的文件
less 指令
less指令用来分屏查看文件内容,对于显示大型文件具有较高的效率
less 要查看的文件内容
输出重定向指令和追加指令
>输出重定向 >> 追加
指令 | 描述 |
---|---|
ls -l > 文件 | 列表的内容吸入文件中(覆盖写) |
ls -al >> 文件 | 将列表中的内容追加到文件中 |
cat 文件1 > 文件2 | 将文件1中的内容覆盖写入文件2中 |
echo “内容” >> 文件 | 将内容追加到文件的末尾 |
[root@localhost ~]# ls -l > a.txt
[root@localhost ~]# ls
anaconda-ks.cfg a.txt Hello.java test.txt
[root@localhost ~]# cat -n a.txt | more
1 总用量 8
2 -rw-------. 1 root root 1257 3月 7 21:38 anaconda-ks.cfg
3 -rw-r--r--. 1 root root 0 4月 13 02:53 a.txt
4 drwxr-xr-x. 2 root root 6 4月 6 22:08 Hello.java
5 -rw-r--r--. 1 root root 1008 4月 6 22:42 test.txt
[root@localhost ~]# echo "这是一个测试" >> a.txt
[root@localhost ~]# cat a.txt
总用量 8
-rw-------. 1 root root 1257 3月 7 21:38 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 4月 13 02:53 a.txt
drwxr-xr-x. 2 root root 6 4月 6 22:08 Hello.java
-rw-r--r--. 1 root root 1008 4月 6 22:42 test.txt
这是一个测试
echo 指令
echo输出内容到控制台
echo [选项] [输出内容]
# 输出linux环境变量
[root@localhost ~]# echo $PATH
/usr/local/jdk1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
head 指令
head指令用于显示文件的开头部分内容,默认情况下head显示文件的前10行内容
head 文件 (显示文件的前10行数据)
head -n 行数 文件 (显示文件指定行数数据)
tail 指令
tail用于输出文件中尾部的内容, 默认情况下tail指令显示文件的后10行内容
tail 文件 (查看文件后10行内容)
tail -n 行数 文件 (查看文件后末尾几行的内容)
tail -f 文件 (实时查看该文档所有更新)
ln 指令
软连接也叫符号连接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
ls -s [原文件或目录] [软链接名] (描述:给原文件创建一个软链接)
[root@localhost ~]# ln -s a.txt linkToA
[root@localhost ~]# ls -l
总用量 12
-rw-------. 1 root root 1257 3月 7 21:38 anaconda-ks.cfg
-rw-r--r--. 1 root root 249 4月 13 02:59 a.txt
drwxr-xr-x. 2 root root 6 4月 6 22:08 Hello.java
lrwxrwxrwx. 1 root root 5 4月 13 03:21 linkToA -> a.txt
-rw-r--r--. 1 root root 1008 4月 6 22:42 test.txt
history 指令
查看已经执行过历史命令,也可以执行历史指令
history 显示所有的历史指令
!100 执行编号为100的指令
时间日期类
date 指令
指令 | 描述 |
---|---|
date | 显示当前时间 |
date +%Y | 显示当前年份 |
date +%m | 显示当前月份 |
date +%d | 显示当前那一天 |
date “+%Y-%m-%d %H:%M:%S” | 显示年月日时分秒 |
date -s “2018-10-10 11:22:10” | 设置系统时间 |
cal 指令
查看日历时间
cal 查看当前月份日历
cal 年份 查看当前年份日历
搜索查找类
find 指令
find指令将从指定目录向下递归地便利其各个子目录,将满足条件的文件或目录显示在终端
find [搜索范围] [选项]
# 按文件名查找某目录下的文件
[root@localhost ~]# ls
anaconda-ks.cfg a.txt Hello.java linkToA test.txt
[root@localhost ~]# find /root -name a.txt
/root/a.txt
# 按文件用户名查找
find /root -user huangxb
# 按大于某大小的文件查找某文件
find /root -size +20M
locate 指令
locate指令可以快速地位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快,为了保证查询结果的准确度,管理员必须保证更新locate时刻
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
grep 指令
grep 过滤查找,管道符, “|” 标识将前一个命令的处理结果输出传递给后面的命令处理
grep [选项] 查找内容 源文件
- -n 显示匹配的行及行号
- -i 忽略大小写
# 区分大小写
[root@localhost ~]# cat Hello.java | grep -n hello
# 不区分大小写
[root@localhost ~]# cat Hello.java | grep -ni hello
压缩和解压缩类
gzip/gunzip 指令
- gzip 用于压缩成*.gz文件
[root@localhost ~]# gzip a.txt
[root@localhost ~]# ls
anaconda-ks.cfg a.txt.gz Hello.java linkToA test.txt
- gunzip 用于解压*.gz文件
[root@localhost ~]# gunzip a.txt.gz
[root@localhost ~]# ls
anaconda-ks.cfg a.txt Hello.java linkToA test.txt
zip/unzip 指令
zip用于压缩文件,unzip用于解压文件,这个在项目打包发布中很有用
zip [选项] xxx.zip 将要压缩的内容
zip -r xxx.zip /home/ 递归压缩某个目录
tar 指令
tar指令是打包指令, 最后打包后的文件是*.tar.gz文件
tar [选项] XXX.tar.gz 打包的内容
选项 | 描述 |
---|---|
-c | 产生.tar打包文件 |
-w | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
-v | 显示包中的文件 |
# 将a.txt和a1.txt打包成a.tar.gz文件
[root@localhost ~]# tar -zcvf a.tar.gz a.txt a1.txt
a.txt
a1.txt
[root@localhost ~]# ls
a1.txt anaconda-ks.cfg a.tar.gz a.txt Hello.java linkToA test.txt
# 将目录压缩成a.tar.gz文件
tar -zcvf a1.tar.gz /test
# 解压文件
tar -zxvf a.tar.gz
# 解压文件到指定目录(这个目录必须是存在的)
tar -zxvf a.tar.gz -C /home/
组管理及权限管理
- 文件/目录所有者
一般为文件的创建者,谁创建了改文件,就自然的成为了改文件的所有者
文件目录和组
查看文件所有者: ls -ahl
# 创建一个用户和所属组
[root@localhost ~]# useradd -g police tom
# 切换到tom用户,并创建一个ok.txt文件
[root@localhost ~]# su - tom
[tom@localhost ~]$ touch ok.txt
# 查该文件所属的用户和组
[tom@localhost ~]$ ls -ahl
总用量 12K
drwx------. 2 tom police 76 5月 6 23:38 .
drwxr-xr-x. 8 root root 123 5月 6 23:37 ..
-rw-r--r--. 1 tom police 18 8月 8 2019 .bash_logout
-rw-r--r--. 1 tom police 193 8月 8 2019 .bash_profile
-rw-r--r--. 1 tom police 231 8月 8 2019 .bashrc
-rw-r--r--. 1 tom police 0 5月 6 23:38 ok.txt
改变文件所有者: chown 用户名 文件名
# 将app.txt文件所有者更改为tom
[root@localhost home]# chown tom app.txt
修改文件目录所在组 chgrp 组名 文件名
[root@localhost home]# chgrp police app.txt
[root@localhost home]# ll
总用量 4
-rw-r--r--. 1 tom police 0 5月 6 23:46 app.txt
drwx------. 2 tom police 97 5月 6 23:46 tom
文件权限管理
-rw-r–r--. 1 tom police 0 5月 6 23:38 ok.txt
- - 表示文件类型:- 普通文件;d 目录;l 软链接;c 字符设备;b 块文件
- rw- 表示所有者的权限,rw表示即可读又可写
- r– 表示文件所在组的用户权限
- r– 表示文件其他组用户的权限
- 1 如果是文件表示硬链接数目,如果是目录表示该目录的子目录的数量
- tom 表示文件的所有者
- police 表示文件所在组
- 0 表示文件的大小
- 5月 6 23:38 表示文件最后修改时间
rwx作用到文件;表示可读,可写,可执行
rwx作用到目录;表示可读,可修改,可进入该目录
修改权限 - chmod
通过chmod指令,修改文件或者目录的权限
- u表示所有者
- g表示所有组
- o表示其他人
- a表示所有人
- 通过 + - = 变更文件的权限
# 给所在组增加读写执行权限
[tom@localhost ~]$ chmod -c g=rwx ok.txt
mode of "ok.txt" changed from 0744 (rwxr--r--) to 0774 (rwxrwxr--)
[tom@localhost ~]$ ll
总用量 0
drwxr-xr-x. 2 tom police 6 5月 7 00:12 dir
-rwxrwxr--. 1 tom police 0 5月 6 23:38 ok.txt
# 给文件其他组增加写的权限
[tom@localhost ~]$ chmod -c o+w ok.txt
mode of "ok.txt" changed from 0774 (rwxrwxr--) to 0776 (rwxrwxrw-)
[tom@localhost ~]$ ll
总用量 0
drwxr-xr-x. 2 tom police 6 5月 7 00:12 dir
-rwxrwxrw-. 1 tom police 0 5月 6 23:38 ok.txt
- 通过数字变更权限
规则:r=4 w=2 x=1
rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名 相当于 chmod 751 文件目录名
# 将改文件开放所有权限
[tom@localhost ~]$ chmod 777 ok.txt
[tom@localhost ~]$ ll
总用量 0
drwxr-xr-x. 2 tom police 6 5月 7 00:12 dir
-rwxrwxrwx. 1 tom police 0 5月 6 23:38 ok.txt
修改文件所在组 - chgrp
chgrp 新组 文件名
任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序
crontab [选项]
常用选项
- -e 编辑定时任务
- -l 查看定时任务
- -r 删除定时任务
- service crond restart 重启任务调度
linux磁盘分区,挂载
分区基础知识
mbr 分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区腰斩一个主分区
- MBR最大支持2TB,但拥有最好的兼容性
gtp 分区
- 支持无限多个主分区
- 最大支持18EB的大容量(EB=1024PB,1PB=1024TB)
- windows7 64位以后支持gtp
Linux分区
- linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,LInux中每个分区都是用来组成整个文件系统的一部分
磁盘情况查询
df -h (描述:查询系统整体使用情况)
[huangxb@localhost home]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 3.4G 14G 20% /
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
du -h /目录 (描述:查询指定目录的磁盘占用情况)
- -s 指定目录中占用汇总
- -h 带计量单位
- -a 含文件
- –max-depth=1 子目录深度
- -c 列出明细的同事,增加汇总量
# 查询/opt目录磁盘占用情况,深度为1
du -ahc /opt
进程管理
基本介绍
- 在linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻系统中,直到关机才结束
显示系统执行的进程
ps命令用来查看目前系统中进程的情况
ps显示的信息选项
字段 | 描述 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此集成所消CPU时间 |
CMD | 正在执行的命令或进程名 |
- ps -a 显示当前终端的所有进程信息
- ps -u 以用户的格式显示进程信息
- ps -x 显示后台进程运行的参数
[root@localhost home]# ps -aux | more
ps -ef (描述:以全格式显示当前所有进程,查看进程的父进程(PPID))
终止进程 kill 和 killall
kill [选项] 进程号 (描述:通过进程号杀死进程)
killall 进程名称 (描述:通过进程名称杀死进程,也支持通配符)
端口及进程管理
开放和关闭端口
- 开放端口 firewall-cmd --zone=public --add-port=9300/tcp --permanent
- 关闭端口 firewall-cmd --zone=public --remove-port=9300/tcp --permanent
查看监听的端口
netstat -lnpt
检查端口被某个进程占用
netstat -lnpt | grep 9300
服务管理
服务本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,因此又称为守护进程
服务管理指令
service 服务名 start | stop | restart | reload | status
systemctl
防火墙相关命令
- 查看防火墙所有开放端口 firewall-cmd --zone=public --list-ports
- 查看防火墙状态 firewall-cmd --state
- 关闭防火墙 systemctl stop firewalld.service
- 重启防火墙 firewall-cmd --reload
服务管理
查询服务名
- 方式1: 使用setup =》 系统服务,就可以看到
- 方式2:/etc/init.d/服务名称
[root@localhost init.d]# ls -l /etc/init.d/
总用量 40
-rw-r--r--. 1 root root 18281 3月 29 2019 functions
-rwxr-xr-x. 1 root root 4569 3月 29 2019 netconsole
-rwxr-xr-x. 1 root root 7923 3月 29 2019 network
-rw-r--r--. 1 root root 1160 8月 8 2019 README
服务的运行级别
查看系统服务
systemctl list-unit-files
动态监控进程
top与ps命令相似,都是用来显示正在执行的进程,但是不同之处,top在执行一段时间可以更新正在运行的进程
top [选项]
查看系统网络状态
netstat [选项]
- -an 按照一定顺序排列输出
- -p 显示那个进程在调用
RPM和YUM包
RPM包
RPM(RedHat软件包管理工具)
查询已安装的rpm包
rpm -qa | grep xxx
# 查询安装软件的信息
rpm -qi docker-client
# 查询软件安装了那些文件
rpm -ql docker-client
# 查询文件属于某个rpm包
rpm -qf /etc/passwd
# 卸载rpm包
rpm -e docker-client
# 安装rpm包
rpm ivh 包路径名称
i表示安装 v表示提示 h显示进度条
YUM包
YUM包是基于rpm包管理, YUM能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,可以一次性安装所有依赖的软件包
# 安装包
yum install 包名
# 获取安装包列表
yum list
网络管理及配置
IP管理
- 查看本机IP地址
ip addr
系统基础配置
主机名称修改及查看
- 查看当前主机名称
hostnamectl - 编辑主机名配置文件(静态的主机名称)
vim /etc/hostname