文件系统

对于Linux来说,使用统一的目录树结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/bin        二进制文件,系统常规命令
/boot 系统启动分区,系统启动时读取的文件
/dev 设备文件
/etc 大多数配置文件
/home 普通用户的家目录
/lib 32位函数库
/lib64 64位库
/media 手动临时挂载点
/mnt 手动临时挂载点
/opt 第三方软件安装位置
/proc 进程信息及硬件信息
/root 临时设备的默认挂载点
/sbin 系统管理命令
/srv 数据
/var 数据
/sys 内核相关信息
/tmp 临时文件
/usr 用户相关设定

Linux下没有C:D:这种盘符的概念

在\home目录下存放着用户目录

超级用户root,其用户目录为/root

Linux命令行

命令行含义

1
2
3
4
5
6
示例:root@app00:~# 
root //用户名,root为超级用户
@ //分隔符
app00 //主机名称
~ //当前所在目录,默认用户目录为~,会随着目录切换而变化,例如:(root@app00:/bin# ,当前位置在bin目录下)
# //表示当前用户是超级用户,普通用户为$,例如:("yao@app00:/root$" ,表示使用用户"yao"访问/root文件夹)

命令行的组成

1
示例: 命令 参数名 参数值

基础操作

重启系统

1
2
3
4
(1)立刻关机
shutdown -h now 或者 poweroff
(2)两分钟后关机
shutdown -h 2

关闭系统

1
2
3
4
(1)立刻重启
shutdown -r now 或者 reboot
(2)两分钟后重启
shutdown -r 2

帮助命令

1
ifconfig --help   //查看ifconfig命令的用法

命令说明书(man)

1
man shutdown         //打开命令说明后,可按"q"键退出

切换用户

1
2
Lehrmann Lehrmanncc   //切换为用户"yao",输入后回车需要输入该用户的密码
exit //退出当前用户man shutdown //打开命令说明后,可按"q"键退出

目录操作

切换目录(cd)

1
2
3
4
5
6
7
cd /                 //切换到根目录
cd /bin //切换到根目录下的bin目录
cd ../ //切换到上一级目录 或者使用命令:cd ..
cd ~ //切换到home目录
cd - //切换到上次访问的目录
cd xx(文件夹名) //切换到本目录下的名为xx的文件目录,如果目录不存在报错
cd /xxx/xx/x //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全

查看目录(ls)

1
2
3
4
ls                   //查看当前目录下的所有目录和文件
ls -a //查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
ls /bin //查看指定目录下的所有目录和文件

创建目录(mkdir)

1
2
3
mkdir tools   			//在当前目录下创建一个名为tools的目录
mkdir /bin/tools //在指定目录下创建一个名为tools的目录
mkdir -p /abc/123/test //使用-p参数,可以将路径的层次目录全部创建

删除目录与文件(rm)

1
2
3
4
5
6
rm 文件名              //删除当前目录下的文件
rm -f 文件名 //删除当前目录的的文件(不询问)
rm -r 目录名 //递归删除当前目录下此名的目录
rm -rf 目录名 //递归删除当前目录下此名的目录(不询问)
rm -rf * //将当前目录下的所有目录和文件全部删除
rm -rf /* //将根目录下的所有文件全部删除【慎用!相当于格式化系统】

修改目录(mv)

1
2
3
mv 当前目录名 新目录名        //修改目录名,同样适用与文件操作
mv /usr/tmp/tool /opt //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
mv -r /usr/tmp/tool /opt //递归剪切目录中所有文件和文件夹

拷贝目录(cp)

1
2
cp /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录复制到 /opt目录下面
cp -rf /usr/tmp/tool /opt //递归强制复制目录中所有文件和文件夹

搜索目录(find)

1
find /bin -name 'a*'  		//查找/bin目录下的所有以a开头的文件或者目录

查看当前目录(pwd)

1
pwd                         //显示当前位置路径

文件操作

新增文件(touch)

1
touch example/test.txt    //在example目录下创建test.txt文件

文件权限

文件权限说明

1
文件权限简介:'ower'代表文件的属主ower,'r' 代表可读read(4),'w' 代表可写write(2),'x' 代表执行权限excute(1),括号内代表"8421法"

例如以下用ls-l命令查看example目录下的文件

第一段就是文件的权限,第二段为文件属主,第三段为属主所在用户组,第四段为文件大小,第五段为创建时间,第六段为创建文件名。

文件权限的含义如下

1
2
文件权限信息示例:-rw-rw-r--
-第一位:'-'就代表是文件,'d'代表是目录,'l'代表软连接

1
2
3
-第一组三位:拥有者的权限
-第二组三位:拥有者所在的组,组员的权限
-第三组三位:代表的是其他用户的权限

于是-rw-rw-r—即表示:用户自己可以读写,但不能执行;同用户组的成员也可以读写,但无法执行;其他用户仅能读,但无法写、执行。

修改文件权限

文件的权限仅能由文件的属主或root用户进行修改。

chmod,change file mode 修改文件的访问权限

1
2
3
4
5
6
普通授权    chmod o+w a.txt     // o表示other,w表示增加write的权限
chmod o-w a.txt // 表示other减少write权限
chmod a-w a.txt // a表示all,即所有人都不具有write权限
chmod u-w a.txt // u表示user,即用户自己减少wirte权限
chmod +w a.txt // 省略写法,默认为修改用户与本组的权限
8421法 chmod 777 a.txt //1+2+4=7,"7"说明授予所有权限

使用普通授权,可以发现train1.txt文件其他用户组已经增加了write的权限。

修改文件属主

一般来说,每个用户仅操作自己的用户目录,所以修改文件属主并不常用。

使用chown命令,change owner修改文件的属主

只有文件的owner和root用户才有权限修改文件属主

打包与解压

压缩文件说明

1
2
3
4
.zip、.rar        //windows系统中压缩文件的扩展名
.tar //Linux中打包文件的扩展名
.gz //Linux中压缩文件的扩展名
.tar.gz //Linux中打包并压缩文件的扩展名

打包文件

1
2
3
4
5
tar -cvf 打包压缩后的文件名 要打包的文件
参数说明: c:打包文件; v:显示运行过程; f:指定文件名;
示例:
tar -cvf a.tar file1 file2,... //多个文件打包
tar -zcvf a.tar.gz file1 //文件打包并压缩

解压文件

1
2
3
4
tar -zxvf a.tar                      //解包至当前目录
tar -zxvf a.tar -C /usr------ //‘C’表示切换目录,指定解压的位置
unzip test.zip //解压*.zip文件
unzip -l test.zip //查看*.zip文件的内容

关机与重启

1
2
3
shutdown -h now   //参数h为halt,即立即关机
shutdown -r now //参数r为reboot,即为立即重启
shutdown -h 20:30 //即8点半关机

但如果是远程管理服务器的话,应当注意不能将服务器关机,之能进行重启

软连接

1
2
3
# 使用ln命令来创建软连接
ln -s example example3 // 其中-s表示soft软连接(默认为硬)
# example为原始目录或文件名,example2为软连接名
  1. 删除软连接,对原目录没有任何影响
  2. 删除原目录,则软连接失效

可以发现根目录下有较多的软连接,例如bin、lib等,bin其实指向目录user/bin。

用户操作

添加用户

1
sudo useradd -m test1

其中,sudo(super use)表示以管理员身份运行;-m参数表示在/home目录下添加用户目录。

添加密码

1
sudo passwd test1

删除用户

1
sudo userdel test1

但这个时候虽然已经将test1用户删除了,但在\home目录下仍有\test1用户目录,所以需要将其目录删除

1
sudo rm -rf /home/test1/
  1. 在登陆系统时,Linux默认不能使用root用户进行登陆
  2. 只有特殊的用户才能执行sudo,例如刚才创建的新用户test1就不能使用sudo。而用户lehrmann便可以。在Linux下,把能执行sudo命令的用户叫sudoer。

root用户

首次使用root用户,需要给root用户设置密码(只需要设置一次,需要妥善保管root用户密码)

1
sudo passwd root

切换root用户,使用su(switch user)命令

1
su root

su root仅会切换终端(terminal)用户为root用户,桌面环境并不会切换

退出root用户,

1
exit

可执行脚本

脚本script,一种解释执行的程序

Linux下有常见的三种脚本程序

  1. Shell脚本 *.sh
  2. Perl脚本 *.pl
  3. Python脚本 *.py

脚本程序都是由脚本解释器来运行的

例如:Python脚本解释器:/bin/python3

执行一个脚本时,可以采用以下命令

1
/bin/python3 hello.py

也可以采用以下方式,首先创建python脚本后,在第一行添加python脚本解释器路径

1
#!/bin/python3

但这个时候通过以下命令运行hello.py仍会出错

为什么会出现这种情况呢?提示权限不够,于是我用以下命令查看hello.py

会发现hello.py在用户的权限中仅能读写,不能执行,于是我们给用户增加权限

1
chmod u+x hello.py

现在hello.py便可用过 ./hello.py 成功运行。

环境变量

用户环境变量

用户环境变量,定义在 ~/.profile中,在Linux中,以 . 开头的文件为隐藏文件,可以通过以下命令查看

1
ls -a 

采用gedit可以对.profile文件进行编辑

1
gedit .profile

用户环境变量仅对当前用户有效,若切换用户后,则之前编辑的用户环境变量无效,因为每个用户都有自己的 .profile文件。

系统环境变量

系统环境变量定义在:/etc/profile 中,这里面的环境变量对所有的用户都有效。

修改系统变量需要root用户权限,因为/etc下的东西都是需要超级用户才能进行修改。但官方建议不要直接修改/etc/profile文件,一般建议在/etc/profile.d/ 目录下创建一个自定义脚本。因为在profile中对profile.d目录下的文件进行嵌套调用。

PATH环境变量

在运行python脚本时,若直接输入脚本名称进行运行,我们发现会出现如下情况

为什么会找不到命令呢?这就和PATH环境变量有关系。

PATH是一个最常见的环境变量,用于描述可执行文件的搜索路径。

使用echo命令将PATH环境变量的值显示出来

1
echo $PATH

可以发现PATH环境变量的值就是一堆路径,然后用 :进行分隔开。

默认系统从以下目录搜索可执行程序

1
2
3
4
/usr/bin            //例如tar命令
/usr/sbin //例如useradd命令
/usr/local/bin
/usr/local/sbin
  1. bin表示普通用户就能执行的程序,其中sbin为超级用户root才能执行的程序
  2. /usr/为系统自带的程序
  3. /usr/local/是用户安装的程序

由于在输入hello.py后,系统会从PATH的路径下搜索命令,而搜索完后会发现没有hello.py这个命令,所以会返回未找到命令。

所以我们可以在用户环境变量或系统环境变量里,修改PATH的值,然后注销便可生效。

例如在系统环境变量中

  1. 编辑/etc/profile.d/myprofile.sh,myprofile.sh为自定义的shell脚本

  2. 设定PATH环境变量

    1
    export PATH=$PATH:/opt/tomcat/bin

    为PATH环境变量新增路径 /opt/tomcat/bin。

SSH服务器

使用SSH协议,可以实现:

  1. 远程操控Linux终端(Xshell实现)
  2. 进行文件传输至Linux服务器(Xftp实现)

虚拟机准备工作

首先需要保证ubuntu防火墙处于关闭状态,查看防火墙状态

1
sudo ufw status

接着安装ssh

1
sudo apt-get installl openssh-server

进入查看ssh,若安装成功,则如下所示

接着查看虚拟机的ip地址

1
ifconfig

其中,ens33中inet即为ip地址:192.168.233.128。

最后在本地打开cmd,如过可以ping通虚拟机ip地址,则说明可以连接了

如果没有ping通,则可以看一下ubuntu的防火墙有没有关闭。

Xshell连接

点击【文件】->【新建】打开新建会话属性弹框,输入虚拟机的主机ip

切换选项卡【用户身份验证】。输入用户名,密码

注意用户名可以在命令行中查看

1
who

lehrmann : 0中,lehrmann即为用户名

设置完属性 点击【确定】按钮就不出意外可以连接上了

上图即连接成功后的,至此Xshell即可远程对虚拟机进行操作了。

Xftp传输文件

安装Xftp后,打开Xshell,连接虚拟机后,如图所示

右键点击localhost,如图

点击即可打开Xftp,如图

即可进行文件传输

vim编辑器

vi / vim 是一个基于控制台的文本编辑器,vim为vi的升级版。

gedit是一个基于GUI的文本编辑器

由于以后可能没有图形界面,只有一个控制台终端,故无法使用gedit,之能只用vim

打开文本编辑

1
vim test.txt

如果目标文件存在,则打开编辑器;如果不存才会创建一个文件

如果系统上没有vim编辑器,则可以进行安装

1
sudo apt install vim

切换模式

  • 编辑模式 Insert Mode:按i键
  • 命令模式 Command Mode:按Esc键

退出编辑

  1. 按Esc键,进入命令模式

  2. 输入 :wq 保存并退出

    输入 :q 退出

    输入 :q! 强制退出(放弃保存)

例如

1
vim test.txt

进入以下页面

输入响应的文本后,可按Esc键,接着输入:wq,按回车即可退出

1
cat test.txt

即可得到test.txt的文本内容

进程

每运行一个可执行程序,其相应的在系统中都会有相应的进程

在Linux系统中,可以使用如下命令

1
ps -ef

便可得到如下的进程信息

其中,各字段的含义:

  1. UID:执行者
  2. PID:进程ID
  3. PPID:父进程ID
  4. STIME:启动时间
  5. CMD:启动时调用的命令行

如果要查特定的进程时,可以使用如下命令

1
ps -ef | grep vi

将前者输出的信息,重定向给grep命令进行过滤处理

进程监视

查看所有进程,并且可以动态的刷新显示进程的状态

1
top
  1. 按上下键翻阅
  2. 按 q 或CTRL + C中止退出

可以查看特定进程,

1
top -p NUM

其中NUM为特定进程的PID,所以我们可以先使用 ps 命令查看进程PID。

杀死进程

1
kill -9 NUM

前台进程与后台进程

前台进程:运行在前台

  • 有父进程,父进程为当前终端
  • 当终端关闭时,前台进程被一同关闭

后台进程:运行在后台

  • 父进程为系统进程(1号进程)
  • 当终端关闭时,后台进程不被影响