Linux 学习记录36(C高级篇)

Linux 学习记录36(C高级篇)

在这里插入图片描述

本文目录

  • Linux 学习记录36(C高级篇)
  • 一、文件相关指令
    • 1. chmod 修改文件用户权限
      • (1. 权限字母表示法
      • (2. 权限8进制表示法
    • 2. 修改文件所属组
      • (1. chgrp
      • (2. chown 能够同时修改多个
      • (3. 创建链接文件
        • >1 ln创建硬链接文件
        • >2 ln -s 创建软链接文件
  • 二、开关机相关指令
    • 1. 关机
    • 2. 重启
  • 三、用户相关操作
    • 1. 创建用户
      • (1. 查看id
      • (2. 查看当前用户
      • (3. 创建用户
      • (4. 给新用户添加sudo权限
        • >1 修改sudoers文件
    • 2. 删除用户
    • 3. 修改用户名
  • 四、磁盘
    • 1. 保证ubuntu链接上U盘
      • (1. VM弹窗,选择链接到虚拟机
      • (2. 虚拟机---->可移动设备---->选择U盘---->链接
    • 2. 查看U盘是否成功连接
    • 3. 查看U盘的使用率
    • 4. 给U盘分区
    • 5. 格式化操作
    • 6. 挂起
  • 五、shell脚本
    • 1. 操作系统结构
    • 2. 编程语言
    • 3. 第一个shell脚本
    • 3. 第一个shell脚本
    • 4. 运行脚本的三种方式
      • (1. 给文件添加可执行权限
      • (2. 使用bash(常用)
      • (3. source
  • 六、修改环境变量
    • 1. 查看特殊的环境变量
    • 2. 修改特殊的环境变量
      • (1. 只对当前终端生效的方式
      • (2. 只对当前用户生效的方式
      • (3. 对所有用户都生效的方式(常用)
      • (4. 对所有用户都生效的方式
  • 七、变量
    • 1. C语言中定义变量
    • 2. shell中定义变量
    • 3. 变量的访问
    • 4. 修饰变量的关键字
  • 思维导图

一、文件相关指令

1. chmod 修改文件用户权限

(1. 权限字母表示法

1. 权限的字母表示:r可读、w 可写、 可执行
2. 用户的字母表示: u所属用户 g所属组用户 o其他用户 a所有用户

(2. 权限8进制表示法

指令: chmod 八进制数 文件名
指令: chmod 0三位八进制数 文件名
指令: chmod u/g/0/a +/- 权限 文件名

例:

创建的默认权限
Linux 学习记录36(C高级篇)_第1张图片

  1. 修改权限 chmod 八进制数 文件名
    Linux 学习记录36(C高级篇)_第2张图片
  2. 修改权限 0三位八进制数 文件名
    Linux 学习记录36(C高级篇)_第3张图片
  3. 修改权限 chmod u/g/0/a + 权限 文件名
    Linux 学习记录36(C高级篇)_第4张图片

2. 修改文件所属组

(1. chgrp

指令:chgrp 所属组 文件名

例:

将 原所属组改为root
Linux 学习记录36(C高级篇)_第5张图片

(2. chown 能够同时修改多个

chown 所属用户 文件名
chown :用户名 文件名 "将所属用户和所属组用户改为 用户名"
chown 用户名1:用户名2 文件名 "将所属用户改为用户名1 所属组用户改为用户名2"

原文件用户:
Linux 学习记录36(C高级篇)_第6张图片
修改后:
Linux 学习记录36(C高级篇)_第7张图片

(3. 创建链接文件

>1 ln创建硬链接文件

指令:ln 被链接文件的路径 创建的硬链接文件的路径

例:

创建硬链接文件
Linux 学习记录36(C高级篇)_第8张图片
可以看到他们的inode号是一样的,说明他们占用的是同一片空间
可以理解为两个文件是同一个文件,只是文件名不同
当只删除源文件或链接文件时,不影响硬链接文件内的内容,要想彻底删除这个文件需要将所有硬链接的文件全部删除
硬链接个数如下
Linux 学习记录36(C高级篇)_第9张图片

>2 ln -s 创建软链接文件

软连接文件可以理解为快捷方式

指令:ln -s 被链接文件的绝对路径 创建的软链接文件的觉绝对路径
"创建时可以使用相对路径,但是最好使用绝对路径"

创建软连接:不会增加 ls -al 中的链接个数
Linux 学习记录36(C高级篇)_第10张图片
他们的inode号不同
在这里插入图片描述
当软连接没有可以链接的文件时会链接失败 如下:
Linux 学习记录36(C高级篇)_第11张图片

ln -s 被链接文件的绝对路径  软链接文件的绝对路径
ln -s /home/ubuntu/23041C/day2/1.c /home/ubuntu/23041C/100.c
给/home/ubuntu/23041C/day2/1.c创建了一个路径为/home/ubuntu/23041C/100.c文件

1、创建软链接文件时,使用绝对路径
2、软链接文件可以理解为快捷方式
3、软链接文件的文件类型是l,他不会增加文件描述中的链接文件个数
4、软链接文件,如果源文件被删除,链接会断开,软链接文件会失效,如果重新创建一个同名的源文件,软链接文件会重新链接,并且链接到新创建的文件
5、软链接文件的修改会影响到源文件,源文件的修改也会影响软链接文件
6、wins下不支持软链接文件,Linux下的压缩包不要放到主机下解压

二、开关机相关指令

1. 关机

shutdown now 立即关机
shutdown 10:46 在10点46关机
shutdown +3 在3分钟后关机
shutdown -c 取消定时关机

2. 重启

shutdown -r 重启
shutdown -r 10:46 在10点46重启
shutdown -r +3 在3分钟后重启
shutdown -c 取消定时重启
reboot 立即重启

三、用户相关操作

1. 创建用户

(1. 查看id

id -g/u/o 

(2. 查看当前用户

whoami

(3. 创建用户

sudo adduser 用户名

Linux 学习记录36(C高级篇)_第12张图片

(4. 给新用户添加sudo权限

>1 修改sudoers文件

先切换到能够执行sudo权限的用户或切换到root用户

sudo vim /etc/sudoers

在这里插入图片描述

修改文件建议提前拍摄虚拟机快照,防止修改出问题
在这里插入图片描述

2. 删除用户

sudo userdel 用户名 ---->默认不删除家目录
sudo userdel -r 用户名 ---->删除家目录

sudo deluser 用户名 ---->默认不删除家目录,也不能加-r参数

3. 修改用户名

前提:保证用户不在登陆状态,没有进程占用

可以开机后,就不登陆该用户
sudo usermod -c 描述信息 用户名   ---->修改用户的描述信息,图形化界面看到的和开机的显示
sudo usermod -l 新的用户名 原来的用户名  ---->修改用户名
sudo usermod -m -d 新的家目录的位置  用户名 ---->修改用户的家目录位置
-m   -MOVE    -d  -HOME_DIR

sudo usermod -g 目标组 用户名   ----->修改用户的所属组,目标组必须已经存在

sudo vim /etc/group   ---->存放所有组用户的信息

四、磁盘

1. 保证ubuntu链接上U盘

(1. VM弹窗,选择链接到虚拟机

Linux 学习记录36(C高级篇)_第13张图片

(2. 虚拟机---->可移动设备---->选择U盘---->链接

Linux 学习记录36(C高级篇)_第14张图片

2. 查看U盘是否成功连接

ls /dev/sd* 
如果ls的结果包含除sda外的其他内容说明U盘连接成功。
sda---->Ubuntu的磁盘,sda1表示Ubuntu只有一个分区
sdb---->外部设备/U盘,adb1表示U盘只有一个分区

在这里插入图片描述

3. 查看U盘的使用率

如果U盘,挂载到了Ubuntu中的具体文件夹下,可以使用df -h查看到
如果没有挂载点,查看不到

df -h

4. 给U盘分区

fdisk  ---->磁盘分区工具,如果没有fdisk工具,去使用apt下载
一定要使用sudo来完成fdisk相关的操作

fdisk常用的指令:
n:新建分区
d:删除分区
p:打印分区
q:退出
w:保存退出

5. 格式化操作

mkfs   ---->make file system

sudo mkfs.要格式化的文件类型 分区
按两下tab可以显示,mkfs可以格式化的所有文件系统,常用ntfs(wins),ext3,ext4(ubuntu)

如下说明操作成功
Linux 学习记录36(C高级篇)_第15张图片

6. 挂起

sudo mount 要格式化的分区  挂载的目标路径

"取消挂起"
sudo umount 挂载的路径
sudo umount 分区名

五、shell脚本

1. 操作系统结构

应用层(app/代码):通过shell和内核层交互
---------------------------
内核层()
内核的五大功能:
	1. 文件管理
	2. 网络管理
	3. 进程管理
	4. 内存管理
	5. 设备管理
---------------------------
硬件层(设备)

2. 编程语言

	编译型语言:C,C++ 等通过编译,生成可执行程序再执行
	解释型语言:shell,python 等通过解释器

3. 第一个shell脚本

C语言是.c文件,shell是.sh文件

#!/bin/bash/
echo "hello world"
#first_shell

3. 第一个shell脚本

#!/bin/bash
#!/usr/bin/python   ----->Ubuntu使用的python解析器  
#shabang ---->#!
#!表明脚本使用的解析器,在给脚本添加可执行权限后,直接脚本时生效

要求#!后面的解析器和脚本语言完全一致的
如果不写,默认匹配对应的解析器

echo "hello world"
#shell终端指令
#表示注释
#第一个shell脚本

4. 运行脚本的三种方式

(1. 给文件添加可执行权限

chmod 0777 1.sh
./1.sh

(2. 使用bash(常用)

不需要脚本有可执行权限

bash 1.sh

执行过程:
在后台打开一个新的终端,运行脚本,再将运行结果返回到当前终端

(3. source

不需要脚本有可执行权限

source 1.sh
执行过程:
在同一个终端完成运行和返回结果

六、修改环境变量

1. 查看特殊的环境变量

echo $PATH

path是系统在执行指令时默认的查找路径
前面的a.out之所以不能够直接执行,需要加./,就是因为a.out的路径不在PATH检索的路径下。

2. 修改特殊的环境变量

就是把自己想添加的路径,追加到PATH中

(1. 只对当前终端生效的方式

export PATH=${PATH}:/home/ubuntu/23041C/day2
export             PATH=    ${PATH}:    /home/ubuntu/23041C/day2
 |                    |        |            |
给环境变量赋值    赋值的变量  展开PATH     追加的内容

(2. 只对当前用户生效的方式

修改家目录下的.bashrc文件,添加想要修改的路径
在这里插入图片描述

修改后让配置文件生效:
后两种都是临时生效的

重启(永久有效)
source ~/.bashrc 
. ~/.bashrc

(3. 对所有用户都生效的方式(常用)

修改/etc/bash.bashrc文件
在bash.bashrc的最后一行 ,使用exprot添加路径

修改后让配置文件生效:   改的是哪个文件,就运行哪个文件
重启
source /etc/environment
. /etc/environment

特殊的环境变量路径:只能对直接的子文件生效

(4. 对所有用户都生效的方式

修改/etc/environment文件
直接把路径添加到最后,以:作为分隔
修改后让配置文件生效: 改的是哪个文件,就运行哪个文件

重启
source /etc/environment
. /etc/environment

特殊的环境变量路径:只能对直接的子文件生效

七、变量

1. C语言中定义变量

存储类型  数据类型  变量名;
存储类型:
    auto    const   static    volatile   register    extern

2. shell中定义变量

shell是一个弱数据类型的语言,都是当作字符串处理的
shell脚本中定义变量时,等号两边不能有空格

变量名=变量的值
变量名='变量的值'
变量名="变量的值"

#!/bin/bash
#shell脚本就是指令的集合
var1=90
str='hello world'  #''一般用于,变量的值中间有空格时
#''内不能识别$变量名,不会展开变量,只会当成字符串处理
str1="hello world"
#使用已有的变量给新的变量赋值
str3="$str $str1"   #""一般用于,使用一个变量给另一个变量拼接赋值
str4=$str3
echo $str3

3. 变量的访问

$变量名  ---->拿到变量的值
${变量名}  ---->正确表明变量名的范围,建议都加${}

#!/bin/bash
#shell脚本就是指令的集合
var1=90
str1='hello '
#echo $str1world
#echo hello  world  ---->输出为hello world,空格被自动合并
#输出空行,把str1world识别为变量名
echo ${str1}world
#${}的作用,正确识别变量的范围

4. 修饰变量的关键字

readonly :只读
unset :清空变量,不能清空readonly的变量
local :定义局部变量,只能在函数中时使用
shell 脚本中,全部都是全局变量

思维导图

Linux 学习记录36(C高级篇)_第16张图片

你可能感兴趣的:(Linux学习记录,linux,学习,c语言)