分类: Linux

curl与wget高级用法

curl(文件传输工具)

常用参数如下:

-c,–cookie-jar:将cookie写入到文件
-b,–cookie:从文件中读取cookie
-C,–continue-at:断点续传
-d,–data:http post方式传送数据
-D,–dump-header:把header信息写入到文件
-F,–from:模拟http表达提交数据
-s,–slient:减少输出信息
-o,–output:将信息输出到文件
-O,–remote-name:按照服务器上的文件名,存在本地
–l,–head:仅返回头部信息
-u,–user[user:pass]:设置http认证用户和密码
-T,–upload-file:上传文件
-e,–referer:指定引用地址
-x,–proxy:指定代理服务器地址和端口
-w,–write-out:输出指定格式内容
–retry:重试次数
–connect-timeout:指定尝试连接的最大时间/s

使用示例:

例1:抓取页面到指定文件,如果有乱码可以使用iconv转码

curl -o baidu.html www.baidu.com
curl –s –o baidu.html www.baidu.com |iconv -f utf-8 #减少输出信息

例2:模拟浏览器头(user-agent)

 curl -A “Mozilla/4.0 (compatible;MSIE 6.0; <a href="http://www.ttlsa.com/windows/" title="windows"target="_blank">Windows</a> NT 5.0)” www.baidu.com

例3:处理重定向页面

curl –L http://192.168.1.100/301.<a href="http://www.ttlsa.com/php/" title="php"target="_blank">php</a> #默认curl是不处理重定向

例4:模拟用户登陆,保存cookie信息到cookies.txt文件,再使用cookie登陆

curl -c ./cookies.txt -F NAME=user -F PWD=***URL #NAME和PWD是表单属性不同,每个网站基本都不同
curl -b ./cookies.txt –o URL

例5:获取HTTP响应头headers

curl -I http://www.baidu.com
curl -D ./header.txt http://www.baidu.com #将headers保存到文件中

例6:访问HTTP认证页面

curl –u user:pass URL

例7:通过ftp上传和下载文件

curl -T filename ftp://user:pass@ip/docs #上传
curl -O ftp://user:pass@ip/filename #下载

wget(文件下载工具)

常用参数如下:

2.1 启动参数

-V,–version:显示版本号
-h,–help:查看帮助
-b,–background:启动后转入后台执行
2.2 日志记录和输入文件参数
-o,–output-file=file:把记录写到file文件中
-a,–append-output=file:把记录追加到file文件中
-i,–input-file=file:从file读取url来下载
2.3 下载参数

-bind-address=address:指定本地使用地址
-t,-tries=number:设置最大尝试连接次数
-c,-continue:接着下载没有下载完的文件
-O,-output-document=file:将下载内容写入到file文件中
-spider:不下载文件
-T,-timeout=sec:设置响应超时时间
-w,-wait=sec:两次尝试之间间隔时间
–limit-rate=rate:限制下载速率
-progress=type:设置进度条
2.4 目录参数

-P,-directory-prefix=prefix:将文件保存到指定目录
2.5 HTTP参数
-http-user=user:设置http用户名
-http-passwd=pass:设置http密码
-U,–user-agent=agent:伪装代理
-no-http-keep-alive:关闭http活动链接,变成永久链接
-cookies=off:不使用cookies
-load-cookies=file:在开始会话前从file文件加载cookies
-save-cookies=file:在会话结束将cookies保存到file文件
2.6 FTP参数

-passive-ftp:默认值,使用被动模式
-active-ftp:使用主动模式
2.7 递归下载排除参数

-A,–accept=list:分号分割被下载扩展名的列表
-R,–reject=list:分号分割不被下载扩展名的列表
-D,–domains=list:分号分割被下载域的列表
–exclude-domains=list:分号分割不被下载域的列表

使用示例:

例1:下载单个文件到当前目录下,也可以-P指定下载目录

 wget http://nginx.org/download/nginx-1.8.0.tar.gz

例2:对于网络不稳定的用户可以使用-c和–tries参数,保证下载完成

wget –tries=20 -c http://nginx.org/download/nginx-1.8.0.tar.gz

例3:下载大的文件时,我们可以放到后台去下载,这时会生成wget-log文件来保存下载进度

wget -b http://nginx.org/download/nginx-1.8.0.tar.gz

例4:可以利用—spider参数判断网址是否有效

wget –spider http://nginx.org/download/nginx-1.8.0.tar.gz

例5:自动从多个链接下载文件

cat url_list.txt #先创建一个URL文件
http://nginx.org/download/nginx-1.8.0.tar.gz
http://nginx.org/download/nginx-1.6.3.tar.gz
wget -i url_list.txt

例6:限制下载速度

wget –limit-rate=1m http://nginx.org/download/nginx-1.8.0.tar.gz

例7:登陆ftp下载文件

wget –ftp-user=user –ftp-password=pass ftp://ip/filenam

Git 学习笔记

集中式版本控制

svn

分布式版本控制

git

在现有目录中初始化仓库

如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入

git init

设置全局账号

git config --global user.name "chaodada"
git config --global user.email "2167162990@qq.com"

新建文件夹 demo
初始项目

git init

建立局部管理账号

git config  user.email “18063442990@163.com"
git config  user.name “liujianchao”

假如在git 文件夹设置的全局账号
在git文件夹创建demo文件夹
如果不对demo 进行设置账号 那在提交的时候将会用全局账号

查看全局账号

git config --global user.name
git config --global user.email

查看局部账号

git config  user.name
git config  user.email

创建新仓库

在文件夹中直接初始化

git init

这就是一个新仓库

管理旧仓库

注意一定不要在已经初始化的仓库进行克隆 应当用一个不是仓库的文件夹 并且克隆的时候 会自动创建别人项目的文件夹
直接克隆别人的仓库

git clone https://github.com/jindasong/lazyload.git

查看当前项目的状态

git status 

放到小推车

如果有新文件 可以反复执行
git add 文件名

一次 add 多个文件的方法 多个文件用 空格 隔开
git add file_1 file_2 file_3

或者直接 add . 将全部对的文件都加入
add . 的时候 会导致全部文件添加到小推车 如果想排除一些文件 可以创建 .gitignore 文件 定义排除项目

比如排除所有jpg
*.jpg

另外比如排除所有jpg 除了a.jpg
*.jpg
!a.jpg

忽略文件夹
/demo-1
忽略某个文件夹下的某个文件
/demo-1/index.php
或者某个文件夹下的某个类型的文件
/demo-1/*.php
限制某个文件夹 以及子文件夹的某个类型的文件
/demo-1/**/*.php
提交文件夹的方法
git add 文件夹名

新文件

创建一个新文件
假如还没写完就放到运输车了 想取消 第一次可以这样取消在运输车

git rm --cached   文件

保存一份到仓库
然后 假如文件做了改动 放到了运输车后悔了 想取消放到运输车

git reset HEAD  文件名

这时候是改动完了的文件 只是没夹到运输车

此时想改回之前的版本

 git checkout  文件名

这时候就回到改动之前的版本 ( 也就是第一次保存到仓库的文件)
退回任意版本

git reset --hard 5a24fa9db2354c8d9251d9575e4abbf1f9441985

修改版本库文件的名字

git mv   现在的名字    新名字

提交到仓库

git commit -m '测试学习第一次提交'

修改描述

日志并不会添加一个新的 只会修改原来的

git commit  —-amend

删除

大多数情况下 删除版本库的文件 本地也会删除

git  rm  a.txt

只删除版本库中的 本地不会删除

git rm —cached  a.txt  

查看提交记录

git  log

查看最近一次提交记录

git  log -1

两次

git log -2

查看记录之间的文件变动信息

git log -p
--oneline     这个参数可以省略一些没用的信息
# 一般这样用
 git log -p -1 --oneline      查询最近一次的提交记录

想看那些文件发生了变化

git log --name-only

配置 GIt 别名

使用
git config –global alias
比如 我想用 st 代表 status,name我们可以这样设置。

git config --global alias.st status

以后只需要输入git st,即可查看当前 git 仓库的状态
或者在配置文件配置
mac 在用户的根目录 ls -a

默认分支 master 稳定版

创建新的分支

git branch 分支名

将当前指针 切换到 其他分支

git checkout  分支名

创建分支并切换

 git checkout  -b 分支名

合并分支 注意应当是 切换到 master 之后 在执行合并分支

git merge 分支名

合并分支 提示 分支冲突 那就进入这个文件 自己选择 要哪些 直接保存 然后重新提交
显示出 没有 与主分支 合并的分支

git branch --no-merged

显示出 已经合并到 主分支的 分支 (包含主分支)

git branch --merged

删除分支

删除本地分支:
git branch -d  分支名
删除未合并的分支
git branch -D 分支名
// 方法一:将删除的本地分支推到远程(要删除的远程分支在本地有映射)
git push origin :branchName
// 方法二:直接删除远程分支(要删除的远程分支不在本地)
git push origin --delete branchName

查看本地分支

git branch

查看本地及远程所有分支:

git branch -a 或 git branch --all

当你在一个分支 仓库中写了东西 然后 add 放到的小车中 但是这时候 想要 切换其他的分支 只时候直接切换时 切换不出去的
因为 文件没有提交 但是文件现在没写完 提交不太合理
这时候用 文件暂存
文件暂存命令

git stash  save“暂存名子 自定义 方便多个暂存区分”

查看暂存列表

git stash list

列表内容 stash@{0} 是暂存标识

stash@{0}: WIP on index: 343dffc index分支第一次提交

恢复暂存区 恢复之后暂存还是存在 需要自己删除

git stash apply  暂存标识

删除暂存区

git stash drop  暂存标识

显示最新一次的暂存

git show stash@{0}

应用最新的暂存状态 并且删除暂存

git stash pop

tag 标签

类似于版本号 v1.0 v2.0 v3.0
查看标签列表

git  tag

添加标签

git tag v1.0

git 打包项目

win

git archive master --prefix=‘压缩包内部文件夹名字’ --forma=zip>压缩包名字.zip

mac

git archive master  --forma=zip>压缩包名字.zip

打包所有文件
打包master分支的所有文件:

 git archive --format=zip --output master.zip master

其中,输出格式为zip,输出文件为master.zip。git支持zip和tar两种输出格式。
打包当前分支当前HEAD的所有文件:

git archive --format=zip --output head.zip HEAD

打包v1.2标签的所有文件:

git archive --format=zip --output v1.2.zip v1.2

打包更改的文件
打包更改文件的原理是:
git diff 找出文件列表;
用打包命令打包。
也就是说,只要能用找出文件列表,就可以git打包出来。
打包最后修改的文件
先通过git diff找到最新版本修改过的文件,再压缩打包这些文件:

git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD^)

打包最后两个版本修改的文件
总共也是2个版本:
git archive --format=zip -o update.zip HEAD $(git diff --name-only HEAD~2)
打包两个分支之间差别的文件

git archive --format=zip -o update.zip HEAD $(git diff --name-only master fix-error)

如上,打包master和fix-error分支差异的文件。

问题说明

假如在11:00 创建主分支 11:10创建 index 分支 index 分支会带着这十分钟之内处理过的 主分支记录
index分支 一直操作到 11:20
在同时主分支也在操作
这时候我想要合并分支 应当 先进入index分支 执行

  git rebase master

为什么要这样做呢 因为 拿11.10 之前的 记录创建了index 然后 在这个基础上修改了index
然后在11:10 到11:20 也没闲着
这时候 合并分支 就会产生冲突 解决办法就是进入 index分支 将起点变成主分支的最新点 然后再 进行合并
这样就能解决
合并产生新的 master
合并操作会有 master管理员 来操作
如果档主分支 master 在一次保存中 创建了一个新分支 然后主分支 有不断的 进行更新
合并产生新的 master
合并操作会有 master管理员 来操作
rebase 改变子分支的基础点 就可以解决这个问题

链接github

远程连接法

第一设置key
第二github 创建项目  
第三获取项目ssh  git@github.com:chaodada/demo.git
第四本地克隆项目   git clone git@github.com:chaodada/demo.git
最后
git push 

本地连接法

在本地创建项目
然后链接
 git remote add origin git@github.com:chaodada/demo2.git

查看是否连接
git remote -v

将本地对的 推送到远程
git push -u origin master

查看所有分支 包含远程分支

git branch -a

本地创建完分支 推送到远程 让远程也创建分支

 git push --set-upstream origin index

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可:

git push origin v1.5

如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项:

git push origin --tags

克隆分支之后 请求 将指定分支克隆到本地

git pull origin 分支:分支

远程分支合并 大概意思就是 本地合并完成 然后推送到 远程分支
建议本地合并时候 先git pull master将本地主分支 更新到最新 然后将其他分支进行 git rebase master 然后执行合并操作 然后推送到云端

删除远程分支 本地分支不会删除

git push origin --delete index

Linux基础操作学习记录

切换root

以下步骤为 普通用户切换 root 然后从 root 切换回 普通用户 的流程
普通用户---->su - ---->输入root密码---->root用户---->exit
还有其他方法 待补充

文件权限解释

drwxrwxrwx.  2 liujianchao liujianchao    6 5月  29 16:16 demo
第一栏代表权限(这一栏10个字符)
  • 第一个字符代表这个文件是“目录、文件或链接文件等等”:

    • 当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
    • 当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
    • 若是[ l ]则表示为链接文件(link file);
    • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
    • 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
  • 接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可 执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

    • 第一组为“文件拥有者可具备的权限”;
    • 第二组为“加入此群组之帐号的权限”;
    • 第三组为“非本人且没有加入本群组之其他帐号的权限”。
权限说明

对文件来讲,权限的性能为:

  • r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x:该文件具有可以被系统执行的权限。

对目录来说,权限的性能为:

  • r (读取目录中的内容)
  • w (修改目录内容)
  • x (访问目录)
第三栏代表 文件(或目录)的“拥有者帐号”
第四栏代表 文件(或目录)所属群组
第七栏代表 文件(或目录)名

查看文件是否存在

whereis 文件名

还有其他方法 待补充

修改文件所属组

请记得,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!

chgrp  组名 文件

修改文件拥有者

注意的是, 使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变

chown 帐号名称 文件或目录
# chown的用途还满多的,他还可以顺便直接修改群组的名称呢!
chown 帐号名称:群组名称 文件或目录
# 此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话, 直接加上 -R 的选项 
chown -R 帐号名称 文件或目录
chown -R 帐号名称:群组名称 文件或目录

修改文件权限

数字类型改变文件权限

linux 基本权限 就有九个,分别是三种身份的 可读,可写,可执行。如以下权限:

-rwxrwxrwx 
r 代表 4
w 代表 2
x 代表 1
chmod 权限数字 文件
chmod 777 文件

这下理解 777 的含义了吧

符号类型改变文件权限

用字母 u,g,o代表三种身份,另外,字母a 代表全部身份

# 给u 全部全县 给g o  读 执行权限
chmod u=rwx,go=rx 文件 
# 给全部人 可读 可写 可执行 权限
chmod a=rwx 文件 
# 拿掉全部人的 可写权限
chmod a-w 文件

文件操作

cd - 切换到上一个目录
cd ~ 切换到当前用户目录
cd ~account 去指定用户目录 account指用户名
cd 只输入cd直接进入当前用户的目录
cd 变换目录
pwd 显示当前所在目录 (如果在链接目录中)加参数 P 显示出真实路径
mkdir 创建文件夹 -m 设置权限 -p 创建层目录
rmdir 删除一个空文件夹  加-p参数 rmdir -p test/test1/test2/test3/test4 可以递归删除目录
1 2 3