一.Linux基础
Linux系统的目录结构中,不同的文件夹分属不同的功能,列表如下:目录名功能/根目录,所有的分区和文件的起点/bin普通用户可用的命令所在路径/sbin超级用户(root)可用的命令所在路径/etc各种配置文件所在路径/home所有普通用户的家目录所在路径/lib系统库文件所在路径/boot系统内核镜像文件所在路径/dev设备节点所在路径/usr第三方库和服务默认安装路径/proc系统进程数据在文件系统中的挂载路径/sys系统内核数据在文件系统中的挂载路径/var存放一些“易变”的文件,例如安装包、系统日志等/mnt默认的分区挂载路径。
终端使用小技巧:
(1)直接切换为root用户
gec@ubuntu:~$ sudo -s
(2)打开终端的方法
alt+ctl+t
(3)环境变量
环境变量是能作用于整个系统的特定变量,比如 HOME 确定了当前用户家目录所在路径、PATH 确定了哪些路径下有可执行文件等,许多环境变量是系统本身定义的,有些环境变量是用户或软件定义的,这些环境变量可以通过命令 export 导出到整个系统,在整个系统环境中起作用,这也是它们之所以被称为环境变量的原因。
1)查看系统所有的环境变量
gec@ubuntu:~$ env
2)查看某个环境变量:如果需要查看某个特定的环境变量的值,可以使用命令 echo 来将环境变量的值输出到终端,注意要对环境变量进行引用,方式是在其名称前面加一个美元符号:$,比如 $PATH :
gec@ubuntu:~$ echo $PATH
3) 设置某个环境变量
临时设置(以PATH为例):gec@ubuntu:~$ export PATH=$PATH:/home/gec
永久设置(以PATH为例):
a. 打开终端的配置文件 ~/.bashrc
b. 在其末尾添加如下信息:
gec@ubuntu:~$ export PATH=$PATH:/home/gec
4)执行如下命令来加载修改过的配置文件
gec@ubuntu:~$ source ~/.bashrc
二.文件互通互联
1.共享文件夹
使用共享文件来互通win和ubuntu的文件是最简单的,方法如下:
- 点击虚拟机设置按钮,找到想要共享给虚拟机的文件夹。下图以Downloads文件夹为例,将其设置为Windows与Ubuntu的共享文件夹:
- 打开命令终端,输入 cd /mnt/hgfs 进入共享文件夹,通过命令ls,便可看到
gec@ubuntu:~$ cd /mnt/hgfs/share/
- 在ubuntu20.04虚拟机如果出现无法文件共享时,可以执行下面命令:
sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000
2.samba文件共享
samba是Linux下的一款网络磁盘服务,在ubuntu安装samba,并做好恰当的配置,即可在其他系统中方便地访问ubuntu系统的文件。
安装步骤:
// 安装 samba
gec@ubuntu:~$ sudo apt install samba
//配置 samba
gec@ubuntu:~$ sudo gedit /etc/samba/smb.conf
命令格式:
gec@ubuntu:~$ smbclient -L windows主机IP -U 用户名%密码
3.FTP文件传输
FTP是一种网络协议,在文件传输领域被广泛使用,采用该协议的各种FTP服务端和客户端不胜枚举,例如Linux下的vsftpd服务器,Windows下的FlashFXP客户端。
Ubuntu中的 vsftpd 的含义是 very security FTP daemon(即非常安全的FTP服务器),我们可以在ubuntu中配置vsftpd服务端,然后在windows中使用FTP客户端来达到文件互联互通的目的。
安装过程:
//安装 vsftpd
gec@ubuntu:~$ sudo apt install vsftpd
//配置 vsftpd
gec@ubuntu:~$ sudo gedit /etc/vsftpd.conf
在上述配置文件中,找到 write_enable=YES ,将其前面的井号去掉就可以了
//重启 vsftpd
gec@ubuntu:~$ sudo service vsftpd reload
gec@ubuntu:~$ sudo service vsftpd restart
//查看运行状态
gec@ubuntu:~$ sudo service vsftpd status
//注意到,上述输出信息中有active(running)字样,表示ubuntu中的vsftpd已经在正常运行
//这时就可以启动windows中的ftp客户端去连接FTP服务了
//使用CuteFTP Pro软件即可传送文件
三.命令行编辑与编译
1.编辑器
(1)图形编辑器
平时常见的编辑器都是图形编辑器,比如记事本、notepad、office、wps等,图形编辑器的意思就是这些编辑器带有图形界面,有菜单选项。比如最简单的Windows的记事本:
(2)字符编辑器vi
字符编辑器的意思是这种编辑器没有提供图形界面,因此也不需要用鼠标去点击菜单栏,字符编辑器的所有操作都是只需键盘就能达到的,这种设定可以让人在编程时注意力专注于代码,将程序思维直接流向键盘,行云流水,无需任何多余的菜单、鼠标的干扰,极大提高效率。在字符编辑器中,vi就是其中的典型代表。
vim安装:
//下载安装vim版本的命令是:
gec@ubuntu:~$ sudo apt install vim
//安装完毕之后,还可以在vim的配置文件中设置一些常用的选项:
gec@ubuntu:~$ sudo cat /etc/vim/vimrc
文件 /etc/vim/vimrc 是vim的配置文件
set mouse=a 代表开启鼠标追踪
set cindent 代表开启自动缩进
set number 代表显示行号
vim需要两个操作模式:
- 一个模式下键入的信息,作为文本本身的内容,称之为编辑模式.
- 一个模式下键入的信息,作为执行的动作,称之为命令模式。
这两种模式的转换:
- 默认打开 vi 的时候,进入了命令模式
- 从命令模式,进入编辑模式(编辑文本):按i、a、o、I、O……
- 从编辑模式,进入命令模式(通过命令操作文本):按Esc
vim常用指令:
2.编译器
gcc是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix 及苹果 MacOS 操作系统的标准编译器。
// 查看编译器的版本:
gec@ubuntu:~$ gcc -v
// 将源码 a.c 编译生成程序 a
gec@ubuntu:~$ gcc a.c -o a //-o:指定编译后生成的执行文件
// 编译源码的时候打开所有的警告
gec@ubuntu:~$ gcc a.c -o a -Wall
//./a (./可执行文件)
四.linux 核心命令
1.基本命令
ls :释义:list,列出目录中文件的信息
- 常见用法:
ls ==> 列出当前目录的文件名
ls -l ==> 列出文件详情(文件类型)
ls -a ==> 列出文件名(含隐藏文件 以.开头的文件)
ls -la ==> 列出文件详情(含隐藏文件)
ls /etc ==> 列出指定目录 /etc 的文件名
- linux下文件类型:
- :普通文件(.c .h .bz2 gz...)
d:目录文件(相当window的文件夹),目录是可以cd进去
c:字符设备文件
d:块设备文件
l:链接文件
p:管理文件
s:套接字文件
alias:给一个命令取一个别名
- 常见用法:
alias l='ls -l' ==> 给ls -l取个别名叫l
alias c='clear' ==> 给clear取个别名叫c
unalias -a ==> 当前会话中移动所有命令的别名
在上述设置别名的语句中,等号两边不能有空格
cd:释义:change director,切换当前路径
- 常见用法:
cd /etc ==> 切换到 /etc
cd ==> 切换到家目录(/home/用户名)
cd - ==> 切换到刚刚去过的地方(回到上一步的操作)
cd . ==> 回到当前目录
cd .. ==> 切换到上一级目录
cd ../.. ==> 切换到上上级目录
绝对路径:路径最开始到文件位置
如当前在家目录,需要需要进入Desktop
gec@ubuntu:~$ cd /home/gec/Desktop/
gec@ubuntu:~/Desktop$
相对路径:路径当前到文件位置
gec@ubuntu:~$ cd Desktop/
gec@ubuntu:~/Desktop$
pwd:打印当前所有路径
如果是普通用户
~:家目录 路径:/home/用户名
如果是root用户
~:家目录 路径:/root
clear
- 释义:清屏
date
- 释义:设置或查看日期时间
- 常见用法:
1. date ==> 查看当前日期时间
2. date -s "2020/12/12" ==> 设置日期
3. dpkg
- 释义:手工安装 deb 软件包
- 常见用法:
4. dpkg -i x.deb ==> 安装x.deb软件包
5. echo abcd ==> 输出字符串"abcd"
6. echo $PATH ==> 输出环境变量PATH的值
sort
- 释义:对文件内容按行排序并输出
- 常见用法:
gec@ubuntu:~$ sort file.txt ==> 按默认ASCII码升序排列
gec@ubuntu:~$ sort file.txt -r ==> 按ASCII码降序排列
gec@ubuntu:~$ sort file.txt -n ==> 按数值升序排列
gec@ubuntu:~$ sort file.txt -nr ==> 按数值降序排列
uniq
- 释义:unique,去除文件中重复的相邻的行(输出时去除,文件中是无法进行删除)
- 常见用法:
gec@ubuntu:~$ uniq file.txt
which
- 释义:查看命令所在路径
- 常见用法:
11. 查看默认命令 ls 所在路径
gec@ubuntu:~$ which ls
12. 查看命令 qmake 的所有可能路径
gec@ubuntu:~$ which -a qmake
2.文件管理命令
2.1 cat
- 释义:显示文本文件的内容
- 常见用法:
gec@ubuntu:~$ cat file.txt ==> 显示文本文件内容
gec@ubuntu:~$ cat -n a.c ==> 显示文本文件内容(并显示行号)
gec@ubuntu:~$ cat -A a.c ==> 显示文本文件内容(含不可见字符)
2.2 head/tail
- 释义:查看指定文件的头部/尾部内容
- 常见用法:
gec@ubuntu:~$ head file.txt
gec@ubuntu:~$ head -n file.txt(n查看的行数)
gec@ubuntu:~$ tail file.txt
gec@ubuntu:~$ tail -n file.txt(n查看的行数)
2.3 less/more
- 释义:以分页方式查看长文件
- 常见用法:
gec@ubuntu:~$ less file.txt
gec@ubuntu:~$ more file.txt
2.4 od
- 释义:查看二进制文件(可执行文件)
- 常见用法:
gec@ubuntu:~$ od -x file ==> 以十六进制查看file
gec@ubuntu:~$ od -o file ==> 以八进制查看file
gec@ubuntu:~$ od -d file ==> 以十进制查看file
gec@ubuntu:~$ od -b file ==> 以二进制查看file
2.5 cp
- 释义:copy,复制文件或者复制整个目录
- 常见用法:
gec@ubuntu:~$ cp file1 file2 ==> 将文件file1复制为file2
gec@ubuntu:~$ cp dir1/ dir2/ -r ==> 将目录dir1/复制为dir2/
gec@ubuntu:~$ cp file1 dir2/ ==> 将文件复制到dir2/下
- 注意:
a.如果file2或者dir2已存在,那么它们将会被覆盖
b.目录名称 dir1/ 和 dir2/ 末尾的"/"是可选的,可写可不写,写上去只是为了强调 dir1 和 dir2 是目录,别无他意
2.6 scp
- 释义:security copy,跨网络复制文件或者复制整个目录
- 常见用法:
gec@ubuntu:~$ scp user@x.x.x.x:/home/gec/a.txt .
2.7 touch
- 释义:
a.在文件存在的情况下:将文件最近修改时间更新为当前时间
b.在文件不存在的情况下:创建一个空文件 - 常见用法:
#假设文件a.txt已存在
gec@ubuntu:~$ touch a.txt ==> 更新a.txt的最近修改时间到当前时间
#假设文件b.txt不存在
gec@ubuntu:~$ touch b.txt ==> 创建b.txt
2.8 mkdir/rmdir
- 释义:make/remove directory,创建/删除空目录
- 常见用法:
gec@ubuntu:~$ mkdir a ==> 创建空目录a
gec@ubuntu:~$ mkdir b/c -p ==> 创建嵌套空目录b/c
gec@ubuntu:~$ rmdir a ==> 删除空目录a
- 注意:
如果目录不为空,则不能用rmdir删除,而只能用rm,比如上述的目录b,由于b中有c,因此b不是空目录,此时只能这么删除:
gec@ubuntu:~$ rm -r b
2.9 rm
- 释义:remove,删除文件或目录
- 常见用法:
gec@ubuntu:~$ rm file (删除文件)
gec@ubuntu:~$ rm -r dir/ (删除目录)
2.10 find
- 释义:在指定目录中,按指定条件寻找文件
- 常见用法:
gec@ubuntu:~$ find /usr -name "*.h" ==> 在/usr中查找以.h结尾的文件
gec@ubuntu:~$ find /tmp -type s ==> 在/tmp中查找类型为套接字的文件
2.11 grep
- 释义:在指定文件或目录中,按指定条件寻找字符串
- 常见用法:
//指定文件
gec@ubuntu:~$ grep 'apple' file -rn ==> 在文件file查找字符apple
//指定目录
gec@ubuntu:~$ grep 'apple' /home/gec -rn ==> 在目录/home/gec查找字符apple文件
2.12 diff
- 释义:difference,检测两个文件或目录的差异信息
- 常见用法:
gec@ubuntu:~$ diff file1 file2 ==> 检测文件file1和file2的差异信息
gec@ubuntu:~$ diff dir1/ dir2/ -urN ==> 检测目录dir1/和dir2/的差异信息
2.13 file
- 释义:检测指定文件的格式信息
- 常见用法:
gec@ubuntu:~$ file a.tar.bz2 ==> 检测文件a.tar.bz2的格式
gec@ubuntu:~$ file a.out ==> 检测文件a.out的格式
2.14 mv
- 释义:move,移动文件,或给文件重命名
- 常见用法:
gec@ubuntu:~$ mv file dir/ (将文件移动到目录dir)
gec@ubuntu:~$ mv file1 file2 (将文件file1改为file2)
gec@ubuntu:~$ mv dir1 dir2 (将目录dir1改为dir2)
2.15 wc
- 释义:计算字符数、单词数和行数
- 常见用法:
gec@ubuntu:~$ wc ==> 计算从键盘输入的数据,以ctrl+d结束
gec@ubuntu:~$ wc file.tx
2.16.压缩与解压命令
压缩与解压命令
Linux下最常用的压缩包格式是:- gz - bz2 - zip - xz
其中,gz和bz2格式一般都是通过tar命令来控制的,xz和zip格式各自由它们的同名命令控制。
tar
- 释义:归档、释放与压缩、解压
- 常见用法:
第一,归档与释放:
gec@ubuntu:~$ tar cf a.tar dir/* ==> 将目录dir中的所有文件归档成a.tar*/
gec@ubuntu:~$ tar tf a.tar ==> 查看归档文件a.tar
gec@ubuntu:~$ tar xf a.tar ==> 释放归档文件a.tar
第二,压缩与解压:
gec@ubuntu:~$ tar czf a.tar.gz dir/* ==> 将目录dir中的所有文件归档并压缩为gz格式*/(a.tar.gz自定义的压缩名字)
gec@ubuntu:~$ tar tf a.tar.gz ==> 查看压缩文件a.tar.gz
gec@ubuntu:~$ tar xzf a.tar.gz ==> 解压压缩文件a.tar.gz
gec@ubuntu:~$ tar cjf a.tar.bz2 dir/* ==> 将目录dir中的所有文件归档并压缩为bz2格式*/
gec@ubuntu:~$ tar tf a.tar.bz2 ==> 查看压缩文件a.tar.bz2
gec@ubuntu:~$ tar xjf a.tar.bz2 ==> 解压压缩文件a.tar.bz2
第三,指定路径:
gec@ubuntu:~$ tar -xf a.tar -C /tmp ==> 将文件释放到/tmp
gec@ubuntu:~$ tar -xzf a.tar.gz -C /tmp ==> 将文件解压到/tmp
- 注意:
a.归档只是简单的将文件归拢到一起,不涉及压缩算法,文件不会变小
b.压缩会用到压缩算法,文件总体会变小。
xz
- 释义:压缩与解压
- 常见用法:
gec@ubuntu:~$ xz a.tar ==> 将文件a.tar压缩成a.tar.xz
gec@ubuntu:~$ xz --decompress a.tar.xz ==> 解压a.tar.xz
- 注意:
xz只能压缩单个文件,因此xz一般与tar配合使用,即:先用tar将要压缩的若干文件或目录归档成一个tar包,然后用xz将tar包压缩成xz格式压缩包。
zip
zip不是系统自带的命令,一般需要自己手工安装:
gec@ubuntu:~$ sudo apt install zip
- 释义:压缩与解压
- 常见用法:
gec@ubuntu:~$ zip a.zip file dir/ ==> 将指定的文件和目录压缩成a.zip
gec@ub
2.17.权限命令
chmod
- 释义:修改文件权限
- 常见用法:
gec@ubuntu:~$ chmod 644 file ==> 将文件权限改为644(110 100 100)
gec@ubuntu:~$ chmod 755 dir/ ==> 将目录权限改为755
在Linux中,文件的权限一般用rwx来表示:
- r 代表read,可读
- w 代表write,可写
- x 代表excute,可执行
对于某个文件而言,系统中的所有用户被分成三类,它们是文件的所有者,文件的所属组成员和其他人。这三类用户对这个文件的rwx权限,可以由命令 ls -l 来查看:
gec@ubuntu:~$ ls -l
-rw-rw-r-- 1 gec gec 127 Oct 30 14:41 a.c
-rwxrwxr-x 1 gec gec 8768 Oct 30 14:41 a.out
在上述列子中,rwx三组权限对应了三种用户。当我们需要修改这些权限的时候,为了便于描述,一般用三个八进制数来对应这些权限为,如下表所示:
如此,权限 644 就代表了 rw-r–r–,权限 755 就代表了 rwxr-xr-x。
chown
- 释义:change owner,修改文件的所有者
- 常见用法:
gec@ubuntu:~$ sudo chown jack a.txt ==> 将文件a.txt的所有者修改为jack
chgrp
- 释义:change group,修改文件的所属组
- 常见用法:
gec@ubuntu:~$ sudo chgrp gec a.txt ==> 将文件a.txt的所属组修改为gec
用户管理命令
adduser/deluser
- 释义:添加/删除系统用户
- 常见用法:
gec@ubuntu:~$ sudo adduser jack ==> 添加用户jack
gec@ubuntu:~$ sudo deluser jack ==> 删除用户jack
2.18.进程管理命令
ps
- 释义:process state,获取进程当前状态
- 常见用法:
gec@ubuntu:~$ ps -ef
gec@ubuntu:~$ ps aux
top
- 释义:持续跟踪进程状态
- 常见用法:
gec@ubuntu:~$ top
gec@ubuntu:~$ top -p PID
- 注意:
top可以通过ctrl+左右箭头翻页
kill
- 释义:向指定进程发送信号
- 常见用法:
gec@ubuntu:~$ kill -l ==> 查看系统所支持的所有的信号列表
gec@ubuntu:~$ kill -s SIGXXX PID ==> 向进程PID发送信号SIGXXX
gec@ubuntu:~$ kill -n PID ==> 向进程PID发送第n号信号
2.19.系统管理命令
df
- 释义:查看系统分区信息
- 常见用法:
gec@ubuntu:~$ df -h
文件系统 总大小 已用 剩余 使用率% 挂载点
udev 916M 0 916M 0% /dev
tmpfs 188M 11M 178M 6% /run
/dev/vda1 50G 6.8G 40G 15% /
tmpfs 937M 48K 936M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 937M 0 937M 0% /sys/fs/cgroup
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 188M 0 188M 0% /run/user/500
du
- 释义:查看系统分区信息
- 常见用法:
gec@ubuntu:~$ du
gec@ubuntu:~$ du -sh xxx(查看文件大小)
fdisk
- 释义:查看/设置硬盘分区
- 常见用法:
gec@ubuntu:~$ sudo fdisk -l ==> 查看当前系统已识别的分区。
提醒:
df只能查看已经识别且挂载了的分区,而fdisk可以查看未挂载的分区
实际上,在系统识别出了分区之后,一般需要使用fdisk来查看分区的名称,然后才能使用mount来挂载,然后才能使用df查看到。
mount / umount
- 释义:挂载/卸载分区
- 常见用法:
挂载分区:
gec@ubuntu:~$ mount /dev/sdb /mnt/u ==> 将分区sdb挂载到/mnt/u
卸载分区:
gec@ubuntu:~$ umount /dev/sdb ==> 将分区sdb卸载
gec@ubuntu:~$ umount /mnt/u ==> 将挂载点/mnt/u卸载
2.20.网络命令
hostname
- 释义:查看系统主机名
- 常见用法:
gec@ubuntu:~$ hostname
ubuntu
gec@ubuntu:~$
ifconfig
- 释义:查看/设置系统IP地址
- 常见用法:
查看当前活跃的网络接口
gec@ubuntu:~$ ifconfig
查看所有的网络接口
gec@ubuntu:~$ ifconfig -a
设置指定的网络接口的IP地址
gec@ubuntu:~$ ifconfig ens33 192.168.1.100