Linux命令
linux中一切皆文件
两大特殊文件:
根目录:/
家目录: ~
快捷键
放大终端:Ctrl shift +
缩小终端:Ctrl -
清屏: Ctrl L
用户名: whoami
主机名: hostname
:$中间(~):当前路径
默认在家目录 pwd
pwd:查看当前路径
新建
文件夹: mkdir 文件夹名字
文件: touch 文件名.后缀
多层嵌套:文件夹
mkdir -p 文件夹名字/名字/名字 mkdir -p a/b/c
同一路径下:
文件夹:不能创建同名文件夹,会报错
文件:更新时间戳
查看
ls 查看当前路径下所有内容
ls -a 查看当前路径下所有内容,包括隐藏内容
ls -l 查看当前路径下所有内容de详细信息
文件类型:7种 bcd-lsp
b:块设备文件 /dev
c:字符设备文件 /dev/input
d:目录文件 文件夹
-:普通文件 .c .h .txt
l:软链接文件 <linuxC高级>
s:套接字文件 <网络编程>
p:管道文件 <IO>
文件权限
rwx: r:读 w:写 x:执行
rwx rwx rwx
自己 组内 其他
r:4 w:2 x:1 -:0
路径cd
下一级:cd 文件夹名字
上一级:cd ..
当前: cd .
上一次:cd -
根目录:cd /
家目录:cd ~ 或 cd 或 cd /home/hq
绝对路径:从根目录开始 /home/hq/24081/1
相对路径:以当前位置为参照物
复制cp
文件 cp 要复制的文件名 目标地址(文件夹)
文件夹 cp -r 要复制的文件夹名 目标地址(文件夹)
另存为 cp 要复制的文件名 目标地址/新名字
移动mv
mv 要移动的文件/文件夹 目标地址
重命名: mv 要移动的文件/文件夹 目标地址/新名字
删除rm
删除后,文件不可恢复
文件: rm 文件名
文件夹: rm -r 文件夹
-f 强制
打开终端
1. 直接点击
2. Ctrl shift n 当前文件夹
3. Ctrl alt t 家目录
关闭终端
1. 直接点击
2. Ctrl d (快捷方式)
3. exit (命令)
vi编辑器
打开:vi 1.c 初始默认在命令行模式
vi编辑器3种模式:
命令行模式:复制、粘贴、撤销、光标移动
插入模式:编写代码
底行模式:保存、退出、复制、分屏、查找、替换
简单编程步骤:
1. 创建文件 touch file.c
2. 打开vi编辑器 vi file.c 默认在命令行模式,需要切换到插入模式
3. 编写代码
4. 进入底行模式 w保存
5. 运行程序: gcc file1.c 编译c文件,生成可执行文件
6. 运行: ./a.out
命令行:
复制 yy nyy(光标选中y n:行数 复制几行)
删除(剪切) dd ndd
粘贴 p
撤销 u
反撤 ctrl r
光标移动首行 gg
光标移动最后一行首行 G
光标移动行首 0
光标移动行尾 $
插入模式 i o a I O A
底行模式:
指定行复制 5,10y 复制5-10行
指定行删除 5,10d
保存 w
退出 q
保存并退出 wq
强制 !
vsp 分屏本文件
vsp 文件名 分屏打开另外一个文件
查找 /找的东西
替换 s/a1/a2 光标所在行的第一个a1替换成a2
s/a1/a2/g 光标所在行的所有a1替换成a2
%s/a1/a2/g 改变全文
1,$s/a1/a2/g 改变全文
设置行号 set nu
取消 set nonu
取消高亮 nohl
vscode编辑器
建议打开整个文件夹
code 文件夹名字
gcc编译器
高级语言(C语言)---机器识别不了,借助编译器
简写:
gcc file2.c 生成可执行文件名a.out
./a.out
另一种简写:
gcc file2.c -o file2(可执行文件名,可自己命名)
./file2
完整编译步骤:
预处理、编译、汇编、链接
1. 预处理
展开头文件、删除注释,替换宏定义
gcc -E hello.c -o hello.i
2. 编译
检查语法错误,有错报错,没错会转变成汇编语言,生成汇编文件
gcc -S hello.i -o hello.s
3. 汇编
把汇编文件生成不可执行的二进制文件
gcc -c hello.s -o hello.o
4. 链接
链接库文件,最终生成机器能够识别的二进制的可执行文件
gcc hello.o -o hello(可执行文件,可以自己取名)
C基础
计算机存储单位:位 0 1
1字节byte=8位bit
换算:
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
计算机数据类型
二进制 0 1 10 (1/0组合排列)
八进制 0-7 010(在最前方加0)
十进制 0-9
十六进制 0-9 a-f 0X10 (在最前面加0x)
a | b | c | d | e | f |
10 | 11 | 12 | 13 | 14 | 15 |
进制转换
十进制转二进制:
短除法:除以二取余,余数自下而上排列 12:1100
拆分法:8421
二进制转八进制:
三个二进制数转换为一个八进制数
二进制转十六进制:
四个二进制数转换为一个十六进制数
非数值型数据
字符型 用 ' ' 包裹
man man :查看man手册
man手册:用来查看一些命令、函数的用法
1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
man ascii 查看ASCII码表
'\0' 0 字符串结束标志
'\n' 10 换行
空格 32
'0' 48 字符0
'A' 65
'a' 97
字符转数字 '2'-48==2
'A' +32 = 'a'
'A' +' ' = 'a'
词法符号
关键字:32
存储类型:auto static extern register
数据类型:int short long c har float double signed unsigned
分支:if else switch case default
循环:for do while go to break continue
构造数据类型:struct enum union
其他:void const sizeof typedef return volatile
虚拟内存空间:
32位:4G
64位:2^64 2^48
栈区:系统自动开辟、回收 (函数体内部定义的变量)
堆区:程序员手动开辟(malloc)、回收(free)
全局区、静态区:
常量区:char *p="hello"
标识符
定义变量名、数组名、函数名时,遵循标识符命名规则:
1. 由字母、数字、下划线(_)组成
2. 开头不能是数字
3. 不能和关键字重名
4. 见名知意
运算符
算术运算符 逻辑运算符 关系运算符 位运算符 三目运算符 赋值运算符
算术运算符
+ - * / % ++ --
/:如果是整数相除,结果向下取整
int a=5/2;
printf("%d\n",a); //2 %d整型 int
float a=5/2;
printf("%f\n",a); //2.000000 %f浮点型 float 默认打印小数点后六位
float a=5.0/2;
printf("%f\n",a); //2.500000
printf("%.1f\n",a); //2.5 .1保留一位小数
float a=(float)5/2; // int 5短暂的强制转换成float float 5只在当前这一行
printf("%.1f\n",a); //2.5
%取余
只能用于整数运算
5%2==1
++
a++ <==> a=a+1
独立成句:
int a=5;
1) ++a;
printf("%d\n",a); //6
2) a++;
printf("%d\n",a); //6
赋值运算:
int a=5;
1)int b= a++; // = +
printf("%d %d\n",a,b);//6 5
2)int b= ++a; // + =
printf("%d %d\n",a,b);//6 6
打印语句
int a=5;
1)printf("%d\n",a++); //5
printf("%d\n",a); //6
2)printf("%d\n",++a); //6
printf("%d\n",a); //6