Linux——基础概念和命令

  1. Linux文件存储结构:

  /  :(根目录)根目录下的存储结构

  /bin :命令对应的可执行文件

  /home:(普通用户的家目录)-> username(多个用户)

  /boot: 系统开机使用的一些镜像文件

  /etc:配置目录,操作系统的设置

  /dev :外部设备

  /innt :临时挂载点

  /lib :系统中的库文件

  /root:root用户的家目录

/usr:系统的一些资源文档

二:文件的操作命令:

  1:Linux底下的文件类型

   ①普通文件:  -

   ②目录文件:  d    相当于一个包

   ③管道文件:  p    通讯使用,不存储东西,相当于通道

   ④设备文件:  c字符设备 b块设备 c套接字

   ⑤链接文件:  l

   显示该信息的命令:ls-l

   显示的内容:文件类型(一个字符)+文件权限+连接数+属主+组+size+最后文件修改时间+文件名

  1. 文件的简单操作命令:

   ①创建:

普通文件: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底下的操作)文件权限 + 属主 + 组

  1. ①权限:chamod②属主 chowm ③组 :chgrp
  2. 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:文件的压缩和解压:

  ①压缩:

  1. 打包:tar cf mytar.tar filelist  (生成了mytar.tar)
  2. 压缩:gzip mytar.tar   (生成了mytar.tar.gz)

   ②解压:

  1. 解压:gzip -d mytar.tar.gz  (生成了mytar.tar)
  2. 解包: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:在当前行的上面新建一行

  1. 末行模式下的操作:

  •   :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调试

  1. 调试命令:(适用于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 *ptr@len10 //表示全部

  p ptr[4]//第五个元素

五:库文件的创建和使用

A:静态库:

  1. 概念:相当于中间文件.o(功能代码)的集合,静态库是在链接时使用的,将静态库中的程序直接合成到最终的可执行文件中。Windows  .lib  Linux .a文件
  2. 特点:

①:中间文件.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

七:编译链接命令:

  1. 预编译:gcc -E main.c(生成了mian.i文件)
  2. 编译  :gcc -S main.i(生成了main.s文件)
  3. 汇编  :gcc-c main.s(生成了main.o文件)
  4. 链接  :gcc main.o (生成可执行的a.out文件)-o filename
  5. 运行  : ./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)重启

 

猜你喜欢

转载自blog.csdn.net/genzld/article/details/81318917