Linux和git起步
git
git是分布式版本控制系统 是linus弄的 这是官方地址 macOS的xcode集成了git
这个是廖雪峰老师的git教程 廖雪峰git教程
下面是我总结的廖老师的git教程中的常用命令方便我以后查阅
Linux命令
mkdir 文件夹名
在当前目录下建立一个子目录(.开头的是隐藏目录 比如 .aaa)
mkdir -p aaa/bbb 在当前目录下创建aaa文件夹 aaa中创建bbb文件夹
cd 目录名称
切换目录
/ 的意思是:目录级别分隔符,符号前面表示的就是一个路,(同时也是根目录目录名)(路径是以/开头表示是绝对路径,不是就表示当前目录的子目录)
. 的意思是:当前目录
./a 的意思是:当前目录下文件名为a的文件
pwd 命令用于显示工作目录
ls 显示目录内容(ls= list search) (-l 以详细的方式显示当前目录下的文件和目录 缩写为ll) (-a 显示隐藏)
mv 旧名 新名 文件重命名 mv=move
mv 源目录 目标目录 将源目录移动到目标目录下(如果目标目录存在,则是移动,如果不存在则是改名)
cp [参数] 源文件或目录 目标目录 复制文件 -r recursion 连同子目录下所有的文件全部复制
find (无参/有目录名)搜索当前/指定目录和它的子目录所有的文件和目录 (-name '查询字符串')指定具体查询字符串 *****匹配多个字符 ?匹配1个字符
rm 文件名.txt
删除指定文件
rm [参数] 文件或目录1 文件或目录2 删除文件 -r recursion 连同子目录下所有的文件全部复制 -f 强制删除,因为删除之前会有提问:yes或no,回答yes
touch 文件1 文件2 创建文件 例如 touch my file.java
cat 文件名.txt
查看文件内容
more 文件名 分屏显示所有文件内容 回车键:一行一行显示 空格键: 一页一页显示 q:退出
head 文件名 查看文件前10行
head -n 行数 文件名 指定行数显示
tail 文件名 查看文件后10行
tail -n 行数 文件名 指定行数显示后几行
less 文件名 查看文件所有的内容 -N 显示行号 PageUp:向前翻页 PageDown:向后翻页 q: 退出
vi编辑器: vi 文件名.txt
或vim 文件名.txt
进入命令模式 按i进入编辑文本 按est退出文本模式 在命令模式下输入: 进入底行模式 继续输入wq! 保存文档 或q!不保存
按[G]:移动到文章的最后。
按[$]:移动到光标所在行的“行尾”。
按[^]:移动到a光标所在行的“行首”
命令模式下按键:
命令 | 描述 |
---|---|
i | 在当前光标的前面插入字符 |
a | 在当前光标的后面插入字符 |
o | 在当前光标的下一行插入字符 |
命令或底行模式下常用的编辑命令
命令 | 描述 |
---|---|
yy | 复制当前行 |
p | 如果前面已经复制了,在当前下面粘贴 |
dd | 删除当前行 |
u | 撤销 |
/字符串 | 搜索文本内容 n:向后搜索 N:向前搜索 |
wq | 保存并退出 |
q! | 不保存强制退出 |
wq! | 强制保存退出(只读文件) |
tar打包/压缩命令
扩展名 | 分类 |
---|---|
.zip或.rar | 在windows下的压缩包 |
.tar | 在Linux下的打包文件 |
.gz | 在Linux下的压缩文件 |
.tar.gz | 在Linux下的打包压缩文件 |
tar [参数f] 压缩包名 一个或多个文件 | |
---|---|
作用 | 对一个或多个文件进行打包并压缩 |
-c | 创建一个打包的文件(必选) |
-v | 显示打包的详细过程(可选) |
-z | 压缩文件(可选) |
-f <压缩文件名> | 指定压缩包的文件名(必选),f要求后面紧跟着压缩的文件名,一般放在参数最后面 |
解压
语法1:tar [参数] 压缩文件 |
---|
解压文件到当前目录 |
语法2:tar [参数] 压缩文件 -C 目录 | |
---|---|
解压文件到指定的目录 | |
-x | 解压指定的文件【必选】 |
-v | 显示解压详细过程【可选】 |
-f<压缩文件> | 指定要解压的文件【必选】 |
-C | 解压到指定的目录下【可选】 |
查看进程
ps [参数] | |
---|---|
无参 | 显示当前用户通过终端启动的进程 |
-a | 显示所有用户通过终端启动的进程 |
-u | 显示所有用户通过终端启动的进程的详细信息 |
-x | 显示所有用户的所有进程 |
top 查看系统整体内存、cpu耗用情况
杀死进程
kill [参数] 进程号(pid) | |
---|---|
进程号 | 通过ps可以查到进程号 |
-9 | 强制中止进程 |
搜索文件内容
grep是一种强大的文本搜索工具,它能使用字符串搜索文本,并把匹配的行和行号打印出来。
grep [参数] 字符串 文件名 | |
---|---|
作用 | 搜索指定文件中字符串内容 |
-n | 搜索结果中显示行号 |
-v | 显示不匹配的行 |
-i | 忽略大小写搜索 |
管道
语法 | 命令1 | 命令2 |
---|---|
解释 | 管道命令符 | ,必须要有两条以上的命令参与操作。将第1个命令的执行结果,做为第2个命令的参数,继续进行下一个操作。 |
ssh-keygen -t rsa -C "mail@example.com"
创建SSH Key (mac)
**shutdown now ** 立刻关机
reboot 重启
date 输出系统当前时间
添加权限
权限的范围
权限范围 | 说明 |
---|---|
u | User 属主,文件和目录的拥有者 |
g | Group 属组,拥有者所在的组 |
o | Other 其他用户 |
a | All 所有的用户 |
权限控制
对指定的文件或目录,给用户或组赋予权限。多种类型的用户之间使用逗号分隔 |
---|
chmod 用户或组+权限 目录或文件 增 |
chmod 用户或组=权限 目录或文件 改 |
chmod 用户或组-权限 目录或文件 删 |
chmod -R a+r * 所有用户添加读权限
crontab定时任务
通过crontab 命令,我们可以在固定的时间间隔执行指定的命令。时间间隔的单位可以是分、时、日、月、周及它们的组合。这个命令非常适合做周期性的工作,如:数据备份,程序的自动运行。
crontab [参数] | |
---|---|
-l | 显示当前用户所有的定时任务 |
-e | 使用vim编辑当前用户的定时任务,一行一个定时任务 |
-r | 删除当前用户的定时任务 |
crontab -e 会启动vi编辑器 编辑器内输入* * * * * date >> /root/mydate.log 启动一个定时任务退出vi立即生效
* * * * * date 依次为如下
分 时 日 月 周 命令 | |
---|---|
minute | 表示分钟,可以是从0到59之间的任何整数。 |
hour | 表示小时,可以是从0到23之间的任何整数。 |
day | 表示日期,可以是从1到31之间的任何整数。 |
month | 表示月份,可以是从1到12之间的任何整数。 |
week | 表示星期几,可以是从0到7之间的任何整数,0或7代表星期日,1-6表示星期一到六。 |
command | 要执行的命令 |
星号(*) | 代表所有可能的值。如:用在月字段上表示每月执行,用在分字段上表示每分执行 |
---|---|
逗号(,) | 用逗号隔开的值指定某几个时间点。如:用在小时字段“1,2,5”表示1点,2点,5点 |
短横(-) | 表示一个整数范围,如:用在日上“2-6”表示“2号到6号” |
正斜杠(/) | 指定时间的间隔频率。如: 用在小时上“0-10/2”表示0点到10点中每两小时执行一次。 与星号一起使用,例如*/10,如果用在分钟字段,表示每10分钟执行一次。 |
定时服务管理的命令
crond服务管理命令 | 说明 |
---|---|
systemctl start crond | 启动定时服务crond.service |
systemctl stop crond | 停止定时服务crond.service |
systemctl status crond | 查看crond.service服务的状态 |
systemctl restart crond | 重启定时服务,相当于先stop再start |
systemctl reload crond | 不停止定时器,重新加载新的配置文件,使其生效。 |
设置后台服务的自启动配置
命令 | 说明 |
---|---|
systemctl list-units *.service | 查看服务运行状态 |
systemctl list-unit-files --type=service | 查询所有服务的开机状态 |
systemctl enable 服务名 | 设置某个服务开机自启动 |
systemctl disable 服务名 | 设置某个服务器开机不自动启动 |
systemctl is-enabled 服务名 | 查询指定服务器开机启动状态 |
systemctl list-unit-files 服务名.service | 查询指定服务器开机启动状态 |
hostname 查看当前计算机名
hostnamectl set-hostname 新名字
永久修改计算机名字 需要用bash刷新
hostname 名字
临时修改计算机名字,重启就失效
systemctl start network 启动网络服务
systemctl restart network 重启网络服务
systemctl stop network 关闭网络服务
systemctl status network 查看网络服务状态
systemctl start firewalld 启动防火墙
systemctl restart firewalld 重启防火墙
systemctl stop firewalld 关闭防火墙
systemctl status firewalld 查看防火墙状态
systemctl enable firewalld 让防火墙开机自启动
systemctl disable firewalld 禁止防火墙开机启动
网卡配置文件目录 cd /etc/sysconfig/network-scripts/ (配置文件目录/系统配置/网络脚本/)ifcfg- 网卡属性ONBOOT
linux系统的本地域名映射文件:/etc/hosts
netstat 参数
查看端口号 参数 -n (number)显示程序ip地址和端口号 -t (tcp)只显示tcp协议的程序 -u (ucp)只显示ucp协议的程序 -l (listener)显示监听中的socket -p (programs)显示程序名字
ssh-keygen 生成ssh密钥文件
ssh-copy-id linux2 将ssh密钥发送给linux2
本地软件安装命令rpm
rpm 参数
参数 -v 显示安装详情 -q 软件名
(query) 查看指定软件是否安装 -a 查询所有软件名 -h 列出软件安装标记 -i 软件名
安装指定软件 -e 卸载软件 —nodeps 不验证软件的关联性 一般与-e一起使用 表示强制删除
rpm -qa 查询所有已安装的软件
rpm -vhi 软件包
安装指定的软件包
rpm -e —nodeps 软件 强制卸载指定软件
软件安装
jdk安装
- 切换到软件包目录 解压到/usr/loacl
tar -xvf jdk-9.0.4_linux-x64_bin.tar.gz -C /usr/local
- 配置linux的jdk环境变量,操作一个vim /etc/profile环境变量配置文件
#set java environment
JAVA_HOME=/usr/local/jdk-9.0.4
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
- 重载环境变量配置文件
source /etc/profile
mysql安装
- 在线获取CentOS7的mysql的rpm安装文件
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
- 执行安装命令
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
- 得到两个配置文件,进入/etc/yum.repos.d目录下查询
- 编辑mysql-community.repo文件,配置资源库下载版本选择 选择下载版本的enable=1
- 下载安装客户端、服务器端、工具包
yum -y install mysql-community-client mysql-community-server mysql-community-devel
- 启动mysql服务
systemctl start mysqld
- 将mysql加到系统服务中并设置开机启动
systemctl enable mysqld
- 登录mysql修改的密码
set password = password('密码
');
- 开启mysql的远程登录权限,默认情况下mysql为安全起见,不支持远程登录mysql,所以需要设置开启,并且刷新权限缓存。远程登录mysql的权限登录mysql后输入如下命令
grant all privileges on . to 'root'@'%' identified by '密码
';
flush privileges;
- 开放Linux的对外访问的端口3306 开放的端口永久保存到防火墙
firewall-cmd --zone=public --add-port=3306/tcp —permanent
- 重启防火墙
systemctl restart firewalld
tomcat安装
- 解压压缩包到/usr/local目录下
tar -xvf apache-tomcat-8.5.27.tar.gz -C /usr/local/
- 进入bin目录,启动tomcat服务器
./startup.sh
- 开发linux系统防火墙8080端口 重启防火墙
firewall-cmd --zone=public --add-port=8080/tcp --permanent
systemctl restart firewalld
用户组
useradd 参数
用户名
添加用户 -m 在/home目录下建立用户主目录,主目录名字就是用户名
组名 创建用户并且指定它所在的主组,如果没有指定组名,默认创建一个与用户同名的主组。创建好的用户信息保存在/etc/passwd文件中
passwd 用户名
修改密码 无参 修改自己的密码 有用户名参数 管理员可以修改其它用户的密码
su 用户账号
让用户暂时变更登入的身份。变更时须输入所要变更的帐号密码
userdel 参数 用户帐号
删除指定的用户 -r 同时删除用户的主目录
usermod 参数
新登录名
原登录名
修改原登录名为新登录名,但所在组名不变 -l 修改登录名
usermod 参数
组名
用户名
-g 修改用户所属的主组 -G 将用户放在一个或多个从组中(usermod -G 组1,组2 用户名haha)
groupadd 组名
添加一个新组 /etc/group文件,包含了所有创建组的信息
gpasswd -d 用户名 组名 从从组中删除用户
groupmod -n 新组名 原组名 将原组名修改为新组名
groupdel 组名 删除指定的组
权限 sudo
sudo 命令
使用授权的身份执行命令
设置用户权限
编辑/etc/sudoers文件,在root ALL=(ALL) ALL下复制一行(92行),将用户名改成Rose,因为是只读的文件,所以要强制保存退出 设置rose所有权限 Rose ALL=(ALL) ALL
Git命令
git init 设置当前目录为git版本库
git add 文件名.txt
将版本库目录中的文件添加到版本库(可以add多个文件后commit),实际上就是把文件修改添加到暂存区
git commit -m "本次提交说明"
把文件提交到仓库 -m 后面添加本次提交的说明信息,实际上就是把暂存区的所有内容提交到当前分支
git status 得到当前仓库的状态 比如文件是否修改 是否提交(add之前会输出修改过 但是还没有准备提交的修改,add之后提示添加或者修改的文件提示)
git diff 查看具体的文件修改(add之前能显示具体的修改 add之后没输出)
git log 查看历史操作记录
git log —oneline 单行历史记录
git log --pretty=oneline 详细的单行历史记录
git log --graph --pretty=oneline --abbrev-commit 查看历史
git reset —hard HEAD^ 回退到上一个版本 其中head是一个指针标识 上个版本是head^ 上上个版本是head^^以此类推 往上n个版本为head~n
git reset —hard HEAD~100 往上100个版本
git reset —hard commit id的开始的前几位
回退到指定commit id版本号的版本状态
git reflog 用来获取每一次命令(可以的到commit id)
git checkout — 文件名.txt
让这个文件回到最近一次git commit或git add时的状态。其实是用版本库里的版本替换工作区的版本
git reset HEAD 文件名.txt
让这个暂存区(add操作之后的文件区域)的修改撤销掉(回到add操作之前)
git rm 文件名.txt
将删除文件后的工作区间提交到暂存区(和add操作类似 只不过一个是添加一个是删除)
git push origin master 把本地master分支的最新修改推送至GitHub,当然也可以push其他分支 如origin dev分支
git clone git@github.com:MyLove6qd/remotegit.git 从github上克隆一个仓库到当前目录(也可以使用https协议).新克隆下来的代码默认master和origin/master是关联的(origin/dev分支在本地没有任何的关联)
git branch 分支名
创建分支
git checkout 分支名
切换到指定分支
git checkout -b 分支名
创建分支并切换到这个分支
git branch 查看当前所有分支
git merge 分支名
合并指定分支到当前分支
git branch -d 分支名
删除指定分支
git branch -D 分支名
强行删除指定分支
git log --graph 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit 产看分支合并图
git merge --no-ff -m "commit提交信息
" 分支名
禁用快进模式合并指定分支到当前分支
git stash 储藏当前工作现场,等以后恢复现场后继续工git stash list 查看当前分支上储藏的工作现场
git stash apply stash@{0}
恢复指定工作现场(不会删除 stash)
git stash drop stash@{0}
删除指定stash工作现场
git stash pop 恢复工作现场,并且删除stash
git remote 查看远程库信息
git remote -v 查看远程库详细信息
git checkout -b dev origin/dev 大概就是创建一个名字叫dev的本地分支 然后这个本地分支和远程库的origin/dev分支关联起来了(新克隆下来的代码默认master和origin/master是关联的,也就是他们的代码保持同步, 但是origin/dev分支在本地没有任何的关联)
git branch --set-upstream-to=origin/dev dev 指定本地dev分支与远程origin/dev分支链接(本地分支和远程分支的链接关系没有创建)
git branch -a 查看所有分支(本地的和远程库的)
git push origin dev push到远程dev分支
git push origin dev:dev 发布本地dev分支 同步本地dev分支的代码到远程origin/dev分支(本地dev和origin/dev是没有确定联系的时候可以用这个方法)
git pull 把最新的提交从关联的远程分支上拔下来
git rebase 变基rebase操作可以把本地未push的分叉提交历史整理成直线这个解释的更容易理解
git tag 标签名
打标签(默认标签是打在最新提交的commit上的)
git tag 查看所有标签
git tag 标签名
commit id
在指定commit id 提交上打标签 还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
git show 标签名
查看标签信息
git tag -d 标签名 删除指定标签
git push origin 标签名
将指定标签推送到远程
git push origin —tags 推送所本地标签到远程
git push origin :refs/tags/ 标签名
删除远程标签 需要先删除本地标签 然后在push删除远程标签