基本命令操作
文件管理命令
cd
../
命令可以多次使用
快速切换到当前用户的home目录的方式:
$ cd # 方式1
$ cd ~ # 方式2
$ cd /home/用户名 # 方式3 //任意用户
如果我们要频繁的在两个路径之间切换, 也有相关的快捷操作:(cd -)长路径比较方便
# 通过cd进入到目录1: /usr/include/c++/7.5.0/ext/pb_ds/detail/list_update_map_/
# 通过cd进入到目录2: /home/luffy/get/onepiece/itis/a/goldfish
# 频繁在两个目录之间切换
$ cd -
ls
ls 就是 list, 打印指定的文件信息, 如果是目录, 显示对应目录中有哪些子文件, 语法格式如下:
$ ls [args] # 查看当前目录
$ ls [args] 目录名 # 查看指定目录
$ ls [args] 文件名 # 查看某个文件的信息
[args] 可以多个一起使用
- ls -a (隐藏+非隐藏)
给 ls添加 -a参数(就是 all 的意思)就可以显示指定目录中是所有文件了,
因为默认情况下具有隐藏属性的文件是不会显示出来的。那么在Linux中什么样是文件才能被隐藏呢?起始很简单只需要在文件名前边加一个点(.)文件就具有隐藏属性了,
例如: .demo, .a.txt。
- ls -l : -l参数(就是 list 的意思) 查看文件的详细信息,简写
ll
其中包括: 文件类型, 文件所有者对文件的操作权限, 文件所属组用户对文件的操作权限, 其他人对文件的操作权限, 硬链接计数, 文件所有者,文件所属组, 文件大小, 文件的修改日期, 文件名
# 文件详细信息介绍
d rwx rwx r-x 5 robin robin 4096 Jan 13 17:35 udp
| | | | | | | | | |
文件 文件所 文件所 其他人 硬链接 文件 文件 文件大小 文件修改时间 文件名
类型 有者权限 属组权限 权限 计数 所有者 所属组
- -: 普通的文件, 在Linux终端中没有执行权限的为白色, 压缩包为红色, 可执行程序为绿色字体
- d: 目录(directory), 在Linux终端中为蓝色字体, 如果目录的所有权限都是开放的, 有绿色的背景色
- l: 软链接文件(link), 相当于windows中的快捷方式, 在Linux终端中为淡蓝色(青色)字体
- c: 字符设备(char), 在Linux终端中为黄色字体(键盘)
- b: 块设备(block), 在Linux终端中为黄色字体(硬盘 )
- p: 管道文件(pipe), 在Linux终端中为棕黄色字体
- s: 本地套接字文件(socket), 在Linux终端中为粉色字体
ls -F 文件是目录则会在后边出现一个/
- ls -lFh (h表示更复合人类的,比如内存显示MB单位) 没有h显示字节大小
文件大小 —> 单位是字节 如果文件是目录显示为4096, 这是目录自身大小, 不包括目录中的文件大小
用户类型与文件的权限
在Linux中有三大类用户: 文件所有者, 文件所属组用户, 其他人, 我们可以对同一个文件给这三种人设置不同的操作权限,用于限制用户对文件的访问。
- 读权限:使用
r
表示, 即: read - 写权限:使用
w
表示, 即: write - 执行权限:使用
x
表示, 即: excute - 没有任何权限:使用-表示
硬链接计数是一个整数,如果这个数为N(N>=1),(多个别名)就说明在一个或者多个目录下一共有N个文件, 但是这N个文件并不占用多块磁盘空间, 他们使用的是同一块, 如果通过其中一个文件修改了磁盘数据, 那么其他文件中的内容也就变了。每当我们给给磁盘文件创建一个硬链接(使用 ln),磁盘上就会出现一个新的文件名,硬链接计数加1,但是这新文件并不占用任何的磁盘空间,文件名还是映射到原来的磁盘地址上。
创建删除目录
tree 命令 --以树的形式展示目录结构
目录的创建分为两种, 一种是创建单个目录, 另一种是一次性创建多层目录, 使用的命令是mkdir, 后边参数是要创建的目录的名字,
如果是多层目录需要添加参数**-p**。关于创建的目录所在的路径可以是相对路径, 也可以是绝对路径。
# 单层目录
$ mkdir 新目录的名字
mkdir a b //同时创建多个单层目录
# 多层目录, 需要加参数 -p
$ mkdir parent/child/baby1/baby2 -p
- 删除目录
如果要删除已经存在的路径一共有两种方式, 可以使用rmdir或者rm
rmdir: 只能删除空目录,有点low,不好用
rm: 可以删除文件也可以删除目录, 如果删除的的是目录, 需要加参数 -r, 意思是递归(recursion)
rm命令还有另外两个经常使用的参数:
- -i: 删除的时候给提示
- -f: 强制删除文件, 没有提示直接删除并且不能恢复, 慎用
cp命令(复制文件)
使用这个命令可以拷贝文件也可以拷贝目录
# `语法: cp 要拷贝的文件 得到的文件`
# `场景1: 文件A, 将A拷贝一份得到文件B`
$ cp 文件A 文件B
# `场景2: 文件A存在的, 文件B也是存在的, 执行下边的拷贝 ==> 文件A覆盖文件B`
$ cp 文件A 文件B
- #拷贝目录需要参数 -r
# 场景1: 目录A, 通过拷贝得到不存在的目录B
$ cp 目录A 目录B -r
# 场景2: 目录A存在的, 目录B也是存在的, 执行下边的拷贝 ==> **目录A会被拷贝并将其放到目录B中**
$ cp 目录A 目录B -r
# 场景3: 把A目录里的某一个或者多个文件拷贝到B目录中
$ cp A/a.txt B # 拷贝 A目录中的 a.txt 到目录B中
$ cp A/* B -r # 拷贝 A目录中的所有文件到目录B中, 不能确定A目录中是否有子目录, 因此需要加 -r
mv 文件的移动,命名,覆盖
mv 就是move, 这个Linux命令既能移动文件所在目录也可以给文件改名。
- 文件的移动
语法: mv 要移动的文件 目录
有一个文件A, 移动到目录B中
其中A可以是文件也可以是目录, B必须是目录而且必须是存在的
$ mv A B (A可以是多个文件 如 A.tmp b.tmp)
- 文件改名
语法: mv 要改名的文件 新名字(原来是不存在的,这点很重要)
其中A可以是文件也可以是目录,并且是存在的, B原来是不存在的 $ mv A B
- 文件覆盖
语法: mv 存在文件A 存在的文件B
其中A是文件(非目录)并且是存在的, B也是一个文件(非目录)并且也存在
A文件中的内容覆盖B文件中的内容, A文件被删除, 只剩下B文件 $ mv A B
查看文件内容
最常用的就是vim,下面介绍一下vim以外的一些的一些方式:
$
cat 文件名
该命令可以将文件内容显示到终端, 由于终端是有缓存的, 因此能显示的字节数也是受限制的。 如果文件太大数据就不能完全显示出来了,因此该命令适合查看比较小的文件内容。
move
该命令比cat要高级一点, 我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ more 文件名
- 回车: 显示下一行
- 空格: 向下滚动一屏
- b: 返回上一屏
- q: 退出more
less 和more差不多
$ less 文件名
- b: 向上翻页
- 空格: 向后翻页
- 回车: 显示下一行
- 上下键: 上下滚动
- q:退出
head 默认前10行 相似tail命令
$ head 文件名 指定显示头部的前多少行 $ head -行数 文件名
链接的创建
软链接(相当于快捷方式)和硬链接(并不会拷贝,只是多了一个新的文件名,且硬链接计数会加1,可直接修改源文件)
- 软链接
# 语法: ln -s 源文件路径 软链接文件的名字(可以带路径)
# 查看目录文件
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:27 get
-rw-r--r-- 1 root root 37 Jan 25 17:26 onepiece.txt
# 给 onepiece.txt 创建软连接, 放到子目录 get 中
[root@VM-8-14-centos ~/luffy]# ln -s /root/luffy/onepiece.txt get/link.lnk
[root@VM-8-14-centos ~/luffy]# ll get
total 4
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
注意:创建链接文件时,如果创建的链接文件写绝对路径时,可以随意移动链接文件,对于相对路径,就不能移动,否则会找不到链接的路径文件。
- 硬链接(与软连接相比,缺少参数s)
# 语法: ln 源文件 硬链接文件的名字(可以带路径)
# 创建硬链接文件, 放到子目录中
[root@VM-8-14-centos ~/luffy]# ln onepiece.txt get/link.txt
# 查看链接文件和硬链接计数, 从 1 --> 2
[root@VM-8-14-centos ~/luffy]# ll get
total 8
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
-rw-r--r-- 2 root root 37 Jan 25 17:26 link.txt
drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
硬链接和软链接不同, 它是通话文件名直接找对应的硬盘地址, 而不是基于路径, 因此 源文件使用相对路径即可, 无需为其制定绝对路径。
目录是不允许创建硬链接的。
修改文件的权限
文件权限是针对文件所有者, 文件所属组用户, 其他人这三类人而言的, 对应的操作指令是
chmod
。设置方式也有两种,分别为文字设定法和数字设定法。
- 文字设定法是通过一些关键字r, w, x, -来描述用户对文件的操作权限。
- 数字设定法是通过一些数字 0, 1, 2, 4, 5, 6, 7 来描述用户对文件的操作权限。
- chomd
#chmod
#语法格式: chmod who [+|-|=] mod 文件名
- who:
- u: user -> 文件所有者
- g: group -> 文件所属组用户
- o: other -> 其他
- a: all, 以上是三类人 u+g+o
- 对权限的操作: +: 添加权限 -: 去除权限 =: 权限的覆盖
- mod: 权限 r: read, 读 w: write, 写 x: execute, 执行 -: 没有权限
数字设定: # 语法格式: chmod [+|-|=] mod 文件名- mod: 权限描述, 所有权限都放开是 7
- 4: read, r
- 2: write, w
- 1: execute , x
- 0: 没有权限
# 将文件所有者权限设置为读和执行, 也就是权限覆盖
robin@OS:~/Linux$ chmod u=rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-r-- 2 robin robin 2929 Apr 14 18:53 b.txt*
# 给其他人添加写和执行权限
robin@OS:~/Linux$ chmod o+wx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# 给文件所属组用户去掉读和执行权限
robin@OS:~/Linux$ chmod g-rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-x-w-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# 将文件所有者,文件所属组用户,其他人权限设置为读+写+执行
robin@OS:~/Linux$ chmod a=rwx b.txt
robin@OS:~/Linux$ ll b.txt
-rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 b.txt*
分解: chmod 0567 a.txt
0 5 6 7
八进制 文件所有者 文件所属组用户 其他人
r + x r + w r+w+x
修改文件的所有者
默认情况下, 文件是通过哪个用户创建出来的, 就属于哪个用户, 这个用户属于哪个组, 文件就属于哪个组
chown
可以修改文件所有者,同时修改文件所有者是跨用户操作,需要借助管理员权限(sudo)才能完成操作
但一般新用户是没有sudo权限的,默认不能够使用管理员权限执行某些管理员才能执行的命令。
添加新用户(adduser,设置密码passwd,切换su)
# 添加新用户 sanji
[root@VM-8-14-centos ~]# adduser sanji
# 给新用户 sanji 设置一个密码
[root@VM-8-14-centos ~]# passwd sanji
Changing password for user sanji.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 切换到 sanji 用户
[root@VM-8-14-centos ~]# su - sanji
添加sudo权限(位于sudoers文件中)
sudoers的文件位于/etc目录下。
我们惊奇的发现这个文件的所有者root对它也只有读权限, 默认是不能修改的, 作为root以外的其他用户对它没有任何的操作权限。
解决方案:
先切换到root用户
在root用户下修改这个文件属性, 给其添加写权限
修改文件内容, 把普通用户sanji添加进去, 保存退出
将文件权限修改为原来的 400 (r--------)
切换到用户 sanji, 这时候就可以使用 sudo了, 权限添加成功
# 1. 切换到root用户
$ su root
Password: # 输入root用户的密码
# 2. 修改文件权限, 暴力一点没有关系, 反正还需要改回去, 直接 777 就行
$ chmod 777 sudoers
# 3. 使用 vim 打开这个文件
$ vim sudoers
# 4. 在文件中找到这一行, 在文件偏尾部的位置
root ALL=(ALL) ALL
# 5. 照葫芦画瓢, 在下边新添加一行内容如下:
root ALL=(ALL) ALL # 原来的内容
sanji ALL=(ALL) ALL # 新添加的行, 将用户名指定为 sanji 即可
# 6. 保存退出 (先按esc, 然后输入 :wq)
# 7. 将文件改回原来的权限
$ chmod 400 sudoers
重定向命令(使用最多的就输出重定向)
修改输出的数据位置,使用重定向可以方便的进行文件的复制,文件内容的追加,
符号:> 或者>>
>
将文件内容写入到指定文件中, 如果文件中已有数据, 则会使用新数据覆盖原数据
>>
将输出的内容追加到指定的文件尾部
可以与cat命令一起使用。
- 输出重定向:
使用 > 符号可以将命令的输出重定向到一个文件。如果文件不存在,它会被创建;如果文件已经存在,它的内容会被覆盖。
cat filename > outputfile
- 输入重定向:
使用 < 符号可以从一个文件获取输入。这经常与一些接受输入并基于该输入执行操作的命令一起使用。
cat < inputfile
这会将 inputfile 的内容显示到终端。
- 管道:
虽然这不是直接的重定向,但 |(管道)符号允许你将一个命令的输出作为另一个命令的输入。这与重定向类似,但更加灵活。
cat filename | grep "pattern"
这会显示 filename 中包含 “pattern” 的所有行。
echo命令
在Linux Shell中,echo命令是一个常用的内置命令,用于在终端上显示文本或字符串。它主要用于显示变量的值,创建文件的内容,或者简单地输出一些信息。