Linux基础Part2——基本命令

[TOC]

查看帮助

help

1
命令 --help

man

1
man 命令
  • 空格/→:下一页
  • 回车/↓:下一行
  • b/←:上一页
  • f/↑:上一行
  • q:退出

目录管理

处理目录常用命令

  • ls: 列出目录
  • cd:切换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录
  • cp: 复制文件或目录
  • rm: 移除文件或目录
  • mv: 移动文件与目录,或修改文件与目录的名称

ls 列出目录

1
ls [ -al ] [ 目录名称 ]
  • -a 列出全部文件,包括隐藏文件(开头为 . 的文件)
  • -l 列出长数据串,包括文件的属性和权限,不包括隐藏文件

cd 切换目录

1
cd [ 相对路径或绝对路径 ]
  • 绝对路径:由 根目录/ 写起。
  • 相对路径:由 父级目录../ 或者 当前目录(可省略)./ 写起。

pwd 显示当前目录

1
pwd [ -P ]
  • -P 显示出真实路径,而非使用连接(link)路径。

mkdir 创建目录

1
mkdir  [ -mp ] 目录名称
  • -m :配置文件的权限
  • -p :递归创建多级目录

rmdir 删除目录

1
rmdir [ -p ] 目录名称
  • -p :递归删除上一级空白目录

rmdir只能删除空白目录,rm删除非空目录。

cp 复制文件/目录

1
cp [ -adfilprsu ] 来源(source) [ source1 source2 source3 ] 目标(destination)
  • -a:等效于 -pdr
  • -p:连同文件的属性一起复制过去,而非使用默认属性
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身
  • -r:多级目录的递归复制
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身
  • -s:复制成为符号连结档 (symbolic link),即『捷径』文件
  • -u:若 destination 比 source 旧才升级 destination !

rm 移除文件/目录

1
rm [ -fir ] 文件/目录

选项与参数:

  • -f :(force)忽略不存在的文件,不会出现警告信息,强制删除
  • -i :互动模式,在删除前会询问使用者是否删除
  • -r :递归删除目录

mv 移动文件/目录,或修改名称

1
mv [ -fiu ] source [ source2 source3 ] destination

选项与参数:

  • -f :强制移动。若存在,则直接替换
  • -i :若目标文件 (destination) 已经存在时,询问是否覆盖
  • -u :若存在,则保留最后更新时间最新的文件

touch 创建文件

1
touch 文件名1 文件名2

可以一次创建多个文件

可以随意指定文件类型

>输出重定向 和 >>追加

1
2
3
4
ls -l>文件  # 列表内容覆盖写入目标文件夹
ls -al>>文件 # 列表内容追加到文件末尾
cat 文件1>文件2 # 用文件1覆盖文件2
echo "内容">>文件 # 将内容追加到文件末尾

>, >>左右可空格也可不空格

基本属性

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

每个文件都有自己的所有者、所有组。

对于这个文件的属主(所有者/创建者)、属组(所有组)、其他用户(除了属主和属组),有不同的权限。

一个文件夹要有x的权限,用户才能进入这个目录;并且要有r的权限,才能查看;只有w的权限,才能修改文件夹。

权限

使用ll或者ls –l来显示一个文件的属性以及文件所属的用户和组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@VM-1-14-centos /]# ls -ll
total 64
lrwxrwxrwx. 1 root root 7 Mar 7 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Mar 6 19:50 boot
drwxr-xr-x 2 root root 4096 Nov 5 2019 data
drwxr-xr-x 20 root root 3020 Mar 6 19:49 dev
drwxr-xr-x. 90 root root 4096 Mar 6 19:50 etc
drwxr-xr-x. 2 root root 4096 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Mar 7 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 7 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Mar 7 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 4 root root 4096 Aug 5 2020 opt
dr-xr-xr-x 104 root root 0 Mar 6 19:49 proc
dr-xr-x---. 7 root root 4096 Mar 10 19:45 root
drwxr-xr-x 25 root root 900 Mar 8 16:10 run
lrwxrwxrwx. 1 root root 8 Mar 7 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Mar 9 22:52 sys
drwxrwxrwt. 9 root root 4096 Mar 10 19:46 tmp
drwxr-xr-x. 13 root root 4096 Mar 7 2019 usr
drwxr-xr-x. 19 root root 4096 Apr 22 2020 var
# 权限 文件个数 属主 属组 大小 修改日期 时间 文件名

第1个字符代表这个文件的类型(目录、文件或链接文件等):

  • d:表示目录
  • -:表示文件
  • l:档 (link file)
  • b:件里面的可供储存的接口设备 ( 可随机存取装置 )
  • c:件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )

第2-10个字符中,以三个为一组,且均为『rwx』 的三个参数的组合。

  • r:代表可读(read)
  • w:代表可写(write)
  • x:代表可执行(execute)
  • -:代表无权限

363003_1227493859FdXT

属主和属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

对于 root 用户来说,一般情况下,文件的权限对其不起作用。

数字修改文件属性

1、chgrp:更改文件属组

1
chgrp [ -R ] 属组名 文件名
  • -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

2、chown:更改文件属主,也可以同时更改文件属组

1
2
chown [ –R ] 属主名 文件名
chown [ -R ] 属主名:属组名 文件名

3、chmod:更改文件9个属性

1
chmod [ -R ] xyz 文件/目录
  • -R:连同目录下的所有文件都进行递归变更

Linux文件的基本权限有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。

各权限的分数对照:

  • r = 4
  • w = 2
  • x = 1

举例:

  • 可读可写可执行:rwx = 4+2+1 = 7
  • 可读可写不可执行:rw- = 4+2+0 = 6
  • 不可读/写/执行:— = 0+0+0 = 0

符号修改文件属性

使用 u、g、o、a 代表 user用户、group组、others其他、all全部 身份

使用 r、w、x 代表读写权限

1
chmod [ u/g/o/a ] [ +(加入) -(除去) =(设定) ] [ r w x ] 文件或目录

demo:

1
2
3
4
5
6
7
8
9
#  touch test1    // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
# chmod a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

内容查看

查看文件内容

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示
  • nl 显示的时候同时输出行号
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看开头几行
  • tail 只看末尾几行

cat

1
cat [ -AbEnTv ]
  • -A:等价于 -vET ,可列出一些特殊字符而不是空白而已
  • -b:列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E:将结尾的断行字节 $ 显示出来;
  • -n:列印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T:将 [tab] 按键以 ^I 显示出来;
  • -v:列出一些看不出来的特殊字符

demo:

1
2
3
4
5
6
7
8
9
10
[root@VM-1-14-centos network-scripts]# cat ifcfg-eth0 
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth0
HWADDR=52:54:00:23:6f:89
ONBOOT=yes
PERSISTENT_DHCLIENT=yes
TYPE=Ethernet
USERCTL=no

tac

1
tac [ -AbEnTv ]

demo:

1
2
3
4
5
6
7
8
9
10
[root@VM-1-14-centos network-scripts]# tac ifcfg-eth0 
USERCTL=no
TYPE=Ethernet
PERSISTENT_DHCLIENT=yes
ONBOOT=yes
HWADDR=52:54:00:23:6f:89
DEVICE=eth0
BOOTPROTO=dhcp
#
# Created by cloud-init on instance boot automatically, do not edit.

nl

1
nl [ -bnw ] 文件
  • -b:指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n:列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w:行号栏位的占用的位数。

demo:

1
2
3
4
5
6
7
8
9
10
[root@VM-1-14-centos network-scripts]# nl ifcfg-eth0 
1 # Created by cloud-init on instance boot automatically, do not edit.
2 #
3 BOOTPROTO=dhcp
4 DEVICE=eth0
5 HWADDR=52:54:00:23:6f:89
6 ONBOOT=yes
7 PERSISTENT_DHCLIENT=yes
8 TYPE=Ethernet
9 USERCTL=no

more

  • 空白键 (space):代表向下翻一页;
  • Enter:代表向下翻『一行』;
  • /字串:代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
  • :f:立刻显示出档名以及目前显示的行数;
  • q:代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b:代表往回翻页,不过这动作只对文件有用,对管线无用。

less

  • 空白键:向下翻动一页;
  • [pagedown]↑:向下翻动一页;
  • [pageup]↓:向上翻动一页;
  • /字串:向下搜寻『字串』的功能;
  • ?字串:向上搜寻『字串』的功能;
  • n:重复前一个搜寻 (与 / 或 ? 有关!)
  • N:反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q:离开 less 这个程序;

echo

输出内容到控制台

1
echo [ 内容 ]

demo:输出环境变量

1
2
[root@VM-1-14-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
1
head [ -n number ] 文件
  • -n:后面接数字,表示显示几行,默认为10行

tail

1
tail [ -n number ] 文件
  • -n :后面接数字,表示显示几行,默认为10行

日期指令

date

1
2
3
4
date
date +%Y
date +"%Y-%m-%d %H:%M:%S"
date -s "2021-03-12 15:06:35"
  • -s 设置当前系统时间

+"%Y-%m-%d %H:%M:%S""+%Y-%m-%d %H:%M:%S"是等效的,但必须要有一个 + ,多出来的+将会被当做字符输出。

输出单个数值不需要 ""

cal

1
2
cal [ 选项 ]  # 默认显示当前月份
cal 2021 # 显示2021年整年日历

查找指令

find

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。

1
find [ 搜索范围 ] [ 选项 ]
  • -name 按指定文件名查找 -name 文件名
  • -user 查找属于指定用户的所有文件 -user 用户名
  • -size 查找指定大小的文件(+n 大于 -n 小于 n 等于) -size +20M

demo:

1
find / *.txt  # 查找所有.txt文件

locate

locate 指令无需遍历整个文件系统,利用事先建立的系统中所有文件名称及路径的 locate 数据库,实现快速定位给定的文件路径。

第一次运行前,必须使用 updatedb 指令创建 locate 数据库,同时也需要定期更新 locate 时刻,以保证查找准确性。

1
locate 文件名

grep和管道符号|

grep 过滤查找 。

管道符 | 表示将前一个命令的处理结果输出传递给后面的命令处理。

1
grep [ 选项 ] 内容 文件
  • -n 显示匹配行和行号
  • -i 忽略大小写

demo:

1
2
3
4
[root@VM-1-14-centos ~]# grep -n main hello.java 
2: public static void main(String args[]){
[root@VM-1-14-centos ~]# cat hello.java | grep -n main
2: public static void main(String args[]){

压缩与解压

gzip/gunzip

1
2
gzip 文件名  # 将文件压缩成*.gz文件
gunzip 文件名 # 解压*.gz文件

使用 gzip/gunzip 将不会保留源文件。

zip/unzip

经常使用于项目打包发布中。

会保留源文件。

1
2
zip [ -r ] 文件名.zip 需要压缩的目录或文件
unzip [ -d ] 文件名.zip
  • -r:递归压缩
  • -d <目录> :指定解压后文件的存放目录

tar

tar是打包指令,即可以压缩也可以解压,最后打包后的文件是 .tar.gz 。

1
tar	[ 选项 ] XXX.tar.gz 打包的内容
  • -c:产生.tar打包文件
  • -v:显示详细信息
  • -f:指定压缩后的文件名
  • -z:打包同时压缩
  • -x:解包.tar文件
  • -t:列出档案文件的内容,查看已经备份了哪些文件

对于解压的选项,f必须放最后,其他的位置任意,但是建议按照规范

解压到指定某个目录必须加上-C选项,不然会出错。

demo:

1
2
3
tar -zcvf txt.tar.gz t1.txt t2.txt  # 这里将t1.txt和t2.txt打包压缩为txt.tar.gz文件
tar -zcvf home.tar.gz /home/ # 将/home/目录打包
tar -zxvf num.tar.gz -C ~ # 这里将num.tar.gz解压到~这个目录下,这个目录必须存在

软/硬链接

Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。

1
ln [ -s ] 源文件 目标文件

硬连接

  • 硬连接指通过索引节点号(Inode Index)来进行连接。即可以有两个文件名A和B指向同一个索引节点号,一个文件拥有多个有效路径名,A和B对文件系统来说是完全平等的。
  • 删除其中任何一个都不会影响另外一个的访问,只有两个都被删除才算是真正删除了文件数据。
  • 通常用于备份以防误删。

软连接

  • 符号连接(Symbolic Link),也叫软连接。
  • 软链接文件实际是一个特殊的文件。内容的是另一文件的位置信息,相当于快捷方式。
  • A 和 B 指向的是两个不同的 inode 节点,即他们本体在磁盘的存储是两个文件。
  • 但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的地址。