目录
nano编辑器使用(终端 -- nano MyName。txt Ctrl g 帮助)
1.打开终端
ctrl+Alt+T 或者 点击终端图标,打开终端 。
$ 普通用户 #根用户
。sudo su root 切换root权限
切换成#, Tab键自动补全功能,例如vim T Tab会自动补全文件名。
2.关机:
3.常用终端命令:
1.文件操作命令
跳转:
CD /xxx/xxx 跳转到某个 绝对路径
CD 跳转到用户的目录下
CD ./xxx/xxx 跳转到当前文件下的某个路径
CD ../xxx/xxx 跳转到上一个路径的某个路径
查看
pwd 查看当前目录
ls 路径(和cd 后面的目录选项一个意思,后面不再重复。)
ls -a 查看当前目录下所有
ls -l 列表查看当前目录下所有
对应的分别是 文件类型 拥有者, 用户组, 其他人权限 文件数 拥有者 用户组 大小 建立日期 文件名
文件类型:
权限: r 可读 。 w 可写。 x 可执行 - 没有该权限 。
ls -d -h -i。
删除
rmdir 路径 删除空文件夹 (用处不大,只能删除空文件夹)
rm -f (不会询问)文件 删除文件
rm -r 递归删除当前目录下的某个目录和里面的所有东西
rm -rf * 将当前目录下的所有文件1和文件夹删除
rm -rm /* 删库跑路
创建 / 修改
mkdir 路径和文件夹名 创建文件夹
创建文件有很多种方法,touch 文件名 vim 文件名(还会打开,可编辑。只打开是cat 文件名)
复制剪切(重命名)
mv 当前目录 新目录 (2个目录一样就是重命名) 剪切
cp -r (只拷贝文件时不用写r,r是为了在文件夹下递归里面可能有的文件夹的命令) 目录名称 目录拷贝的目标位置
查找
find 目录 参数 文件名称 参数是搜索的属性,例如 -name 是搜索文件名 文件名可以使用通配符扩大搜索
示例:find /usr/tmp -name 'a*' 查找/usr/tmp目录下的所有以a开头的目录或文件
2.系统显示命令:
3.时间日期显示命令:
4.命令别名与历史命令:
5.系统操作命令:
6.其他常用命令:
7.联机帮助命令:
linux常用命令
4.快捷键
5.安装软件:
ubuntu装软件apt, ubuntu使用yum会有很大的坑。不建议使用。使用apt安装
安装程序 sudo apt install xxx。或者sudo apt-get install xxx 例如:gcc的安装 sudo apt install gcc
查看是否有g++ g++ -v。
原因如下:https://www.cnblogs.com/shanhm1991/p/9903694.html
带界面的软件要去linux的商场下载 比如 qt
6.编辑器的使用:
gedit
使用(直接点击打开),
nano编辑器使用(终端 -- nano MyName。txt Ctrl g 帮助)
vim/vi
安装 vim (vi自带)
sudo apt install vim
一般模式yy nyy复制,p粘贴。dd,ndd 剪切 ,p粘贴 (一般模式) n的意思是当前行之后的n行全选
cc ncc删除行 x删除字符,这些可以用delete代替 。(一般模式)
u撤销一次。“.”重复上次操作。(一般模式)
vim的保存退出 :w保存 :x保存并退出 :w 文件名 第一次保存要文件名 :q :q!退出 ZZ(大写)保存退出。ctrl+v 块选择, v 字符选择 选择好后y复制,p粘贴。(一般模式)
ctrl+w 上下键窗口移动 。(编辑模式)
:sp 文件名 打开一个新的文件 :r 打开另一个文件(vi)
w(后移),b(前移) 单词移动。(一般模式)
ctrl+w+j/k上下切换。
rR是替换。/字符 查找 n下一个。
7. shell(bash)
变量:
字符串:
定义: string=“helloworld”;
使用 : $string 或者 ${string} ,如果你要隔离开来的话
readonly 设为只读 (readonly string) unset 删除(unset string不能删除只读)
输出字符串长度: echo ${#string},输出数组长度也一样的,使用${#xxx}的格式。
截取字符串: 格式为 ${xxx:开始下标:截取数量}
例1:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo 提取子字符串
上述输出为:从第一个字符之后开始截取4个字符
例2:
echo `expr index "$string" io` # 输出 4 查找子串(注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。实在分不清的可以用$()替换反引号 echo $(expr index "$string" io))
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
数组
定义 array_name=(1 2 3 4 5),输出echo ${array_name[0]},echo ${array_name[@]}(@是全部的意思,输出全部)。 赋值
value=${array_name[0]} ,数组长度echo ${#array_name[@]}(和字符串一样使用#)
执行脚本:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
带参数时使用$0,$1,$2,$3等传递参数,注意,$0是脚本名字,参数从1开始。
脚本可以再vim编辑保存,例如:*
echo "$0"; echo "$1"; echo "$2";这个脚本会输出2个参数。参数传递为./test.sh 1 2
linux处理参数的几个符号
脚本:
输出:
$*与$@的区别:
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
字符串:
数组:
运算及参数的传递:
流程控制:
if分支:
前面有说过if,由此可知shell和C语言插件还是很大的
现在学习剩下的几个流程控制
嵌套if:(注意:用不到else时不要写他)
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
在文件中打开文件:
cd都不用了,返回上一层后直接进入。
case分支
case语句为多选择语句(swich。。。case)(关于read,前面有说,是键盘的输入)
跳出循环使用break,跳过这轮循环使用continue。
for循环:
where循环:
while循环:
死循环:
until循环:
until循环:条件为真时停止循环,多数时while的循环有效率
输出:
echo:
echo和printf:
注意:echo 要换行输出的时候要输入-e命令,printf不用,printf相对来说感觉好用些。
echo 输出从定向(把原来输出再屏幕里面的内容输出到文件上);输入重定向(把原本要从键盘输入的内容从文件输入)
例子:
printf对比echo来说功能更多,比如能对齐,决定是否换行,有%s %c %d %f等格式替代符等(我感觉就对齐有用点);
脚本的键盘输入
printf:
符号:
运算符:
bash shell原生是不支持数学运算的(默认的数值类型是字符串,不会进行运算),不过其他命令代替,例如 val=`expr 2 + 2`(这两个点不是单引号,是反引号``).
注意:运算符和变量要有空格
如果觉得麻烦的,可以使用另一种方方法
把运算的数据中括号或者2个小括号括起来+$就行了。(这种方法比较常用) 在逻辑与或上u二十这种方法,双小括号或者双中括号
关系运算符:
这里要加上``反引号注意
if脚本:
注意:if后面每一个变量,括号全都要空格。 then fi 是关键字不能删除。
与或非的写法:
shell的&&和ll被用来用作语句的执行判断了(语义没变)
所以在if,for等句子中的判断改了个写法(当然,你要用&& 和ll也行,但是要多加个[ ] 表示里面是个独立语句)
脚本
结果:(没写2个括号时会出现前面出现的结果,missing ‘】’)
例子:
脚本
输出
(这里a < b 第一个条件为假,所以进入else)
前面的关系运算符是对数字的,而字符串的比较是另一套方法
脚本
结果:
文件测试运算符:
函数:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !" //第10个是和之后都是要{}
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
函数还有个问题,返回值的使用。
--------------------------------------------------------------------------------------------------------------------------------
8.使用gcc/g++编译 hello world。
安装gcc sudo apt-get gcc(界面的程序去商店下载)
使用gcc 命令格式 gcc (参数)文件名 (-o 另外起的文件名)。
执行后如果没有 -o 另外起的文件名 ,回默认生成a.out文件,再执行就行了./a.out (out是可执行文件的标志),如果要执行多个文件(比如一个.h一个.c文件)gcc testHello.h testHello.c -o max.out
gcc -E testHello.c -o testHello.i 生成预处理之后的文件 .i 文件。
注意:gcc的隐式声明与gcc要不要写头文件。
gcc后面的文件和目标文件是不用写头文件的,或者说头文件会自己依赖加进去,上面的gcc testHello.h testHello.c -o max.out写法,testHello.h是多余的gcc testHello.c -o max.out这样就行了。还有,如果你没有.c文件没有写头文件声明就去调用其他文件的函数或者变量的话,在gcc是允许的,gcc会隐式声明,就是说如果你没有写头文件或者声明的话,他会帮你声明一个,例如一个double fun()的函数,你没有使用任何方法声明他,那gcc就会隐式声明一个int fun()的函数,不管你原来返回值是什么,他都会声明一个默认值是int的同名函数,所以,如果你正好是返回int的话就可以过,不然在链接那个阶段会报错(声明和定义不一致),这就是gcc的隐式声明。任何时候都应该避开因是声明。(这个问题折磨我好久)
这里简单重温一下源码变为可执行文件的步骤(linux):
预处理/预编译
把#include头文件,#define, #ifdef 等替换为对应的实现(生成 .i 文件)
编译
检查源文件中的语法是否有错误 (生成 .s 文件)
汇编
翻译成机械语言(生成 .o 文件)
链接
链接lib库和各个.o(obj)文件,生成可执行文件 .out 文件。
注意:.c是C语言文件 .cc是c++文件 .i预处理过的文件 .s编译后的文件 .o汇编完未连接的文件 .out可执行文件
调试
当你想要调试时,就要用到gdb调试器。使用它是在.c文件前加上 -g 命令。例如:gcc -g testHello.h testHello.c -o max4,(这个文件应该要是有main函数的文件)之后再执行gdb max4就可以出现调试的窗口。这时你就可以写命令了。
往下调试第一次要使用 list 1,之后使用list就可以了,执行文件是 r (会从第一行开始)。设置断点命令是b +行号,再r或者单步运行的s。(使用r)到达断点后会停止,想要到下一个断点或者执行剩下的,就要使用c命令。退出使用q命令。(插看变量可以使用p+变量名)
makefile
当项目多于3个文件时,就要考虑使用makefile了,makefile是使用来简化程序员工作量的文件。一般来说,单纯使用gcc,一个项目几百上千的目标文件,有一个要改的话就全部要编译,要你全部一个一个的gcc -c。。。。这样是不行的,makefile就出来了,你吧依赖关系全部都写进去后,再编译出来全部的。o文件,以后哪个文件要修改就编译那个文件,之后再make就自动帮你做完了。make命令是在本目录下搜索makefile文件,没有就搜索mian等等。make -f 文件名 可以指定文件名。
makefile写法:
这是一个main文件,里面调用了testHello.c文件里的一个函数,testHello.h是声明此函数de3个文件的简单makefile。
加注释的是一种写法,另一个是简洁的写法%.o是全部汇编文件,%.c是全部的源文件。(上面是全部文件都在同一个目录的写法,不同的目录好像还有其他的东西,具体的目前就不深入了,用到再说。)
具体写法参考https://www.cnblogs.com/tp-16b/p/8955462.html。
9.linux网络基础:
基本配置文件: 是用来开机时配置网络信息的(ip,掩码,网络地址等等。)
(cat,打开文件,只能查看,vim可以编辑)、cat /etc/network/interfaces
主机映射表hosts文件:用来存放ip与主机名的映射关系的表
位置:
/etc/hostname文件 计算机名称
/etc/resove.conf 文件 指定dns服务器的文件(常用)
etc/services文件 端口映射文件,可以查看什么服务占用了那个端口(常用)
几个常用的网络命令:
ping(windows也用) + -c 4(windows4组,linux无限,要手动设置) 其他的没什么用就不学了。
ifconfig 使用编辑时需要 sudo(windows是ipconfig) + -h(帮助) -a(显示全部) 接口 -up/down(开启关闭某个接口)
域名解析 :
网络监控,netstat,一般用来查看端口的链接情况。
netstat -r(显示路由表内容) -a(显示所有活动的tcp/udp端口)-v(显示详细信息) -e(显示网络统计信息,如发送接收的字节。常和-s连用) -s(按照歇息显示统计信息)
10.文件压缩与解压:
gzip 文件 (压缩)
gzip -d 文件 (解压。)
gzip -v 文件 (压缩并显示压缩的百分比)。
当要压缩好几个文件时,要先tar打包。
tar + 打包的文件或目录名 -c 创建新的文件目录(旧的没有删除) gzip + .tar文件
当然,界面可以更方便的压缩和解压。
11.备份 dump, 还原 restore
12.挂载设备:
linux上的设别不同于windoes,会自动帮你挂在,想要挂载运行它就必须自己手动挂载。
比如要挂载一个U盘,首先确定它能链接在U盘上, 就是输入命令 sudo fdisk -l (fdisk是磁盘分区的命令,这里是查看电脑上有什么设备。)查询有没有U盘的信息,(最好看内存,大小一样就是了,没有的话就是没有了)。确认有之后使用命令 mount 挂载设备名(例如sdb) dev/mnt/usb (不一定是这个目录,只要是个空的文件夹就行,不过建议放在这里,一般的挂载都放在这里,方便管理)
卸载: umount -a(卸载所有有记录的文件系统) 目录,一般是 umount 挂载目录。
有可能提示
错误,可能是界面加载了它(界面有显示有他)可以fuser查找它kill(kill 进程的 pid )掉,再加载。