【C】1、初始Linux及其基本指令

一、Linux 与 Windows 之间的区别

1、交互方式

Windows :图形界面的交互

Linux :指令之间的交互,主要以命令的形式进行操作

2、文件结构

Windows :目录从属分区,所有的入口遵守以分区为名字为开头(C: \usr)【重点盘符】

Linux :分区从属目录,所有的入口遵守以根目录为名字开头的(cd /mnt)【重点根目录】

二、Ubuntu 虚拟机的一些基础快捷键

1、全局

快捷键 功能
Ctrl Alt T 进入终端
Shift Ctrl C 复制选中文本
Shift Ctrl V 粘贴剪切板的文本
Ctrl win D 返回桌面
Tab Alt 切换页面
Fn insert 截屏(不太好用,不如直接返回win用win的截屏)
Ctrl Alt 切换控制权回到主机,把鼠标移出虚拟机页面也能切换回主机
Ctrl Win 方向键 分屏

全局的快捷键在终端中亦可用

2、terminal中

快捷键 功能
exit 退出终端
Shift Ctrl + 同时放大终端窗口与字体
Ctrl - 同时缩小终端窗口与字体
Ctrl C 终端页面中结束正在运行的程序

3、自定义快捷键

其实,Ubuntu中的快捷键都是可以进行修改的,此处以截屏为例。和 Windows 一样,Ubuntu 也是自带有截屏工具的,但是二者的快捷键有所区别。

可以进入键盘页面(keyboard)自行查看并更改:

更改其他快捷键也是如此的方式。

三、解析 gec@ubantu:~$

  • gec 当前用户
  • @ 分隔符
  • ubantu 所使用的系统内核名
  • : 分隔符,用以区分$与路径
  • ~ 当前所在路径(家目录)
  • $ 用户权限标识符,普通用户,若是#则为超级用户,即管理员身份

四、shell基本操作指令

1、ls

显示当前文件夹下的内容

2、-

代表的是文件类型(之一)

文件类型 文件符号
普通文件 -
目录文件 d
套接字文件 s
块设备文件 b
字符设备文件 c
链接文件 l
管道文件 p

3、ls -a

查看隐藏文件及其属性

可以对比看看上面ls的结果,也可以直接看此图,高亮的部分就是隐藏文件

4、ls -l

查看文件的详细属性

5、ls -la

查看全部文件及相关信息

看着一段文字:
-rw-rw-r-- 1 gec gec 131 Jan 6 18:20 .xinputrc

其中,-rw-rw-r--就是此文件的权限,分别用三位的二进制数去表示,read排在高位,代表4,write为2,

简写 全称 释义 权限值
r read 读权限 4
w write 写权限 2
x execute 执行权限 1
- 无权限 0

又:

-rw-rw-r--  1 gec  gec      131 Jan  6 18:20 .xinputrc

关于这段文字,其前半段:第一个rw 是创建者的操作权限;第二个rw 是创建组的操作权限;r 则是其他用户的操作权限;

其后半段:1 连接数;第一个 gec 是文件的创建者;第二个 gec 是创建者的所有组;131 是文件大小,这里指的是字节;Jan 6 18:20 为最后一次修改的时间;xinputrc 是文件名

6、cd

切换路径

  • cd 路径名 --> 切换到该目录
  • cd ~ --> 家目录
  • cd / --> 根目录(所有操作都需要管理员权限)
  • cd - --> 返回上一次所在目录,并且打印当前(返回后)目录路径
  • cd .. --> 返回上一级目录

7、touch

(1)、直接创建文件

新建普通文件

gec@ubuntu:~$ touch 1.txt
gec@ubuntu:~$ ls
1      Desktop           Music     Templates
1.txt  Documents         Pictures  Videos
2      Downloads         Public

(2)、不允许直接创建多级目录

试了一下,发现无论是用命令还是函数,都不能同时创建多级目录:



#include "head.h"

#define PATH "/mnt/hgfs/SHARE_Ubuntu_1/111/222/1.txt"

int main(int argc, char const *argv[])
{
    // 打开文件(不存在就创建)
    FILE *Fd = fopen(PATH, "a+");
    if (NULL == Fd)
    {
        perror("fopen Fd error:\n");
        return -1;
    }
    
	// 关闭文件
	fclose(Fd);
	return 0;

}

8、mkdir

创建目录

这里和touch一样,都是不允许直接创建多级目录的。

(1)、在当前目录创建单个目录

gec@ubuntu:~$ mkdir 123
gec@ubuntu:~$ ls
1      core       examples.desktop  samba
123    Desktop    Music             Templates
1.txt  Documents  Pictures          Videos
2      Downloads  Public

绝对路径:从根目录写起
相对路径:从当前路径写起,且不是从根目录开始写起

此处创建新目录是在当前目录创建的,本质上隐含了一个相对路径,其他地方也差不多,我们可以简单理解为默认的情况通常是指的相对路径

(2)、在当前目录同时创建多个目录

mkdir 111 222 333

(3)、同时创建多个目录

mkdir ./111/444 ./111/555 ./111/666

可以看到,这里若是想要在非当前目录创建目录,就要在所创建目录的名字前面带上路径,这里用的是相对路径,所以用./

如果用的是绝对路径,就是从根目录/开始:

9、cp

复制文件/目录

(1)、简单复制文件

cp 目标文件名 目标路径

gec@ubuntu:~$ cp 1.txt 123
gec@ubuntu:~$ cd 123
gec@ubuntu:~/123$ ls
1.txt

(2)、复制文件后顺便改个名

还能复制过去后换个名字,原理是是在第二个的路径上新创了一个文件,然后用前者覆盖,所以在第二个路径的后面直接加上新名字就好

(3)、复制目录

cp 还可以复制目录,跟删除一样,这里也是用到了递归的方法:

10、mv

剪切文件/重命名

区分到底是哪个功能很简单,看目标文件名后面跟的是文件还是目录即可。

(1)、剪切文件

mv 目标文件名 目标路径

gec@ubuntu:~$ mv 2.txt 123
gec@ubuntu:~$ cd 123
gec@ubuntu:~/123$ ls
1.txt  2.txt

(2)、重命名

mv 目标文件名 新文件名

gec@ubuntu:~$ mv 1.txt 2.txt
gec@ubuntu:~$ ls
1      core       examples.desktop  samba
123    Desktop    Music             Templates
2      Documents  Pictures          Videos
2.txt  Downloads  Public

11、pwd

打印当前所在路径

gec@ubuntu:~/123$ pwd
/home/gec/123

12、clear

清屏

13、rm

删除文件或目录

(1)、删除文件

gec@ubuntu:~/123$ rm 1.txt
gec@ubuntu:~/123$ ls
2.txt

(2)、删除目录

方法1:rmdir 目录名

gec@ubuntu:~$ mkdir 456
gec@ubuntu:~$ ls
1    core       examples.desktop  samba
123  Desktop    Music             Templates
2    Documents  Pictures          Videos
456  Downloads  Public
gec@ubuntu:~$ rmdir 456
gec@ubuntu:~$ ls
1     Desktop           Music     Templates
123   Documents         Pictures  Videos
2     Downloads         Public
core  examples.desktop  samba

方法二:rm 目录名 -rf

r 的意思是递归
f 的意思是所有文件

gec@ubuntu:~$ rm 123 -rf
gec@ubuntu:~$ ls
1        Documents         Pictures   Videos
2        Downloads         Public
core     examples.desktop  samba
Desktop  Music             Templates

14、sudo

(1)、临时获得超级权限

举例:

gec@ubuntu:~$ cd /
gec@ubuntu:/$ touch 3.txt
touch: cannot touch '3.txt': Permission denied

由上可见,普通用户没有权限在根目录创建文件。事实上,除了家目录和共享目录以外,所有其他目录的权限都是有限的


若是给了管理员权限:

gec@ubuntu:/$ sudo touch 3.txt
[sudo] password for gec:
gec@ubuntu:/$ ls
1.txt  initrd.img      mnt   sys
3.txt  initrd.img.old  opt   tmp
bin    lib             proc  usr
boot   lib32           root  var
cdrom  lib64           run   vmlinuz
dev    libx32          sbin  vmlinuz.old
etc    lost+found      snap
home   media           srv

第二行是提示你输入管理员密码,跟开机密码一样,此处也不会显示密码。

注意,此种方法获得的管理员权限只是暂时的,只限于那一行代码有时候也会遇到权限保留了一会,但我还没发现啥规律在其中。

(2)、某一段时间内获得管理员权限

由此,也引出了一个可能,就是若是操作者想要在一段时间内都是管理员状态,该如何实现

此时,需要从普通用户身份,切换到管理员身份,输入指令:sudo su ,输入我自己的隐形密码才可,粤嵌的密码统一是123456,我的当然也是,,,若想退出管理员身份,输入指令:exit

另外,从根目录复制出来的文件夹,在复制的时候也把属性给复制了,也就是说,他把属性里面的权限也给复制了,所以即使是要对从根目录已经复制到家目录的文件进行操作,也是需要管理员权限的。

15、cat

查看文件的内容不做修改

(1)、单纯查看

可以快速查看文件里面的内容

cat halloworld.c

(2)、查看的时候显示特殊字符

但是单纯的 cat 不能查看到文件中的一些特殊字符,若是要有查看到特殊字符的要求,可以用 “cat 文件 -A”

cat halloworld.c -A

这里的特殊字符指的是不可见字符,比如中文的空格,中文的换行,中文的制表符

(3)、查看的时候显示行号

cat main.c -n

五、共享目录的设置

为了方便Windows端与Linux端的文件交换,可以选择设置共享文件夹,在共享文件夹中,两端都能对其中文件进行操作

1、如何设置

  • 首先。在Windows端选择或者创建一个文件夹,作为Windows端的共享文件夹,比如,我这里将D盘里的文件夹share作为共享文件夹

  • 然后,打开虚拟机,点击设置

  • 选项-->共享文件夹-->勾选总是启用-->添加

  • 点击下一步

  • 添加主机中,共享文件夹的路径,填写Linux中给共享文件夹设置的名称,点击下一步

  • 点击确定

2、共享目录的访问

Windows:打开图标
Linux:指令进入

3、共享目录的路径

gec@ubuntu:/mnt/hgfs/share

六、gcc编译器

(1)、gcc干什么

在使用gcc对C语言程序进行编译时,可细分为四个阶段:

  • 预处理
  • 编译
  • 汇编
  • 链接

说人话,就是将C语言源程序,转化为机器可识别可执行的二进制程序

(2)、编译方法1

gec@ubuntu:/mnt/hgfs/share$ gcc c程序名.c -o 程序名

然后运行:
./程序名

例如,我写下一个程序:

//打印99乘法表
#include <stdio.h>
int main(void)
{
    for(int i=1;i<10;i++)
    {
        for(int j=1;j<=i;j++)
        {
            printf("%d*%d=%d\t",j,i,i*j);
        }
        printf("\n");
    }
    return 0;
}

编译运行:

gec@ubuntu:/mnt/hgfs/share$ gcc 99-mul-tab.c -o 99-mul-tab
gec@ubuntu:/mnt/hgfs/share$ ./99-mul-tab
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

(3)、编译方法2:

gec@ubuntu:/mnt/hgfs/share$ gcc c程序名.c

gec@ubuntu:/mnt/hgfs/share$ ./a.out

gec@ubuntu:/mnt/hgfs/share$ gcc 99-mul-tab.c
gec@ubuntu:/mnt/hgfs/share$ ./a.out
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

此种编译方法,且不谈原理,单就结果来说,额外生成了一个不断被覆盖的a.out文件,比起第一种,无疑在操作上简洁了许多

七、一些配置

1、改变 terminal 的主题

  1. Ctrl + Alt + T 打开 terminal
  2. 右键单击编辑页面的任意区域,会弹出如图窗口,然后鼠标移到 Profiles ,点击进入 Profiles preferences 页面
  3. 把圈出来的那个勾勾点击去除掉即可

2、剪切板

当设置了tools后,此 Ubuntu 的剪切板与主机的剪切板是公用的

posted @ 2023-07-20 09:29  fhzy  阅读(72)  评论(0)    收藏  举报