ubuntu终端操作与shell命令
目录信息查看命令 ls
- ls -a显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的
目录切换命令 cd
当前路径显示命令 pwd
系统信息查看命令 uname
- uname -a查看全部信息
清除屏幕命令 clear
显示文件命令 cat
临时切换用户身份 sudo
切换用户命令 sudo su [用户名]
文件拷贝命令 cp
创建文件命令 touch
删除文件命令 rm
删除目录命令 rmdir
移动文件命令 mv [文件] [移动位置]
- 重命名文件 mv [原文件名] [重命名后文件名]
显示网络配置信息 ifconfig
重启命令 reboot
系统帮助命令 man
数据同步写入磁盘信息 sync (大型操作系统不会实时把文件写入磁盘,而是先放入缓冲区,隔一段时间再放入磁盘中以延长磁盘使用寿命)
查找文件命令 find:find -name[文件名]
查找内容命令grep:grep -nr [文件名]
文件夹大小查看 du
磁盘空间检擦命令 df
当前系统进程查看命令 ps
进程实时运行状态查看命令 top
文件类型查看命令 file
ubuntu文件系统结构
- /bin 存放二进制可执行文件,这些命令在单用户模式下也能够使用,可以被root和一般账号使用
- /boot ubuntu内核和启动文件
- /dev 设备驱动文件
- /etc 存放一些配置文件,比如用户账号和密码文件
- /home 系统默认的用户文件夹
- /lib 存放内部库
- /media 存放可插拔设备,例如sd卡
- /mnt 用户可使用挂载点
- /opt 可选文件和程序存放目录
- /root root用户目录,也就是系统管理员目录
- /sbin 和/bin类似,也是存放一些二进制可执行文件。sbin下面一般是系统开机过程所需要的命令
- /srv 服务器相关目录
- /sys 记录内核信息
- /tmp 临时目录
- /var 存放一些变化文件,比如日志文件
- /usr 不是user的缩写,存放软件资源
ubuntu下磁盘管理
/dev/sd*文件 此文件为磁盘的设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一目录下才可以访问
/dev/sdb表示u盘 /dev/sdb1表示U盘的第一个分区
磁盘的挂载与卸载
mount
umount
挂载步骤:
- 在/media/zhujiale下创建一个目录 sudo mkdir udisk
- 查看磁盘设备驱动名:ls /dev/sd*
- 挂载:sudo mount /dev/sdb1 /media/zhujiale/udisk(遇到中文乱码问题可以 sudo mount -o iocharset=utf8 /dev/sdb1 /media/zhujiale/udisk)
磁盘分区
fdisk命令:fdisk /dev/sdb 选中磁盘进行操作:可以删除分区或者增加分区
mkfs命令:sudo mkfs mkfs -t vfat /dev/sdb2 :将sdb2分区设置为fat格式
ubuntu下的压缩与解压缩
gzip压缩(压缩为.gz)
- gzip [文件名]//压缩
- gzip -d [文件名]//解压
- gzip -r [文件名]//对文件夹压缩,将文件夹内所有的文件进行压缩
bzip2压缩(压缩为.bz2)
- bzip2 -z [文件名]//压缩
- gzip -d [文件名]//解压
==tar打包工具==
tar工具提供打包服务,就是将多个文件打包
参数:
- -f:使用归档文件
- -c:创建新归档,创建压缩文件
- -x:从归档中解出文件,解压缩
- -j:使用bzip2格式
- -z:使用gzip格式
- -v:打印出命令执行过程
对.tar.bz2格式进行压缩和解压缩
- 压缩:tar -vcjf bzip2test.tar.bz2 bzip2test
- 解压缩:tar -vxjf bzip2test.tar.bz2
对.tar.gz进行压缩和解压缩
- 压缩:tar -vczf bzip2test.tar.gz bzip2test
- 解压缩:tar -vxzf bzip2test.tar.gz
ubuntu用户和用户组
linux用户
- 初次创建用户
- root用户
- 普通用户
初次创建的用户权限比普通用户大但是没有root大,初次创建用户可以创建其他用户
命令创建用户和用户组
添加用户:adduser命令 :adduser [用户名]
查看用户信息:finger:finger [用户名]
删除用户 :deluser [用户名]
添加用户组:addgroup
显示组内用户名:groups
删除用户组:delgroup
文件链接
ln:ln [文件名 ] [链接文件名]
- 创建符号链接 -s
- 默认创建硬链接
硬链接:多个文件同时指向一个inode,只有删除了链接文件以及对应的所有的硬链接文件,文件实体才会被删除,不论修改源文件还是链接文件,另一个文件的数据都会被改变,硬链接不能跨文件系统,硬链接不能连接到目录
软连接(符号链接):类似于windows系统的快捷方式,符号链接也叫做软链接,符号链接相当于创建了一个独立的文件,这个文件会让数据指向他链接的那个文件的文件名,特点:
- 可以链接到目录
- 可以跨文件系统
- 删除源文件后,软连接文件也就打不开了
- 通过->来指示具体的链接文件
- 符号链接要使用绝对路径,否则cp文件的时候会出问题
vim编辑器
vim编辑器打开有三种工作模式
- 一般模式(指令模式):默认模式
- 编辑模式:一般模式下无法编辑文件,要编辑文件就要进入编辑模式,按下i,I,a,A,o,O,s,r等就会进入到编辑模式,按下esc退出编辑模式
- 命令行模式:输入:
- x:保存当前文档退出
- q:退出不保存
- w:保存文档
- q!:不保存退出
其他操作:
- dd删除光标所在行
- u:撤销
- .:重复上一个操作
- yy:复制光标所在行
- nyy复制光标所在向下n行
- p和P,p为为复制到光标下一行,P为复制到光标上一行
make工具和makefile的引入
make工具
当源码文件较多的时候就不适合通过gcc来编译,这时候就需要一个自动化编译的工具
make一般说GNU make是一个软件,用于将源代码文件编译为可执行的二进制文件
- 如果这个工程没有被编译过,那么工程中的所有.c文件都要被编译并且链接成可执行程序
- 如果这个工程已经被编译,工程中有个别c文件被修改了,那么只编译这些修改的c文件即可
- 如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的c文件,并且链接成可执行文件
能够完成这个功能的就是makefile了
makefile基本语法
==makefile语法==
1 | 目标···...: 依赖文件集合······ |
比如下面这个规则
1 | main : main.o input.o calcu.o |
这个规则的目标是main, main.o input.o calcu.o 是生成main依赖文件,如果要更新目标main就必须先更新他所有的依赖文件,如果依赖文件任何一个有更新,那么目标也必须更新
使用方法:就是先编辑好makefile文件,接着在终端输入make即可
1 | main :main.o input.o calcu.o |
- 马克命令会在当前目录下查找以Makefile命名的文件
- 当找到Makefile文件以后就会按照Makefile中定义的规则去编译生成最终的目标文件
- 当发现目标文件不存在,或者目标所依赖的文件比目标文件新的话就会更新目标文件
Makefile变量
在上面的例子中,main.o input.o calcu.o三个依赖文件输入了两遍,如果是复杂的Makefile中容易出错且浪费时间,所以应用变量==Makefile变量只有字符串一种类型==
1 | #Makefile变量使用 |
使用=在给变量赋值时,不一定要用已经定义好的值,也可以用后面定义的值,例:
1 | name =zjl |
使用:=不会使用后面定义的变量,例:
1 | name =zjl |
使用?=,如果变量curname前面没有被赋值,那么此变量就是zhujiale,如果前面已经被赋值,就用前面变量的值,例:
1 | name =zjl |
使用+=就是给变量加内容
makefile模式规则
模式规则中,在目标的定义中使用%,表示对文件名的匹配,%表示任意长度的非空字符串,例如%.c表示所有以.c结尾的文件,a.%.c表示所有以a.开头.c结束的文件,所以例子:
1 | main :main.o input.o calcu.o |
可以修改成
1 | objects=main.o input.o calcu.o |
自动化变量:具体参考网上资料
伪目标
一般的目标名都是要生成的文件,而伪目标不代表真正的目标名,使用伪目标的目的是只使用目标下的规则而不创建文件,例如:
1 | clean: |
如果文件夹内已经创建过名为clean的文件那么就执行不了clean命令,所以需要把clear申明为伪目标即:
1 | .PHONY:clean |
shell脚本
shell脚本就是将很多条命令放到一个脚本文件里面然后执行该脚本就会以此执行命令
==写法==
第一行一定要为:
1 | !/bin/bash |
交互式shell脚本
read命令用来输入
1 | echo"please input your name" |
shell脚本数值计算
shell仅支持整型,数值计算,使用$((表达式))
test命令
用于查看文件是否存在,权限等信息,可以进行数值,字符,文件三方面的测试
&&和||命令
cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行
cmd1||cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行
[]也可以做判断符
默认变量
$0-$n包括脚本的参数,包括shell脚本本身,shell脚本本身的命令为$0
$@:表示$1 $2 $3
shell脚本条件判断,函数,循环
虽然可以通过&&和||实现简单的条件判断,但是稍微复杂一点的场景就不适合了,所以shell脚本提供了if then判断语句:写法:
1 | if [条件判断];then |
shell脚本函数
写法:
1 | function fname(){ |
shell循环
写法:
1 | while [条件] //当条件不成立结束循环 |
categories: - Linux