Linux基础及常用指令
1.Linux目录结构
- bin(usr/bin,user/local/bin) #存放常用指令,如cp、cat、chown等
- sbin(usr/sbin,user/local/sbin) #高权限指令,super或则高权限用户可以使用的指令
- boot #启动时的核心文件,包括连接文件以及镜像文件
- opt #安装软件,给主机额外安装的软件可以存放在该目录下,存放软件文件
- usr/local #另一个给主机安装软件的目录,一般是通过源码编译方式安装的程序
- home #家目录,当创建普通用户时,home目录下回创建对应文件
- root #系统管理员的用户主目录
- dev #设备管理,包含cpu、disk等
- etc #存放配置文件
- lib/lib64 #动态库,大多为.so文件
- media #设备,当插入u盘、光驱后,会挂载到此目录下
- mnt #挂载,可以将外部存储挂载到该目录下
- proc #虚拟目录,是系统内存的映射,访问该目录可获取系统信息
- selinux #安全子系统,控制程序只能访问特定文件
- srv #service简写,存放服务启动之后需要提取的数据
- sys #系统文件夹
- tmp #临时文件夹
- var #变量,习惯性将经常被修改的文件放在该目录,例如日志信息
2.vi/vim快捷键
- yy #拷贝当前行,5yy拷贝当前行向下5行,并粘贴[p]
- dd #删除当前行,5dd删除当前行向下5行
- /关键字 #命名行模式下,/关键字 回车查找,输入n查找下一个
- :set nu/:set nonu #命令行模式,设置/取消行号,回车生效
- G/gg #G到达文件末行,gg到达文件首行
- u #撤销操作
- :set nu –> 行号 –> shift+g #跳转到指定行
3.关机重启
- shutdown
shutdown -h now #立即关机
shutdown -h 1 #1分钟后关机
shutdown -r now #立即重启 - halt #直接使用,等价于关机
- reboot #重启
- sync #将内存数据同步到磁盘
我们在关机或者重启之前都应执行sync命令,避免数据丢失
4.用户管理
- 添加用户
useradd 用户名 #添加指定用户
useradd -d 指定目录 用户名 #添加用户名时指定其家目录 - 添加/修改密码
passwd 用户名 #给指定用户添加或修改密码
- 删除用户
userdel 用户名 #删除用户,但是保留家目录
userdel -r 用户名 #删除用户及其家目录 - 查询用户
id 用户名 #查询用户信息
- 切换用户
su - 用户名 #切换用户,高权限切换低权限时无需密码,反之需要
使用exit命名可以切换回原来的用户 - 增加用户组
groupadd 组名 #增加用户组
- 删除组
groupdel 组名 #删除组
- 增加用户时指定组
useradd -g 组名 用户名 #增加用户时,指定组
- 修改用户组
usermod -g 组名 用户名 #修改用户所属组
- 查看当前用户
whoami #who am i,查看当前用户
5.实用指令
5.1.指定运行级别
- init命令
init [0123456]
0 #关机
1 #单用户,可用于找回丢失密码
2 #多用户状态,无网络
3 #多用户状态,有网络
4 #保留
5 #图形化界面
6 #重启
使用单用户模式,找回root密码步骤:
关机 ->>开机时,按enter键,进入引导 ->>输入e,编辑引导 ->>选择kernel,输入e编辑内核
->>输入(空格+1),设置运行级别为1,按enter完成编辑,返回上一级 ->>输入b,开启引导
->>启动后处于单用户模式,即root身份进入,输入指令passwd root,即可设置新密码
5.2.帮助指令
- man命令
man [命令或配置文件] #获取帮助信息
- help命令
help 命令 #获取shell内置命令的帮助信息
5.3.文件目录指令
- pwd指令 #显示当前工作目录的绝对路径
- ls指令
ls [选项] [目录或文件]
ls -a #显示当前目录所有的文件及目录,包括隐藏的
ls -l #以列表模式展示所有的文件信息 - cd命令
cd [参数] #切换到指定目录
cd ~ #回到自己的家目录
cd .. #返回上一级目录 - mkdir命令
mkdir [选项] 要创建的目录
mkdir -p [多级目录] #创建多级目录 - rmdir命令
rmdir [选项] 要删除的空目录
rmdir删除的是空目录,如果目录下有文件,则无法删除,此时可以使用: rm -rf 要删除的目录
- touch命名
touch 文件名 #创建一个空文件
- cp命令
cp [选项] source dest #拷贝文件到指定目录
cp -r source dest #递归拷贝整个文件夹至指定目录,重复文件会提示覆盖
\cp -r source dest #递归拷贝整个文件夹至指定目录,重复文件直接覆盖,不会提示 - rm命令
rm [选项] 要删除的文件或目录
rm -r #递归删除整个文件夹
rm -f #强制删除不提示 - mv命令
mv oldFileName newFileName #文件重名名
mv source dest #移动文件 - cat命令
cat [选项] 要查看的文件
cat -n 文件 #查看文件时显示行号cat指令会直接加载整个文件,因此常与管道符配合使用:cat -n 文件 | more
把文件内容交由more显示,可一页一页的加载 - more指令
more 要查看的文件 #more指令是基于vi编辑器的文本过滤器,它以全屏方式按页展示内容
快捷键:
空白键(space) #代表向下翻页
Enter #代表向下翻一行
q #表示立刻离开more,不再展示文件信息
Ctrl+F #向下滚动一屏
Ctrl+B #返回上一屏
= #输出当前行号
:f #输出文件名和当前行号 - less指令
less 要查看的文件 #用来分屏查看文件,与more类似,但是比more强大。
less加载文件时,并不是一次性加载所有内容,而是根据显示需求加载文件,对大型文件具有较高效率。
空白键(space) #代表向下翻页
[pageDown] #向下翻 一页
[pageUp] #向上翻一页
/字串 #向下搜寻字串,n:向下查找,N:向上查找
?字串 #向上搜寻字串,n:向上查找,N:向下查找
q #退出less - 输出重定向与追加
> #输出重定向,会将原来的文件内容覆盖
>> #追加,不会覆盖原文件,而是追加到末尾
ls -l > a.txt #将列表内容写入a.txt,覆盖写。如果文件不存在,则创建
ls -l >> a.txt #将列表内容追加写入a.txt,
cat 文件1 > 文件2 #将文件1的内容覆盖到文件2
echo 内容 >>文件 #将内容追加到文件 - echo命令
echo [选项] [输出内容] #输出内容到控制台
echo $PATH #输出Path环境变量 - head命令
head 文件 #显示文件开头部分,默认输出前10行
head -n 5 文件 #查看文件前5行内容 - tail命令
tail 文件 #显示文件尾部,默认输出后10行
tail -n 5 文件 #显示文件后5行
tail -f 文件 #实时追踪文件所有更新,工作中常用 - ln命令
ln -s [原文件或目录] [软连接名] #给原文件创建软连接,相当于win的快捷方式
rm -rf 软连接名 #删除软连接时,不能在软连接名后带/,否则提示资源忙
当我们用cd查看软连接时,看到的是对应目录的内容
当我们使用pwd查看目录时,任看到是软连接所在目录,而非指向的目录 - history命令
history #查看所有历史命令
history 10 #查看最近使用的10条命令
history !5 #执行编号为5的命令
5.4.日期指令
- date命令
date #显示当前时间
date “+%Y-%m-%d %H:%M:%S” #显示年月日时分秒
date -s “2019-07-15 11:11:11” #设置系统时间 - cal命令
cal #显示当前日历
cal 2020 #显示2020年的日历
5.5.搜索查找类
- find命令
find 指令将从指定目录向下递归的遍历其各个子目录,将满足条件或目录显示在终端
find /home -name *.txt #查找home目录下,所有的txt文件
find /home -user nobody #查找home目录下,所有用户名称为nobody的文件
find /home -size +20M #查找home目录下,所有大于20M的文件 (+n 大于、-n小于、n等于) - locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称以及路径的locate数据库事先快速定位指定文件。locate指令无需遍历整个文件系统,速度快。为了保证查询结果的准确度,需要定时更新locate。
locate hello.txt #搜索hello.txt,快速定位
由于locate指令基于数据库查询,所以第一次运行前,必须使用updatedb创建数据库。 - grep命名与管道符|
grep 过滤查找,管道符"|"表示将前一个命名处理结果输出传递给后面的命令处理。
cat hello.txt | grep -ni yes #在hello.txt中查找“yes”所在行,不区分大小写,并显示行号。-n 显示匹配行以及行号,-i忽略字母大小写
5.6.压缩与解压类
- gzip/gunzip命令
gzip 文件 #压缩文件,只能将文件压缩为.gz文件。gzip压缩文件后不会保留原来的文件
gunzip 文件.gz #解压缩文件命令 - zip/unzip命令
zip xxx.zip hello.txt #压缩hello.txt文件为xxx.zip
zip -r xxx.zip /home/ #压缩/home目录下的所有文件为xxx.zip
unzip -d /opt/tmp/ xxx.zip #解压文件到指定文件夹,-d指定解压后文件存放目录 - tar命令
tar 指令是打包指令,最后打包的文件是.tar.gz的文件
tar [选项] xxx.tar.gz 打包的内容
-c #产生.tar打包文件
-v #显示详细信息
-f #指定压缩后的文件名
-z #打包同时压缩
-x #解包.tar文件
tar -zcvf a.tar.gz a.txt b.txt #将a.txt b.txt两个文件压缩为a.tar.gz
tar -zcvf a.tar.gz /home/ #将home目录压缩为a.tar.gz
tar -zxvf a.tar.gz #解压a.tar.gz到当前目录
tar -zxvf a.tar.gz -C /opt/tmp/ #将a.tar.gz解压到指定目录,该目录必须先存在
5.7组管理与权限管理
- 文件/目录所有者
ls -ahl #查看文件所有者
chown tom a.txt #修改a.txt的所有者为tom
chown -R tom /home/abc #-R表示递归,对文件以及所有的子目录改变所有者
chgrp root a.txt #修改a.txt的所在组为root - 改变用户所在组
usermod -g 组名 用户名 #改变用户所在组
usermod -d 目录名 用户名 #改变用户登录的初始目录 - 权限管理
文件权限: -rwxrw-r-- 1 root root 2 Feb 2 09:39 abc
1) 第0位确定文件类型:- 普通文件、d 目录、l 软连接、c 字符设备【键盘、鼠标】、b 块文件或硬盘
2) 第1-3位确定所有者拥有的文件权限:r 读、w 写、x 执行
3) 第4-6位确定所在组拥有的文件权限
4) 第7-9位确定其他用户拥有的文件权限
5) 1表示文件大小,如果是目录则是4096
6) 第一个root 表示文件所有者、第二个root表示文件所在组
7) 2,如果是文件表示的是硬链接的数,如果是目录则表示该目录的子目录个数
8) 时间表示上一次操作的时间
9) abc 表示文件名
rwx对于文件:r表示可以查看读取查看、w表示可以修改,但是不代表可以删除文件,删除文件的前提是对文件所在的目录具有写权限、x表示可以执行
rwx对于目录:r表示可以读取,ls查看、w表示可以修改,目录内创建+删除+重命名文件
chmod u=rwx,g=x,o=x 文件目录名 #改变文件目录权限 u:所有者 g:所在组 o:其他人 a:所有人
chmod u+x #给所有者加上执行权限
chmod a-x #给所有人去掉执行权限
chmod 744 文件目录名 #等价于 chmod u=rwx,g=r,o=r 规则:r=4,w=2,x=1
6.任务调度
任务调度:是指系统在某个时间执行特定的命名或程序
- 语法
crontab [选项]
-e #编辑crontab任务
-l #查询crontab任务
-r #删除当前用户所有的crontab任务 - 具体用法
*/1 * * * * ls -l /etc >> /tmp/to.txt
- 占位符说明
第一个* #一个小时中的第几分钟【0-59】
第二个* #一天中的第几小时【0-23】
第三个* #一个月中的第几天【1-31】
第四个* #一年中的第几个月【1-12】
第五个* #一周中的星期几【0-7,0和7都表示周日】 - 特殊符号说明
1) * #代表任何时间,比如第一个*表示每个小时每一分钟都执行
2), #代表不连续的时间,比如 0 8,10,12 * * * 表示每天的8点0分,10点0分都执行
3) - #表示连续的时间范围,比如 0 5 * * 1-3 表示周一到周三每天5点执行命名
4) */n #代表每隔多久执行一次,比如 */10 * * * * 代表每隔10分钟执行一次