文章目录
一、查看与帮助
uname/pwd/who/whoami/ast/hostname
- uname: 查看当前系统的信息
- pwd: 查看当前所在的路径
- who: 查看当前哪些用户登录到服务器
- whoami: 查看当前登录的用户
- ast: 查看最近登录的历史记录
- hostname: 查看主机名
whereis 查询命令相关的可执行文件所在的路径
* `whereis ls`
* `whereis man`
which 查询命令的可执行文件的路径
man
man: 得到的内容比用 help 更多更详细且man没有内建与外部命令的区分 ,如果没有则可通过yum源进行安装yum install man man-page -y
eg:man ls
help
查看shell内置命令的帮助信息 eg:help cd
命令名 --help
列举命令的常用选项 eg:cp --help
二、文件与目录操作
1.切换工作目录 cd
- cd 进入用户主目录
- cd ~ 进入用户主目录
- cd / 进入根目录
- cd - 返回进入此目录之前所在目录
- cd . 当前目录
- cd … 返回上一级目录
- cd …/… 返回上两级目录
2.查看目录文件 ls
ls英文原意:list,命令所在路径:/bin/ls,适用于所有用户权限,主要功能就是以列表形式显示目录文件。
- 语法: ls 【选项】【文件/目录名】
- 选项:
- -a:显示所有文件和目录,包括隐藏文件
- -d:显示目录名称,而非其内容
- -l:以列表形式显示详细信息,
ll
等价于ls -l
- -R:递归处理,将指定目录下的所有文件及子目录一并处理
3.创建目录/文件
- linux mkdir用来创建目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。
- 语法:mkdir 【选项】【目录名】
- 选项:
- -m:mode模式,设定权限<模式>,类似chmod
- -p:递归创建目录,即父目录不存在情况下先生成父目录(parents).eg: mkdir linux/test 如果目录linux不存在,则报错,使用参数-p即可自动创建父目录
- 范例:
- 创建一个空目录
mkdir test
- 递归创建多级目录
mkdir -p test/a
- 创建权限为777的目录
mkdir -m 777 test
- 创建一个空目录
- 使用touch来创建文件 eg:touch s.txt
4.复制 cp
英文:copy 命令路径:/bin/cp 执行权限:所有用户 作用:复制文件或目录
- 语法:cp 【选项】 【源文件或目录】【目的目录】
- 选项:
- -r:递归处理,复制目录
- -p:保留文件属性(原文件的时间不变)
5.移动 mv
英文:move 命令路径:/bin/mv 执行权限:所有用户 作用:移动文件或目录、文件或目录改名
- 语法:mv 【源文件或目录】【目的目录】
6.删除 rm
英文:remove 命令路径:/bin/rm 执行权限:所有用户
作用:删除文件
- 语法: rm 【选项】【文件或目录】
- 选项:
- -r:删除目录的同时删除该目录下的所有文件
- -f:强制删除文件或目录,即使原档案属性设为唯读也直接删除,无需逐一确认。
三、文件查询
- find 从文件系统中查找指定的满足条件的文件
语法:find [查询路径] -参数/选项 条件 :如果查询路径不写,则默认是当前路径
-name :通过文件名字查询
eg:find -name 'a*b' :查询以a为开头,以b为结尾的文件
-empty :查找空文件
-amin :查找最后的指定分钟内访问的文件
eg:find / -amin -10 :查找最近十分钟内访问的文件
-atime :查找最后指定的时间内访问的文件,以天为单位
-size :查找指定大小的文件(c:字节,w:双字节,k:千字节M:mb,G:gb)
在查询的基础上,可以使用特定的符号进行组合查询
! :非
-a :与
-o :或
可对查询到的文件进行一些操作
在查询结果后添加 -ok 指令 {} \:
eg1:find -name 'a*a' -ok -rm {} \:
查询以a开头a结尾的文件名并做删除操作
eg2:find !-empty -ok cat {} \:
查询非空文件并显示本文内容
说明:-ok可以替换成 -exec,区别在于-ok是有一个交互界面
- grep:从若干个文件中查询文本 eg:grep ‘hello’ *
从该目录下所有文件中查询含有hello文本
-c :只显示匹配的有多少行数
-i :查询的时候忽略大小写
-h :查询结果不显示文件名
-l :查询结果不显示匹配项,只显示文件名
-n :查询结果包含匹配的行号
-v :查询所有不包含指定文本的部分
- egrep:使用正则表达式从若干格个文件中查询文本
语法:egrep '正则表达式' 文件
eg:egrep 'hel{3,}o' * 查询l出现至少三次的文本
四、查看文件内容
cat
作用:将一个文本中所有的内容输出
tac
将一个文本中的内容倒叙输出到控制台(以行为单位)
more
可以分页查看一个文本中的内容
下一页:空格键,如果到了文件的结尾,则退出查询
上一页:b键
退出:q键退出
less
可以分页查看一个文本中的所有内容,less可进行关键词搜索
下一页:空格键,如果到了文件的结尾,则退出查询
上一页:b键
退出:q键退出
eg:less install.log
head
head -n file:查询指定文件的头部n行
eg:head -10 install.log 查询头部十行内容
tail
tail -n file:查询指定文件尾部的n行
tail -n +10 file:查询文件中从第10行开始一直到结束所有的内容
tail -f file :跟踪一个文件,跟踪的是一个文件的唯一标志 inode号
- 文件在磁盘上存储的最小单元是扇区,每个扇区大小512字节
- 操作系统进行文件操作的时候不会直接操作扇区,因为效率比较低。操作系统在进行文件的读写时是以块(Block)的形式来读写,一个块(Block)包含8个扇区,4kb。
- 磁盘上的文件在进行存储的时候,会对应生成一些元数据,用来记录一个文件的基本信息,例如:创建日期,修改日期,所属用户,占用的块信息。
- 磁盘在格式化的时候,会分成两个区。一个是数据区,用来存储数据;另外一个是inode区,用来存文件对应的inode信息,每个inode占128字节,而每1kb的内容都会生成一个inode,因此inode区占磁盘空间的12.5%。
- 常见的问题:磁盘空间还没满,但是无法创建文件。原因是inode区满了(存在太多的小文件)。
eg:tail -10 install.log 查询install.log文件尾部十行内容
stat
查看文件的元数据信息
eg: stat b.txt
df -i :显示磁盘的inode区信息(总数据,已经使用的数量,未使用的数量)
ll -i :显示所有信息的同时,显示inode
五、文件的压缩与打包
1.压缩/解压
gzip → .gz
gzip file 将一个文件压缩
gunzip file.gz 将一个文件解压缩
gzip -d file.gz 将一个文件解压缩
gzip * :、
gzip -d
bzip2 → .bz2
bzip file : 将一个文件压缩
bunzip :将一个文件解压缩
bzip2 -d file :将一个文件解压缩
2.打包/解包
将若干个指定的文件或文件夹打包成一个问件
tar
-f :必须参数,且必须在最后位,表示需要使用档案名字
-v :表示要显示打包、解包的过程
打包:
-c :创建一个新的打包文档
-r :向一个已经
eg:tar -cvf t.tar
tar -rvf t.tar
解包:
-x :解包
eg:tar -xvf t.tar
-C :指定路径下面
eg:tar -xf temp/t.tar ->-C target/
3.打包并压缩、解压并解压缩
-z :打包并压缩,解压缩并解包,操作的压缩格式是 .gz
-j :打包并压缩,解压缩并解包,操作的压缩格式是 .bz2
打包并压缩:
eg1:tar -zcvf data.gz data/ #对一个文件夹中的文件进行打包并压缩
eg2:tar -zcvf a.gz a b c d e f #对多个文件进行打包并压缩
解包并解压缩:
eg:tar -zxvf data.gz #解包并解压缩到当前路径下
查看包内容:
eg:tar -ztvf a.gz
六、链接
- 使用场景:如果需要在不同的目录喜使用同一个文件,此时可以对这个文件做多个链接,当使用到这个文件的地方,直接使用链接即可。
- 文件与链接内容是完全同步的,有一个做改动其他所有都会跟着改动(通过任意一个链接改动的都是原文件)
- 链接分为软连接和硬链接
软连接
* 语法:ln -s 原文件 目标
* 软链接文件以目标文件的路径形式出现的,类似快捷方式
* 可以对不存在的文件创建链接
* 可以对文件夹创建链接
* 可以跨文件系统创建链接
硬链接
* 语法:ln 原文件 目标
* 硬链接文件以文件副本的形式存在,但是不会占用实际的磁盘空间
* 只能对存在的文件创建,不能对文件夹(目录)创建链接
* 只能在当前的文件系统中创建链接
七、系统关机/重启
- shutdown:关机
- shutdown -h now:立即关机
- shutdown -h +10:10分钟之后关机
- shutdown -h 12:00:在指定的时间关机
- shutdown -r now 重启
- halt 立即关闭系统
- reboot 重启
八、用户和群组
每个用户账号都拥有一个惟一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
1.查看用户信息
cat /etc/passwd
uid: 系统分配的一个账户的唯一标识
超级管理员 root 0
系统用户 [1,499]
普通用户 >= 500
cat /etc/shadow
查看存储的用户的密码
2.添加用户/口令
useradd xiaoming # 添加了一个xiaoming用户
passwd xiaoming # 修改xiaoming用户的密码
3.删除账号
语法:userdel 选项 用户名
-r:把用户的主目录一起删除
eg:userdel -r xiaoming
4.修改账号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
语法:usermod 选项 用户名
选项:-c, -d, -m, -g, -G, -s, -u以及-o等
5.添加超级管理员
使用root用户编辑 /etc/sudoers 文件
找到root用户,并复制一行
将复制出来的root用户名改成想要获取最高权限的普通用户
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
shawn ALL=(ALL) ALL
普通用户可以使用sudo指令获取最高权限
6.增加/删除用户组
groupadd 选项 用户组
groupdel 用户组
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
九、文件的权限管理
1.关于文件权限的描述
权限 | 对文件 | 对文件夹 |
---|---|---|
r(Read,可读权限) | 可以读取这个文件中的内容 | 可以读取这个文件夹中的内容(ls) |
w(Write,可写权限) | 可以修改这个文件中的内容 | 可以创建文件(夹)、可以删除文件(夹) |
x(Execute,可执行权限) | 可以执行这个文件 | 可以切换到这个目录(cd) |
2.关于权限的表示方式
-rwxr–r--:
- 第一位:代表的是文件的类型,-:代表的是一个文件;d:代表的是一个文件夹(directory)
- 第2-4位:代表文件所属用户的权限
- 第5-7位:代表文件所属用户的用户组的权限
- 第8-10位:代表其他用户组的权限
每一部分的权限都是按照读,写,执行的顺序进行排列
drwxrw-rw-:是文件夹;对所属用户可读可写可执行;对其他用户可读可写不可执行
-rw-r-xr–:文件;对所属用户可读可写不可执行;对所属用户的用户组可读不可写可执行;对其他用户组可读不可写不可执行
3.数字表示形式
- 可以用一个八进制的数字来描述一个文件的权限,但是只能描述权限,无法描述是一个文件还是文件夹。
- 因为权限管理的顺序是固定的,那么可以用1代表有指定的权限,用0代表没有指定的权限,最终将得到的数字转为八进制。
如 rwx r-- r --二进制表示为111 100 100 ,转换为八进制即为744;r-xr–r--八进制表示544。
4.修改权限 chmod
修改一个文件(夹)的权限
u:代表所属用户
g:代表所属用户的用户组
o:地表其他用户组
chmod u+x a #对a文件所属用户添加x权限
chmod u-w a #给文件所属用户去除w权限
参数:
-R #递归修改
chmod -R g+w data/ #给data文件夹为所属的用户组添加w权限,并递归为所有的子文件都添加对应的权限
chmod 644 a #修改a文件的权限为 rw-r--r--
5.chmod修改文件的所有者
chown root:root a #修改文件a的所属用户为:root,所属用户组为:root。这里,第一个root代表是所属用户,第二个root是所属用户组
chown root a #只修改文件a的所属用户,不修改用户组
chown :root a #只修改文件a所属的用户组,不修改所属用户
十、日期与时间
Linux机器上的时间比较复杂,有各式各样的时钟和选项等等。机器里有两个时钟,硬件时钟从根本上讲是CMOS时钟,而系统时钟是由内核维护的。
查看系统时间
- 终端上执行cal命令可以显示本月的月历
- 终端输入命令date可以获取当前的日期和时间
- 终端上输入命令uptime,可以查看当前系统运行的时长
- 终端输入命令 date +%D,能够获取当前的年份月份日数
设置系统时间
一般使用“date -s”命令来修改系统时间。如将系统时间设定成2019年11月13日的命令如下。
date -s 11/13/19
将系统时间设定成下午1点12分0秒的命令如下。
date -s 13:12:0
注意:在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,
Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date
-s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令clock -w
这个命令强制把系统时间写入CMOS。
十一、文本指令——vi编辑器
vi: 编辑一个文本
vi a # 开始编辑这个文本,此时进入一般模式
进入编辑模式 按下 i
退出编辑模式 按下Esc
进入命令行模式 在一般模式下,输入 :
一般模式下的常用的快捷键
i : 进入编辑模式,在光标所在位置插入数据
a : 进入编辑模式,在光标所在位置的后一位插入数据
I : 进入编辑模式,在光标所在行的开头插入数据
A : 进入编辑模式,在光标所在行的结尾插入数据
o : 进入编辑模式,在光标所在行的下一行插入一个新行
O : 进入编辑模式,在光标所在行的上一行插入一个新行
gg : 跳到首行
G : 调到尾行
dd : 删除光标所在行
ndd : 删除从光标所在行开始,往下的n行
yy : 拷贝当前行
nyy : 拷贝从光标所在行开始,往下的n行
p : 粘贴,在下一行
u : 撤销
ctrl + r:
v : 进入选择模式,可以选择指定部分的数据
Ctrl + v: 进入块选择模式
shift + v: 进入行选择模式
命令行模式
wq :保存并退出
q! :不保存,强制退出
set nu :在当前编辑状态显示行号
set nonu :取消显示行号
/hello :查询‘hello’出现的位置,n进行下一项的匹配,N进行上一项的匹配
s/hello/HELLO :查询光标所在行第一个hello,并将其替换成HELLO
s/hello/HELLO/g :查询光标所在行的所有hello,并将其替换成HELLO
%s/hello/HELLO/g :查询整个文本中所有的hello并将其替换成HELLO
3,$s/hello/HELLO/g :查询从第三行开始,一直到文本结束,所有的hello,并替换成HELLO