Linux2 指令(二)
常用指令2
- 1. 文件权限指令
- 目录的三个权限
- chmod
- 改变文件拥有者
- 改变文件所属组
- 关于默认文件权限
- 2. 软件安装
- 更新软件包列表
- 升级软件包
- 安装软件包
- 卸载软件包
- 搜索软件包
- 查看软件信息
- 3. gcc/g++ 编译命令
- 预处理阶段
- 编译阶段
- 汇编阶段
- 链接阶段
- 补充
- 4. git
- 配置用户姓名 - name
- 配置用户电子邮件 - email
- 仓库初始化 - init
- 克隆仓库 - clone
- 添加文件到暂存区 - add
- 提交更改 - commit
- 查看仓库状态 - status
- 查看提交历史 - log
- 创建分支 - branch
- 切换分支 - checkout
- 合并分支 - merge
- 添加远程仓库 - remote
- 推送更改到远程仓库 - push
- 从远程仓库拉取更改 - pull
1. 文件权限指令
目录的三个权限
- 读权限 r :决定用户能否查看目录内文件信息
- 写权限 w:决定用户能否在目录内增删改查文件
- 执行权限 x:决定用户能否进入目录
chmod
drwxrwxrwx
第一个字母表示文件类型,后面三个字母为一组,分别表示拥有者,所属组,other对此文件的权限
- r:读权限
- w:写权限
- x:执行权限
- 文件权限只能由root或者拥有者修改
- 可执行的文件前提必须是:可执行 + x权限
修改权限可以用chmod
chmod u+rwx 文件名 #给文件的拥有者添加rwx权限
chmod g+rwx 文件名 #给文件的所属组添加rwx权限
chmod o+rwx 文件名 #给文件的other添加rwx权限
chmod a+rwx 文件名 #给文件的所有人添加rwx权限chmod u-rwx 文件名 #给文件的拥有者撤销rwx权限
chmod g-rwx 文件名 #给文件的所属组撤销rwx权限
chmod o-rwx 文件名 #给文件的other撤销rwx权限
chmod a-rwx 文件名 #给文件的所有人撤销rwx权限
此外,每个人的权限用一个八进制数字来表示。
x = 1、w = 2、r = 4、组合起来rwx = 7
chmod 000 文件名 #取消文件的所有人权限
chmod +t 文件名 #给文件添加粘滞位,该文件只能被拥有者,root删除
改变文件拥有者
chown 新的拥有者名 文件名 #改变文件拥有者
改变文件所属组
chgrp 新的所属组名 文件名 #改变所属组
关于默认文件权限
Linux默认创建文件权限:普通文件0666,目录文件0777
umask可以更改起始文件权限权重,最终权限 = 起始权限 & (~umask)
umask 0002 #创建普通文件最终权限为0664,创建目录最终权限为0775
2. 软件安装
本文内容是基于ubuntu下的Linux,因此是利用apt安装软件
更新软件包列表
sudo apt update #在安装或升级软件之前,需要先更新软件包列表
升级软件包
sudo apt upgrade #根据 apt update 获取的最新软件包信息,对已经安装的软件包进行升级
安装软件包
sudo apt install 软件包名 #安装软件
卸载软件包
sudo apt remove 软件包名 #卸载软件,但会保留配置文件
sudo apt purge 软件包名 #卸载并且删除配置文件
搜索软件包
apt-cache search 软件包关键词 #在仓库中搜索有关的软件
查看软件信息
apt-cache show 软件包名·#输出软件包的详细信息
3. gcc/g++ 编译命令
基础格式:gcc 选项 要编译的文件 选项 目标文件
c语言文件到可执行文件一般需要经过“预处理、编译、汇编、链接”
预处理阶段
预处理主要干了四件事:宏替换,头文件展开,条件编译、去除注释
-E:在预处理结束后停止编译过程
-o:指要生成的目标文件
预处理完毕生成 .i 文件
gcc -E test.c -o test.i
编译阶段
生成汇编代码
-S进行编译而不进行汇编,仅生成汇编代码
gcc -S test.i -o test.s
汇编阶段
生成机器可识别的代码
-c把汇编代码转换成 .o 的二进制目标代码
gcc -c test.s -o test.o
链接阶段
生成可执行文件或者库文件
- 静态库:编译链接时把库文件代码全部加入到可执行文件中(可执行文件会变大),运行时不需要库文件了。静态库文件后缀一般为.a
- 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”
- gcc 在编译时默认使用动态库。
gcc test.o -o test
补充
Linux下gcc/g++出来的二进制程序默认是release模式,debug模式必须在编译时添加-g选项
以上只是细分了阶段,可以直接从.c文件编译成可执行文件
如:gcc/g++ 要编译的文件 -o 目标文件
如果需要加一些语言的标准,直接在编译时后面添加 -std=标准(如c++11,c99)
4. git
配置用户姓名 - name
git config --global user.name "your name"
# 这里的Your Name是你希望在提交记录中显示的名字。
配置用户电子邮件 - email
git config --global user.email "your@email.com"
# 这是用于识别提交者身份的重要信息。
仓库初始化 - init
git init
# 在当前目录下创建一个新的 Git 仓库。这会在目录中生成一个隐藏的.git文件夹,用于存储仓库的所有版本控制信息。例如,在一个新的项目文件夹中执行git init后,该文件夹就变成了一个可以被 Git 管理的仓库。
克隆仓库 - clone
git clone repository-url
# 用于从远程服务器(如 GitHub、GitLab 等)克隆一个现有的 Git 仓库到本地。其中 repository - url 是远程仓库的地址
# 这会在本地创建一个和远程仓库同名的文件夹,并将远程仓库的所有内容(包括代码、文件历史等)下载到这个文件夹中。
添加文件到暂存区 - add
git add filenames
# 将指定的文件添加到 Git 的暂存区。暂存区是一个中间区域,用于准备要提交的文件修改。
# 如果想添加目录下的所有文件,可以使用git add.(注意,“.” 表示当前目录下的所有文件和子目录,包括新建的文件和修改后的文件)。
提交更改 - commit
git commit -m "commit - message"
# 将暂存区的文件提交到本地仓库,并添加一个提交说明(commit - message)。提交说明应该简洁明了地描述本次提交所做的更改。
git commit --amend
- 它允许你修改最近一次的提交
- 当你只想要修改最近一次提交的提交信息时,执行git commit --amend命令后,Git 会打开默认的文本编辑器(可以通过git config命令设置),在编辑器中,你可以修改提交信息。修改完成后保存并退出编辑器,Git 就会使用新的提交信息更新最近一次的提交。
- 如果你在提交后发现遗漏了一些文件,首先需要将这些文件添加到暂存区(使用git add命令),然后执行git commit --amend。Git 会将暂存区中的这些文件添加到最近一次提交中,并且更新提交时间为当前时间。
查看仓库状态 - status
git status
# 显示当前仓库的状态,包括哪些文件被修改了、哪些文件在暂存区、哪些文件没有被跟踪等信息。
例如,在修改了一些文件后执行git status,会看到类似这样的信息:
On branch master(显示当前所在分支是master)
Changes not staged for commit:(未暂存的更改)
modified: file1.txt(列出被修改但未添加到暂存区的文件)
Untracked files:(未被跟踪的文件)
new_file.cpp(列出新创建但未添加到 Git 的文件)
查看提交历史 - log
git log
# 显示仓库的提交历史,包括每次提交的作者、日期、提交说明和唯一的提交哈希值等信息。
例如,执行git log后会看到类似如下的输出:
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6(提交哈希值)
Author: John Doe <johndoe@example.com>(作者信息)
Date: Mon Jan 01 12:00:00 2024 -0500(提交日期)
Add new functionality to the system(提交说明)
创建分支 - branch
git branch branchname
# 在本地仓库中创建一个新的分支。例如,git branch new_feature会创建一个名为new_feature的新分支。
切换分支 - checkout
git checkout branch - name
# 切换到指定的分支。例如,git checkout new_feature会从当前分支切换到new_feature分支。
合并分支 - merge
git merge branch - name
# 将指定分支合并到当前分支。例如,在master分支上执行git merge new_feature,会将new_feature分支的内容合并到master分支。
添加远程仓库 - remote
git remote add [remote - name] [remote - repository - url]
# 为本地仓库添加一个远程仓库。
例如,git remote add origin https://github.com/user/my_repository.git,这里origin是远程仓库的名称(通常使用origin),后面是远程仓库的地址
推送更改到远程仓库 - push
git push [remote - name] [branch - name]
# 将本地分支的更改推送到远程仓库。
例如,git push origin master会将本地master分支的内容推送到名为origin的远程仓库的master分支。
从远程仓库拉取更改 - pull
git pull [remote - name] [branch - name]
# 从远程仓库拉取指定分支的更新并合并到本地对应的分支。
例如,git pull origin master会从名为origin的远程仓库的master分支拉取更新并合并到本地master分支。