- -l 显示文件的详细信息
- -a 显示全部的文件,包括隐藏的文件
- -h 以人们易读的方式显示文件或目录大小,如 234MB、2GB
可以组合使用。比如:
ls -lh /root/ 意思是显示root目录下的所有文件和目录信息,并以诸如200m的大小形式显示
第一列:规定了不同的用户对文件所拥有的权限,具体权限的含义将在后续章节中讲解。
第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
第五列:大小,默认单位是字节。
第六列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
第七列:文件名或目录名。
[root@localhost ~]# mkdir lm/movie/jp/cangls
mkdir:无法创建目录"lm/movie/jp/cangls":没有那个文件或目录
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog lm
[root@localhost ~]# ls lm/
movie
#这里只查看一级子目录,其实后续的jp目录、cangls目录都已经建立
[root@localhost ~]# mkdir -m 711 test2
[root@localhost ~]# ls -l
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
仔细看上面的权限部分,也就是 ls 命令输出的第一列数据(绿色部分),
test 和 test1 目录由于不是使用 -m 选项设定访问权限,
因此这两个目录采用的是默认权限(这里的默认权限值是 755,
后续章节再详细介绍默认权限)。
而在创建 test2 时,使用了 -m 选项,通过设定 711 权限值来给予新的目录
drwx--x--x 的权限
【例 1】 touch 命令创建文件。
[root@localhost ~]#touch bols
#建立名为 bols 的空文件
【例 2】 在例 1 的基础上修改文件的访问时间
[root@localhost ~]#ll --time=atime bols
#查看文件的访问时间
-rw-r--r-- 1 root root 0 Sep 25 21:23 bols
#文件上次的访问时间为 9 月 25 号 21:23
[root@localhost ~]#touch bols
[root@localhost ~]#ll --time=atime bols
-rw-r--r-- 1 root root 0 May 15 16:36 bols
#而如果文件已经存在,则也不会报错,只是会修改文件的访问时间。
cp 命令的基本格式如下:
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
【例 1】cp 命令基本用法
cp 命令既可以复制文件,也可以复制目录。我们先来看看如何复制文件,例如:
**复制文件**
cp x.txt data/
**复制目录**
cp -r test/ data/ 将test整个目录,复制到data下
**强制覆盖目录下的文件或者目录**
\cp -r test/ data/
[root@localhost ~]# touch cangls
#建立源文件
[root@localhost ~]# cp cangls /tmp/
#把源文件不改名复制到 /tmp/ 目录下
如果需要改名复制,则命令如下:
[root@localhost ~]# cp cangls /tmp/bols
#改名复制
**复制目录只需使用“-r”选项即可,例如:
[root@localhost ~]# mkdir movie
#建立测试目录
[root@localhost ~]# cp -r /root/movie/ /tmp/
#目录原名复制
此命令的基本格式为:
[root@localhost ~]# rm [选项] 文件或目录
删除非空的目录
rm -rf 目录
选项:
-f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。
-i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。
-r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。
注意:加入了强制功能之后,删除就会变得很简单,但是需要注意,数据强制删除之后无法恢复,数据恢复很难恢复完整的数据,一般能恢复 70%~80% 就很难得了。
该命令的基本格式如下:
[root@localhost ~]# mv 【选项】 源文件 目标文件
选项:
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-v:显示文件或目录的移动过程;
-u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;
同 rm 命令类似,mv 命令也是一个具有破坏性的命令,如果使用不当,很可能给系统带来灾难性的后果
【例 1】移动文件或目录。
[root@localhost ~]# mv cangls /tmp
#移动之后,源文件会被删除,类似剪切
[root@localhost ~]# mkdir movie
#创建movie目录
[root@localhost ~]# mv movie/ /tmp
#将movie移动到tmp的目录下
【例 2】强制移动。
之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。
如果我们确认需要覆盖已经存在的同名文件,则可以使用 "-f" 选项进行强制移动,这就不再需要用户手工确认了。例如:
[root@localhost ~]# touch cangls
#重新建立文件
[root@localhost ~]# mv -f cangls /tmp
#就算 /tmp/ 目录下已经存在同名的文件,由于"-f"选项的作用,所以会强制覆盖
【例 3】改名。
如果源文件和目标文件在同一目录中,那就是改名。例如:
[root@localhost ~]# mv bols lmls
#把 bols 改名为 lmls
以只读的方式查看文件内容,也有合并文件的作用
cat 【选项】 要查看的文件
-n 显示行号
cat -n 要查看的文件加上 | more 能够进行分页浏览
more 以全屏幕的方式按页显示文本文件的内容
格式:more 文件
例如:more /etc/profile
q键代表立刻结束more
less 支持多终端显示,适用于大型文件,它的效率比较高
格式:less 要查看的文件
输出重定向:会将原来的文件覆盖
ls -l > a.txt 将 ls -l 的显示内容覆盖写入到a.txt中,如果文件不存在,则会创建
cat 文件1 > 文件2 将文件1的内容覆盖到文件2
** >>的用法 cat 文件1>> 文件2 将文件1的内容追加到文件2
echo“内容” >> 文件
基本语法
tail 文件 (查看文件尾部后十行)
tail -f 文件 (实时追踪该文档的所有更新,工作经常使用)
比如: tail -f aa.txt 监控aa文档的实时更新
基本语法:history (查看所有的历史命令)
history 10 查看最后面执行的十个命令
!10 执行编号为10的指令
gzip用于压缩文件 gunzip用于解压缩文件(只能对单个文件)
当我们使用gzip对文件进行压缩后,不会保留原来的文件
zip和unzip
这个在项目打包发布中很有用
基本语法:zip 【选项】 xxx.zip(压缩后文件的名字) 将要压缩的内容(可以是文件和目录)
-r 是递归压缩,压缩目录
zip -r xxx.zip /home/ 将/home下的所有文件压缩成xxx.zip
unzip 【选项】xxx.zip 解压缩文件
-d<目录> :指定解压后文件的存放目录
unzip -d /opt/tmp/ xxx.zip 将xxx.zip 解压到 /opt/tmp目录下
tar 打包指令,最后打包后的文件是.tar.gz的文件
基本语法:tar 【选项】 xxx.tar.gz(打包目录)
tar -czvf xxx.tar.gz a1.txt a2.txt -C /home将a1和a2文件压缩成xxx.tar.gz 并将压缩的文件存放到 /home目录下
tar -xzvf a.tar.gz -C /home 将压缩文件解压到 home目录下
注意:解压用czvf ,压缩用xzvf
i: 在当前光标所在字符的前面,转为输入模式;
I:在当前光标所在行的行首,转换为输入模式
a: 在当前光标所在字符的后面,转为输入模式;
A:在当前光标所在行的行尾,转换为输入模式
o: 在当前光标所在行的下方,新建一行,并转为输入模式;
O:在当前光标所在行的上方,新建一行,并转为输入模式;
拷贝当前行 yy ,拷贝当前行及向下的四行(一共五行) 5yy 并粘贴 p
**删除当前的行 dd 5dd代表删除下面的五行**
**设置文件的行号:set nu 取消行号 set nonu**
**到达文档的末尾:G**
**到达行首:gg**
查找文档内的内容:输入:/ ,在输入关键字,如果要继续查找,输入小n
例如::/if 就会找到一个if,接着找按n
** 将光标移动到某一行方法
第一步:显示行号:set nu
第二部:输入10这个数(不在编辑模式下输入)
第三部:输入shift+g
向上滚动一屏 crtl + b
向下滚动一屏 ctrl + f
查询用户信息
id 用户名
修改用户密码
passwd 用户名
删除用户的方法
删除用户xm 但是保留家目录
userdel xm
删除用户xm和家目录
userdel -r xm
** 一般情况下,不会删除家目录**
从用户返回到root用户下
exit命令
useradd -g 用户组 用户名
** 修改用户组**
usermod -g 要添加到的用户组 用户名
通过此命令可以给每个服务器的各个运行级别设置自启动/关闭
参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作。比如:
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
为什么一开始 ls 命令可以省略参数?那是因为有默认参数,默认参数是当前所在位置,所以会显示当前目录下的文件名。
登录系统后,第一眼看到的内容是:
[root@localhost ~]#
这就是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?
[]:这是提示符的分隔符号,没有特殊含义。
root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。
@:分隔符号,没有特殊含义。
localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
#:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。
1) 判断路径
判断用户是否以绝对路径或相对路径的方式输入命令(如 /bin/ls),如果是的话直接执行。
2) 检查别名
Linux 系统会检查用户输入的命令是否为“别名命令”。要知道,通过 alias 命令是可以给现有命令自定义别名的,即用一个自定义的命令名称来替换原本的命令名称。
例如,我们经常使用的 rm 命令,其实就是 rm -i 这个整体的别名:
[root@localhost ~]# alias rm
alias rm='rm -i'
这使得当使用 rm 命令删除指定文件时,Linux 系统会要求我们再次确认是否执行删除操作。例如:
[root@localhost ~]# rm a.txt <-- 假定当前目录中已经存在 a.txt 文件
rm: remove regular file 'a.txt'? y <-- 手动输入 y,即确定删除
[root@localhost ~]#
这里可以使用 unalias 命令,将 Linux 系统设置的 rm 别名删除掉,执行命令如下:
[root@localhost ~]# alias rm
alias rm='rm -i'
[root@localhost ~]# unalias rm
[root@localhost ~]# rm a.txt
[root@localhost ~]# <--直接删除,不再询问
注意,这里仅是为了演示 unalisa 的用法,建议读者删除 rm 别名之后,再手动添加到系统中,执行如下命令即可再次成功添加:
[root@localhost ~]# alias rm=‘rm -i’
3) 判断是内部命令还是外部命令
Linux命令行解释器(又称为 Shell)会判断用户输入的命令是内部命令还是外部命令。其中,内部命令指的是解释器内部的命令,会被直接执行;而用户通常输入的命令都是外部命令,这些命令交给步骤四继续处理。
内部命令由 Shell 自带,会随着系统启动,可以直接从内存中读取;而外部命令仅是在系统中有对应的可执行文件,执行时需要读取该文件。
判断一个命令属于内部命令还是外部命令,可以使用 type 命令实现。例如:
[root@localhost ~]# type pwd
pwd is a shell builtin <-- pwd是内部命令
[root@localhost ~]# type top
top is /usr/bin/top <-- top是外部命令
4) 查找外部命令对应的可执行文件
当用户执行的是外部命令时,系统会在指定的多个路径中查找该命令的可执行文件,而定义这些路径的变量,就称为 PATH 环境变量,其作用就是告诉 Shell 待执行命令的可执行文件可能存放的位置,也就是说,Shell 会在 PATH 变量包含的多个路径中逐个查找,直到找到为止(如果找不到,Shell 会提供用户“找不到此命令”)。
chown 新用户名 文件名
chown tom a.txt(a文件属于root,通过chown命令,用户名改成了tom)
chown 新用户名:新组 文件 改变用户的所有者和所有组
-R 如果是目录,则使其所有子文件或者目录递归生效
chown -R tom kkk/ 将kkk目录下的所有文件,包括子目录和子目录下的所有文件,递归的将文件、目录的所有者改成tom
改变文件所在组
chgrp 组名 文件名
例如:chgrp tom or.txt(将or.txt的组名root,改成tom组名)
改变用户所在组
usermod -g 组名 用户名
-R是递归更改文件所在组
通过数字变更权限
规则:r=4,w=2,x=1,rwx=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
例如:chmod 755 /home/abc.txt
lsblk(老师不离开)查看当前系统的分区情况
lsblk -f 查看系统的分区和挂载的情况
虚拟机添加硬盘
分区 fdisk /dev/sdb
格式化 mkfs -t ext4 /dev/sdb1
挂载 先创建一个 /home/newdisk ,挂载mount /etc/sdb1 /home/newdisk
设置自动挂载(永久挂载,当重启系统后,仍然可以挂载到目录)
vi /etc/fstab
添加
/etc/sdb1 /home/newdisk ext4 defaults 0 0
最后mount -a 实现永远挂载
卸载硬盘
umount 挂载目录
例如:umount /dev/sdb1
基本语法:df -h 查询系统整体磁盘的使用情况
指定固定的ip
编辑 /etc/sysconfig/networi-scripts**/ifcfg-eth0**
重启网络:service network restart
查看进程的指令是ps,一般使用 ps -aux
ps -aux | grep sshd 查看有没有sssh服务
终止进程kill
kill 【选项】 进程号
-9 表示强迫进程立即停止
killall 进程名称 /通配符
例如:kill -9 4000
killall gedit(终止多个gedit编辑器)
服务本质是进程,运行在后台,会监听某个端口。
service 服务名 start| stop| status| restart 这种方法只是临时生效
在centos7后,不再使用service ,而是systemctl
基本语法:netstat 【选项】
常用的: netstat -anp
-an 按一定顺序排列输出
-p 显示哪个进程在调用
rpm -qa (| grep xxx ) 查询 已安装的rpm列表
rpm-qa | grep firefox 查询有没有安装firefox
rpm -q 软件包名 查询软件包是否暗转
例如:rpm -q firefox
rpm -qi 软件包名:查询软件包信息
rpm -ql firefox 查询rpm包的文件安装到哪里去了
rpm -e rpm包的名称
例如:rpm -e firefox
rpm -ivh rpm包全路径名称
例如:rpm -ivh firefox-42.1.rpm
i 表示安装(install)
v=verbose 提示
h=hash 进度条
yum list 查询yum服务器的能够安装的软件列表
安装指定的yum包
yum install xxx 下载安装
1、如何找回root密码
—linux有任务调度的功能----------
比如每天两点钟将mysql备份