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 +/- 权限 文件名
例:
创建的默认权限
- 修改权限 chmod 八进制数 文件名
- 修改权限 0三位八进制数 文件名
- 修改权限 chmod u/g/0/a + 权限 文件名
2. 修改文件所属组
(1. chgrp
指令:chgrp 所属组 文件名
例:
将 原所属组改为root
(2. chown 能够同时修改多个
chown 所属用户 文件名
chown :用户名 文件名 "将所属用户和所属组用户改为 用户名"
chown 用户名1:用户名2 文件名 "将所属用户改为用户名1 所属组用户改为用户名2"
例
原文件用户:
修改后:
(3. 创建链接文件
>1 ln创建硬链接文件
指令:ln 被链接文件的路径 创建的硬链接文件的路径
例:
创建硬链接文件
可以看到他们的inode号是一样的,说明他们占用的是同一片空间
可以理解为两个文件是同一个文件,只是文件名不同
当只删除源文件或链接文件时,不影响硬链接文件内的内容,要想彻底删除这个文件需要将所有硬链接的文件全部删除
硬链接个数如下
>2 ln -s 创建软链接文件
软连接文件可以理解为快捷方式
指令:ln -s 被链接文件的绝对路径 创建的软链接文件的觉绝对路径
"创建时可以使用相对路径,但是最好使用绝对路径"
例
创建软连接:不会增加 ls -al 中的链接个数
他们的inode号不同
当软连接没有可以链接的文件时会链接失败 如下:
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 用户名
(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弹窗,选择链接到虚拟机
(2. 虚拟机---->可移动设备---->选择U盘---->链接
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)
如下说明操作成功
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 脚本中,全部都是全局变量