一、命令行提示符
1.1 命令行基础
bearpi:当前用户名,在@前是用户名
ubuntu:用户所在的域名,在@后面,这是我自定义的,默认应该是主机名
~ 波浪线为目前所在目录,~代表家目录(home directory)
后面紧跟的 $ 为当前所具有的权限,$ 代表普通用户 # 代表 root 管理员
1.2 一些简单的命令
1.2.1 sudo su 命令
可以暂时获得 root 权限,可见后边的 $ 变成了 #
1.2.2 date 命令
顾名思义,这个命令是获得当前系统时间
1.2.3 ls 命令
ls 是 list 的缩写,是列出、列举的意思,在 linux 中,ls 命令是列出当前目录的文件或文件夹。
下面列举出了用户家目录的文件夹,从左到右分别是 桌面、文档、下载、音乐等文件夹
1.3 寻找命令的快捷键
在寻找任何命令或者文件都可以摁 tab 键显示提示,下面在终端输入 da 之后摁两下 tab 键即给出提示:
在 cd 后摁两下 tab 键 可以给出可选的文件名
1.4 命令的参数
参数是在命令后的一些补充项,命令和参数用空格隔开即可
- 参数可以有多个,都用空格隔开
- 参数可以包括数字、字母等,并且区分大小写
- 参数没有固定的格式,但要遵守一般的规范
1.4.1 短参数
段参数是指,只有一个字母的参数,是参数的缩写方式,由一个 - 短杆作为前缀
下图执行了 ls -a 这个短参数命令 ,其作用是显示隐藏的文件或文件夹
ls -l 短参数命令,作用是列出详细的信息
段参数可以加好几个,也可以合并一起用:
1.4.2 长参数
长参数使用两个 -- 作为参数开头,在 ls 命令中,-a 和 --all 的功能完全一致
二、linux 的文件与目录
在 linux 中,一!切!皆!文!件!即使是通过驱动挂载的外设也是文件
linux 的不像 windows 一样有 C盘、D盘等。linux 只有一个根目录 / (斜杠)
linux 中没有比根目录再高一阶的目录了,没有目录包括根目录。
2.1 根目录的结构
执行 ls / 可显示根目录下的结构,在这里有一些是我自行添加的,新装的 ubuntu 系统并没有。
其中有几个重要的文件夹:
bin | 是英语 binary 的缩写,表示二进制文件 |
boot | 和引导启动程序密切相关的文件 |
dev | 外设,他的子目录,每一个对应一个外设 |
etc | 包括系统的配置文件 |
home | 表示 “家”,用户的私人目录,类似于 windows 中我的文档 |
lib | 表示库,包括被调用的库文件,也就是 windows 中的 .dll 文件 |
media | 媒体文件夹,可移动的外设,光盘、U盘等,就可以通过此目录访问 |
mnt | 英语 mount 的缩写,表示挂载,挂载一些外设即可通过此目录访问 |
opt | 目录 应用程序目录,第三方软件或者插件 |
其中所有根目录结构基本如下,home 目录的每一个文件夹即代表一个用户,当前图中表示有两个目录,oscar 和 john。但是 root 用户文件夹则在根目录而不在此文件夹中。
执行 ls /home 查看home目录下结构,可见系统中只有 bearpi 一个用户文件夹
2.2 witch 命令
witch 命令可以查看命令程序所在的目录,执行 which pwd 显示 pwd 命令在 bin 下。
2.3 ls 命令常用参数
-t | 按修改、创建时间正序 |
-a | 显示所有目录,包括隐藏的,以 . 开头的文件是隐藏文件 |
-A | 将不包括 . 和 .. 也就是本目录和上一级目录 |
-l | 列出详细信息 |
-h | 以 Kb、Mb、Gb 列出信息 |
-a 和 -A 区别:
ls -l 命令详解,其中下面这些陌生的东西会在后边讲解
推荐使用 ls -lh 这样文件大小比较直观
2.4 cd 命令 跳转目录
cd (change directory) 切换目录,最常用的命令。
cd ../ 跳转到上一级目录
cd /home 跳转到 /home 目录
2.5 du 命令 查看目录大小
ls -l 命令其实并不会深入统计子目录的文件大小,du 命令会递归统计文件夹所有大小
2.6 touch 命令 创建一个空白文件
touch test 在当前目录创建一个名为 test 的文件,如果执行 touch / test 则是在根目录创建
如果执行 touch test1 test2 则会创建两个文件
touch 命令是触摸这个文件的意思,如果对一个已经存在的文件使用 test 命令,则会更新修改时间,没有则会自动创建
2.7 mkdir 命令 创建一个目录
mkdir 是 make 和 directory 的缩写,表示创建一个文件夹
2.8 cp 命令 拷贝文件与文件夹
2.8.1 拷贝文件
使用 cp test dir1 即可将 test 文件拷贝到 dir1 文件夹中
2.8.2 拷贝目录
只需要在后边加上 -r 参数,意思是为递归的 (recursive),即可递归拷贝过去
比如:cp dir1 dir2 -r 即可将 dir1 拷贝到 dir2 目录下
2.9 mv 命令 移动/重命名文件与文件夹
2.9.1 移动文件或文件夹
使用方法与 cp 命令一样,只是换成了 mv,不再赘述
也可以配合通配符使用:如 mv *.txt dir1 即可将所有的 txt 文件移动到 dir1 下
2.9.2 重命名文件或文件夹
除了移动文件,mv 命令还可以用于重命名文件。
在 linux 系统中,没有单独重命名文件的命令,因为 mv 命令可以移动文件,如果我们把一个文件移动到当前文件夹,并且取一个新名字,不就是等同于重命名了吗?
下图中,我们执行了 mv dir1 dir2 把 dir1 文件夹重命名为 dir2。
2.10 rm 命令 删除文件或目录
rm test 命令即可删除本目录的 test 文件
其中可以添加参数 -r 递归删除;-f 不询问,强制删除;-i 挨个文件提示
来分析一下大名鼎鼎的 rm -rf/*
-r 递归删除,-f 不询问,/* 即代表删除根目录下所有的文件。执行后会删除整个系统
注意,请不要将 windows 的盘挂载到 linux 中还执行这条命令,挂载盘也在根目录下。
2.11 硬链接
硬链接类似于 windows 的快捷方式,在 linux 下有两种链接方式:
- physical link:物理链接或硬链接
- ymbolic link:符号链接或软连接
其中,硬链接只能连接文件,软连接可以连接文件夹。
2.11.1 inode 标识
每个文件的文件内容均被分配到一个标识号码,就是 inode。因此,如果要在 linux 实现类似于快捷方式的东西,只需要将这个 “快捷方式文件”,指向这个唯一的 inode 即可。
2.11.2 ln 命令创建硬连接
ln file1 file2 命令即可为file1 文件创建了 名为 file2 的硬链接
下图中使用了 stat file1/file2 来查看文件的 inode 值,可见在创建硬连接后,这两者值是相同的。
此时,我们删除file1 或者 file2 任意一个文件都不会 inode 指向的这一块数据产生影响,只有当两者都删除,linux 才会将这块数据删除。
三、用户权限和群组
一图说明 root,群组和用户的关系
3.1 sudo 在普通用户下获得 root 权限
sudo 是命令 substitute user do 的缩写,substitute 是代替的意思 u 则是 user 的缩写。合在一起就是替用来执行... 的意思。
普通的用法就是 sudo 后接希望 root 权限执行的命令。下图中 使用 root 权限执行了 date
sudo su 命令可以让当前终端暂时获得 root 权限。在下图中,我在一个中断窗口使用 sudo su 获得root 权限,可见使用后 $ 变成了 #,但是我打开一个新窗口则还是普通权限的 $。
3.2 创建用户
创建用户有两个命令:useradd 和 adduser
- 使用 useradd 时,如果后面不添加任何参数选项,例如:sudo useradd test 创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。
- 使用adduser 则默认添加了这三者,并且要求输入初始密码。
下面我们只演示 adduser 的用法,输入 adduser abc 即可创建一个名为 abc 的用户,在注销后即可用这个账号从新登录。
3.2 passwd 命令 修改密码
passwd abc 即可修改 abc 用户的密码,下面我们用 root 权限来执行试试:
3.3 userdel 命令 删除用户命令
userdel abc 可以删除我们刚刚创建的 abc 用户。不过这种办法并不会删除 home 目录下 abc 的目录。
加入 -r 参数 或者 --remove 可以将 home 目录下也一起删除
3.4 groupadd 命令 添加群组
groupadd group1 命令创建一个名为 group1 的群组
3.5 usermod 命令 修改用户账户
usermod -g group1 abc 将 abc 添加到 group1 组,可见使用 ls -l /home 命令查看 abc 群组,已经是 group1 组了。
使用 usermod -G group1 group2 group3 abc 大写 -G 参数即可将 abc 添加到多个群组。
但是 -G 参数会先删除当前群组再添加,此时可以使用 -G -a 两个参数,a是 append 的意思。
3.6 groupdel 命令 删除群组
使用 groupdel group1 命令即可删除 group1 群组,但是要需要此群组下没有任何用户,如果有先使用 usermod -G 命令将其移动到别的组。
3.7 文件权限的原理
使用 ls -l 命令,左边第一组即说明这个文件的权限。
属性:d 英语 directory 的缩写表示这是一个文件夹。在第二行第一个则是 - 表示这是一个连接,说明这是一个文件或者软/硬连接。
所有组:r 表示读 (read),w 表示写 (write),x 表示可执行 (execute)。rwx 表示当前用户可读可写可执行。如果是 - 则说明没有这个权限。
群组用户:说明了当前群组的对该文件的权限
其他用户:顾名思义,说明了其他用户对该文件的权限
比如第二行 -rw-rw-r-- 表示这是一个文件或者软/硬连接,所有者权限可读可写不可执行,群组权限相同,其他用户只可读。
3.8 修改文件权限 chmod 命令
linux 对每种权限都分配了一个数字。
比如我们要分配读、写、不可执行的权限,那么就将 4+2=6,6即代表这种权限。
由上一章 3.7,linux 共有三组权限:所有组、群组用户组、其他用户组,那么我们用三个数组就可以配置这些权限。
由此可知,最高的权限自然是 777,任何用户可读可写可执行。最低的权限是 000 任何用户都不能对这个文件做什么。
下面来执行一下 chmod 000 file2 可见在执行后文件权限都变成了 ----------