Linux——基础概念和命令
-
Linux文件存储结构:
/ :(根目录)根目录下的存储结构
/bin :命令对应的可执行文件
/home:(普通用户的家目录)-> username(多个用户)
/boot: 系统开机使用的一些镜像文件
/etc:配置目录,操作系统的设置
/dev :外部设备
/innt :临时挂载点
/lib :系统中的库文件
/root:root用户的家目录
/usr:系统的一些资源文档
二:文件的操作命令:
1:Linux底下的文件类型
①普通文件: -
②目录文件: d 相当于一个包
③管道文件: p 通讯使用,不存储东西,相当于通道
④设备文件: c字符设备 b块设备 c套接字
⑤链接文件: l
显示该信息的命令:ls-l
显示的内容:文件类型(一个字符)+文件权限+连接数+属主+组+size+最后文件修改时间+文件名
-
文件的简单操作命令:
①创建:
普通文件:touch + 文件名 + 后缀(改后缀加上便于用户自己区分)
目录文件:mkdir + 目录名
②删除
普通文件:rm +filename
目录文件:rmdir + 目录名(空)
rm-r +目录名(非空)
③剪切
mv + 源文件 + 目的路径
④重命名
mv + 源文件 +源文件路径/newname
⑤拷贝
普通文件:cp + 源文件名 +目的路径
目录文件:cp-r + 源文件 + 目的路径(-r有递归的作用,该文件夹下的所有东西都拷贝了)
⑥查看文件夹下的内容
普通文件:cat +文件名
⑦编辑普通文件
vi/vim +文件名
2.文件的复杂操作命令:
A:查看文件命令:
- more + 文件名(一部分一部分的看)
- less + 文件名(只能查看,q退出)
- Head -n + 文件名(看前n行)
- Tail -n +文件名(看后n行)
- cat + 文件名 (全显示)
输出重定位: cat 源文件 > 另一个文件(可以原先不存在)
文件的合并: cat main.c a.text>b.text(内容合并)
B:修改文件属性:(root底下的操作)文件权限 + 属主 + 组
- ①权限:chamod②属主 chowm ③组 :chgrp
- r:可读 w:可写 x普通文件:可执行
目录文件:可进入
①:修改文件权限命令:chmod
文件权限:Linux系统上每一个文件都有其权限,是文件针对不同用户提供的不同的访问方法
Linux上的用户分类:创建文件用户: 属主u 组用户g 其他用户o
文件权限值的含义 rwx rwx rwx
u g o
第一种方式:字符方式
chmod u / g / o + - = r/w/x/rw/rx/wx/rwx filename
该种方法连续使用时:注意中间必须添加逗号。
chmod u=rw,g=r,o-rwx filename
第二种方式:数字修改法
chmod 640 filename
rwx -》421 每个类用户的权限三个相加
②:修改属主和组
chown newuser filename
chgrp newgrp filename
C:文件搜索:find
Find path option
-name 当前路径下按名字查找
-perm 权限
-user 属主
-group 组
-ctime +n/-n创建时间
-mtime +n/-n 最后修改时间
D:文件的压缩和解压:
①压缩:
- 打包:tar cf mytar.tar filelist (生成了mytar.tar)
- 压缩:gzip mytar.tar (生成了mytar.tar.gz)
②解压:
- 解压:gzip -d mytar.tar.gz (生成了mytar.tar)
- 解包:tar xf mytar.tar
GUN版本后
①压缩:tar zcf mytar.tgz filelist (生成了mytar.tgz)
②解压:tar zxf mytar.tgz
F:文件链接操作
软链接:(类似于快捷方式)
ln -s 源文件 链接文件 (源文件可以给出路径)
特点:①可以链接的对象包括普通文件和目录文件
②符号链接文件所使用的inode节点与源文件不同,inode节点中仅仅记录给定源文件的符号,所以源文件删除,链接文件失效。
硬链接:相当于给源文件创建一个别名。
ln 源文件名 链接文件名
特点:①只能对普通文件创建硬链接
②每对一个文件创建一个硬链接,其inode节点中的连接数就会加1
③源文件删除,链接文件仍有效
三:vi/vim编辑器的使用与配置
vim下的三种模式:命令模式,插入模式,末行模式。
a:在当前光标位置的右面添加文本
i:在当前光标位置的左面添加文本
o:在当前行的下面新建一行
O:在当前行的上面新建一行
-
末行模式下的操作:
- :w 保存文件
- :w + filename //保存文档到filename中
- :q //推出编辑器,没做修改
- :q! //退出编辑器,不保存
- :wq //退出并保存.
2.命令模式下的操作模式
A:光标的移动:
- shift + g 将光标直接移动到最后一行
- Shift + 4 将光标移动到当前行末尾
- Shift + 6 将光标移动到当前行行头
- Shift + m 将光标移动到当该页的中间行
- Shift + l / + h 该页的最后一行,第一行
B:翻页: ctrl + f / + b f向上b向下
C:批处理命令:
①拷贝命令: yy(拷贝一行,光标所在行)
num + yy(光标后的num行)
②粘贴: p
③删除:dd(删除一行) num + dd(删除光标下的num行)
cc(删除光标行,可重写) C (删除该行光标后的内容)
④撤销:u
⑤设置/取消行号:set nu / nonu
D:全文替换命令:
- :1,$/旧串/新串
- :1,$/旧串/新串/g
E:搜索命令:
- /字符 (光标的下一个字符)
- ?字符(光标的上一个字符)
四:GDB调试
-
调试命令:(适用于debug版本)
①进入gdb: gdb+filename
②添加断点:b + linenum/+filename:linenum
③删除断点:d
④启动运行:r
⑤执行下一步:n
⑥执行到下一个断点处:c
⑦进入函数体内执行:s
⑧推出函数:finish
⑨退出调试:q
⑩显示: p + 变量名
①每次结果都会显示:display + 变量名
②取消该显示:undisplay + 变量名
③查看断点信息:info
④查看内存:x /nfu adress
n:显示数据的个数
F:显示进制数 x d o t c f---16 10 8 2 字符 浮点
u:以几字节显示:b h w g-- 1 2 4 8
⑤显示函数调用栈:bt
⑥查看变量类型:ptype + 变量名
2.如何在gdb中用指向一维数组的指针来表示数组中的各元素
p a
$1 = {1,2,3,4,5,6,7,8,9,10}
p ptr
$ 2 =(int*)0xbffff2b4
p &ptr 和 p pptr 都为0xbffff2b0
问:怎么用指向一维数组的指针来表示数组的全部元素?
p *[email protected] //表示全部
p ptr[4]//第五个元素
五:库文件的创建和使用
A:静态库:
- 概念:相当于中间文件.o(功能代码)的集合,静态库是在链接时使用的,将静态库中的程序直接合成到最终的可执行文件中。Windows .lib Linux .a文件
- 特点:
①:中间文件.o(功能代码)的集合,链接时使用。
②:静态库中的程序直接链接到可执行文件中。
③:静态库存于磁盘,当某个程序需要的时间,需要拷贝一份,然后合成到程序中,在一起加载到内存上运行。这样当多个程序调用时,会导致磁盘空间的浪费。
1.静态库的生成:
①*.c将所有的源文件编译生成中间文件*.o
②ar crv libxxx.a *.o //libxxx.a 中xxx为库名
2.静态库的使用:
gcc -o main main.c -L(+路径) -l(库名)
例如:
gcc -o main mian.c -L./lib -lmymath
因为静态库是在链接时使用,所以当我们在运行时,将静态库删除时,程序依然可以执行
B:动态库(共享库):
1.概念:功能代码编译链接生成的不可执行的可执行文件(其中没有main函数)
Windows .dll Linux .so
2.特点:
①使用动态库的程序运行起来后,动态的将动态库加载到内存的执行。
②只需要在内存中加载一份,随后的程序在内存中运行时,不需要对此动态库重新加载到内存上。
③运行库需要单独加载到内存上执行。
3.动态库的生成:
方式一:gcc -fPIC -c add.c
gcc -fPIC -c sub,c
gcc -shared -o libxxx.so *.o
方式二:gcc -fPIC -shared -o libxxx,so *.c
4.动态库的使用:
gcc -o run main.c -L(+路径) -l(+库名) //和静态库相似
使用动态库的程序在运行时,需要单独加载搜索加载动态库文件,所以我们要高速操作系统搜索路径,或者将库拷贝到操作系统默认的搜索路径下。
①:root用户:将动态库拷贝到 /lib 或者 /usr/lib任意路径下
②:设置环境变量(仅对本终端有效)
Export LD_LIBRARY_PATH=绝对路径
例如:
Export LD_LIBRARY_PATH= $LD_LIBRARY_PATH’:/home/wangbao/lib’
③修改配置文件:
/etc/profile(系统启动时) 或者 /etc/bashrc(终端启动时)
~/.bashrc (家目录只对自己)
六:进程管理(建议看从哲学角度看操作系统)
1.进程的概念:
①:运行中的程序②:程序的实例化,一次运行过程。
程序的概念:存储在磁盘上的可执行文件。
2.进程是一组:
有序指令 + 数据 + 资源的集合。
程序 :指令 + 数据
3.操作系统是如何表示一个进程:
PCB(进程控制块)内容:
①:pid进程的一个标识②state 进程的状态③优先级④保留数据等。
操作系统记录一个进程需要大约1.7k的空间。(当你的电脑是几核的,在同一时间就会有几个进程同时执行)
State:
4.进程的管理命令
①查看系统上运行的进程:ps(process show)
②ps -e 显示操作系统中所有的进程
③ps -f 显示进程的详细信息
1.启动一个进程
可执行文件的路径 +文件名 (前台执行)
可执行file path + filename +&(后台执行)
2.结束一个进程
kill pid 终止一个进程
kill -q pid 强制终止
pkill cmd 终止一组
3. 挂起(暂停)进程
kill -stop pid
七:编译链接命令:
- 预编译:gcc -E main.c(生成了mian.i文件)
- 编译 :gcc -S main.i(生成了main.s文件)
- 汇编 :gcc-c main.s(生成了main.o文件)
- 链接 :gcc main.o (生成可执行的a.out文件)-o filename
- 运行 : ./a.out //放置文件覆盖最好使用自己的可执行文件filename
两步:编译:gcc -c main.c
链接:gcc main.o -o filename
一步:gcc main.c -o filename
一部进入debug版本:gcc main.c -o filename -g
八:Linux底下操作系统的运行级别
/etc/ininttab中设置
0 - halt(Do Not set initdefault to this)
1 - Single user mode 单用户模式
2 - Multiuser ,without NF-S(The same as 3 ,if you don’t have working)不带网络的多用户模式
3 - Full multiuser mode完全多用户模式,优先进入字符界面
4 - Unused
5 - Xll 图形化
6 - reboot(Do not set initdefault to this)重启