0%

Git 的完整性

  • Git 中所有数据在存储前都计算校验和,然后以校验和来引用。这个功能建构在 Git 底层。
  • Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。
    例如: 24b9da6552252987aa493b52f8696cd6d3b00373
  • Git 数据库中保存的信息都是以文件内容的哈希值来索引

Git 一般只添加数据

你执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。

Git 有三种状态

  • committed:已提交表示数据已经安全的保存在本地数据库中
  • modified:已修改表示修改了文件,但还没保存到数据库中
  • staged:已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

Git项目的三个工作区域

  • 工作目录:工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区域:暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
  • Git 仓库:Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

初次运行 Git 前的配置

Git 自带一个 git config的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  2. ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
  3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
    每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
    在 Windows 系统中,Git 会查找 HOME目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
配置文件所在路径

一句话总结:local的在.git/config里面;global的在个人home目录下的.gitconfig里面;system应该在git安装目录的下

用户信息

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中:

添加配置
1
2
git config [--local | --global | --system] user.name 'Your name'(Win系统下双引号而不是单引号)
git config [--local | --global | --system] user.email 'Your email'(Win系统下双引号而不是单引号)
查看配置
1
git config --list [--local | --global | --system]
参数区别
1
2
3
git config --local ##只对某个仓库有效,切换到另外一个仓库失效
git config --global ##当前用户的所有仓库有效,工作当中最常用
git config --sysstem ##系统的所有用户,几乎不用

这个三个级别的优先级:local > global > system

何为递归?

  1. 递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。
  2. 方法或函数调用自身的方式称为递归调用,调用的过程叫“递”,返回的过程叫“归”。

为什么使用递归?递归的优缺点?

  • 优点:代码简洁,易于理解。(如在树的前/中/后序遍历中,递归的实现明显比循环简单。)
  • 缺点:时间和空间的消耗较大,存在重复计算,有堆栈溢出风险。

递归需要满足的三个条件

一个问题只要同时满足以下3个条件,就可以用递归来解决:

  1. 一个问题的解可以分解为几个子问题的解
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
  3. 存在递归终止条件

如何编写递归代码?

写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。

  1. 先把递归终止条件和递推公式放到一起
    1
    2
    3
    f(1) = 1;
    f(2) = 2;
    f(n) = f(n-1)+f(n-2)
  2. 再转化成递归代码
    1
    2
    3
    4
    5
    int f(int n) {
    if (n == 1) return 1;
    if (n == 2) return 2;
    return f(n-1) + f(n-2);
    }

如何理解递归代码

对于递归代码,如果试图想清楚整个递和归过程的做法,实际上是进入了一个思维误区。很多时候,我们理解起来比较吃力,主要原因就是自己给自己制造了这种理解障碍。那正确的思维方式应该是怎样的呢?

如果一个问题 A 可以分解为若干子问题 B、C、D,你可以假设子问题 B、C、D 已经解决,在此基础上思考如何解决问题 A。而且,你只需要思考问题 A 与子问题 B、C、D 两层之间的关系即可,不需要一层一层往下思考子问题与子子问题,子子问题与子子子问题之间的关系。屏蔽掉递归细节,这样子理解起来就简单多了。

因此,只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。

递归常见问题

堆栈溢出

函数调用会使用栈来保存临时变量。每调用一个函数,都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回时,才出栈。系统栈或者虚拟机栈空间一般都不大。如果递归求解的数据规模很大,调用层次很深,一直压入栈,就会有堆栈溢出的风险。

解决方案:
可以通过在代码中限制递归调用的最大深度,超过直接返回报错。伪代码举例如下:

1
2
3
4
5
6
7
8
9
10
11
// 该例子只适用于一个f分解为一个f
// 全局变量,表示递归的深度。
int depth = 0;

int f(int n) {
++depth;
if (depth > 1000) throw exception;

if (n == 1) return 1;
return f(n-1) + 1;
}

但这种做法并不能完全解决问题,因为最大允许的递归深度跟当前线程剩余的栈空间大小有关,事先无法计算。如果实时计算,代码过于复杂,就会影响代码的可读性。

重复计算

为了避免重复计算,我们可以通过一个数据结构(比如散列表)来保存已经求解过的 f(k)。当递归调用到 f(k) 时,先看下是否已经求解过了。如果是,则直接从散列表中取值返回,不需要重复计算。

小结

  • 递归是一种非常高效、简洁的编码技巧。只要是满足“三个条件”的问题就可以通过递归代码来解决。
  • 不过递归代码也比较难写、难理解。编写递归代码的关键就是不要把自己绕进去,正确姿势是写出递推公式,找出终止条件,然后再翻译成递归代码。
  • 递归代码虽然简洁高效,但是,递归代码也有很多弊端。比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等,所以,在编写递归代码的时候,一定要控制好这些副作用。

如何调试递归代码呢?

  1. 打印日志发现,递归值。
  2. 结合条件断点进行调试。

调试递归就像写递归一样,不要被每一步的细节所困,重点在于确认递推关系与结束条件是否正确,用条件断点着重调试最初两步与最终两步即可。

记于: 2020/03/15 15:30:00

代理设置

Surge iOS

  1. Surge 出站模式选择规则模式或全局代理即可

    • 首页—>高级设置—>允许Wi-Fi访问
  2. 设置 SOCKS5 代理(据说刷图会快一些)

    • 打开 Telegram
    • 设置—>数据和存储—>代理—>使用代理—> SOCKS5
    • 连接信息:服务器:127.0.0.1(或0.0.0.0localhost),端口:6153

点击设置

Surge Mac

  1. 开启增强模式

  2. 设置SOCKS5代理

    • 打开Surge for Mac:设置—>通用—>代理服务—>允许远程访问—>高级代理服务设置,查看SOCKS5监听端口(默认为6153)

    • 打开Telegram,设置SOCKS5代理:服务器:127.0.0.1(或0.0.0.0localhost),端口:6153(如果有自定义端口,填写为上步查看到的端口)

6153端口
8889端口


代理规则

Surge 3 Mac (Surge 3.4 for iOS)

1
2
3
[Rule]
# Telegram
RULE-SET,https://raw.githubusercontent.com/ydzydzydz/Rules/master/special/telegram.list,PROXY

Surge 2 Mac (Surge 3/2 for iOS)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Rule]
# Telegram
IP-CIDR,67.198.55.0/24,PROXY,no-resolve
IP-CIDR,91.108.4.0/22,PROXY,no-resolve
IP-CIDR,91.108.8.0/22,PROXY,no-resolve
IP-CIDR,91.108.12.0/22,PROXY,no-resolve
IP-CIDR,91.108.16.0/22,PROXY,no-resolve
IP-CIDR,91.108.56.0/22,PROXY,no-resolve
IP-CIDR,109.239.140.0/24,PROXY,no-resolve
IP-CIDR,149.154.160.0/20,PROXY,no-resolve
IP-CIDR,149.154.164.0/22,PROXY,no-resolve
IP-CIDR,149.154.168.0/22,PROXY,no-resolve
IP-CIDR,149.154.172.0/22,PROXY,no-resolve
IP-CIDR,205.172.60.0/22,PROXY,no-resolve

引用:壮壮博客 https://zhuangzhuang.cf/2019-01-11/surgesocks5/

准备工具

iTunes
Fiddler
旧版app版本号对应的数字

开始操作

  1. 先打开 iTunes 登录苹果的账号

  2. 然后打开 Fiddler 菜单项Tools->Options->HTTPS,勾选CaptureHTTPS CONNECTsDecrypt HTTPS trafficCheck for certificate revocation,点击OK。(首次点击会弹出*是否信任 Fiddler 证书和安全提示,全部点击 yes *就行;如果当你按完 yes 后并没有弹出证书安装,那么点右边齿轮Actions进行安装,或者点击重置)

  3. 在 Fiddler 软件左下角的黑色输入栏粘贴并且回车确定

    1
    bpu MZBuy.woa
  4. 在 iTunes 的 app store 搜索需要下载的app,这样你会发现,无法完成下载。

  5. 点开 Fiddler,找到左边列表中的红灯感叹号的一行,点击它。你会看到点击后右边出现很多选项标签选择textview,在textview下方有很多代码信息找到其中最关键的对应每个软件版本的一连串数字。

    1
    <string>828031930</string>
  6. 将这个数字替换成你需要下载的版本号对应的数字,点击下面中间这个绿色的按钮Run to Completion,然后回到 iTunes 你会发现下载又开始了。这个正在下载的就是旧版app

  7. 下载完成后到 iTunes 资料库右键在文件中显示,找到 ipa 安装包。

去除更新小红点和通知

首先我们将软件的 ipa 安装包改名(加上.zip后缀),点击进去(不要解压缩)将 plist 那个文件夹删掉,退出来,改回名字,使用 imazing 或者其他的NNNNN多工具安装上手机

安装ipa到手机

打开 iMazing,->管理应用程序,->设备,->右下角向下箭头,->安装 .IPA 文件,Waiting ······,Done.

Ctrl+(x u) 按住Ctrl的同时再先后按x和u,可以撤销刚才的操作

1. 检查网络的服务

==systemctl status NetworkManager.service==

2. 检查网络的连接

nmcli dev status

3. 配置CentOS地址的方式

1. DHCP动态获得

dhclient
ip addr

2. 手动配置

ip addr add 192.168.10.2/24 dev ens32
ens32手动查看 ipconfig

如果重启系统或者重启服务,网卡的IP地址和掩码都会丢失
重启系统:reboot
重启服务:service network restart 重启网络服务

远程管理:

  1. Telnet:明文 23
  2. SSH:SSHv1和SSHv2,密文 22

SecureCRT 8.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost /]# cd ..
[root@localhost /]# cat etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp //网卡获得地址的方式
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=a185b3b4-e52f-40b5-81ac-f16f7d228980
DEVICE=ens32
ONBOOT=no //系统开机的时候是否开启网卡
[root@localhost /]#

修改:

  1. vi
  2. vim

[root@localhost /]# vim etc/sysconfig/network-scripts/ifcfg-ens32

按i键开启插入功能
修改和增加
修改:BOOTPROTO=static
修改:ONBOOT=yes

增加:IPADDR=192.168.75(本机网络地址).128
增加:NETMASK=255.255.255.0
增加:GATEWAY=192.168.75.2
增加:DNS1=192.168.75.1

按ESC退出,再按Shift+:,输入wq(强制保存)也可以wq!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost /]# cat etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=a185b3b4-e52f-40b5-81ac-f16f7d228980
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.75.128
NETMASK=255.255.255.0
GATEWAY=192.168.75.2
DNS1=192.168.75.1
[root@localhost /]#

重启网络服务:

1
2
3
4
5
[root@localhost /]# service network restart 
Restarting network (via systemctl): [ ok ]
[root@localhost /]#

[root@localhost /]# reboot

CentOS图形化安装或图形化界面:最小内存628M

4. Linux常用命令:

  1. 文件处理命令

  2. 权限管理命令
    w:写
    r:读
    x:执行

  3. 文件搜索命令

  4. 帮助命令

  5. 用户管理命令

  6. 压缩解压命令
    window:zip
    Cisco IOS:tar

winRaR,7-ZIP,WIN-ZIP

  1. 网络命令

  2. 关机重启命令

Linux 命令格式
格式:命令[-选项][参数]
举例:ls -a/etc a就是all
ls -l/etc l就是long
ls -al/etc
-:代表是简写的命令
–:代表是完整的命令 ls –all
注意:

  1. 除个别命令外,几乎所有命令都遵循这种格式
  2. 当有多个选项时,可以写在一起,也可以分开写
  3. 简化选项和完整选项,简化是-a,完整是–all

1. 目录处理命令 - ls

命令名称: ls
英文原意:list
所在路径:/bin/ls
执行权限:所有用户
功能描述:显示当前目录文件

[root@localhost /]# ls /bin

蓝色:表示目录
青色(或者浅蓝色):表示链接
/bin—–>usr/bin
黑色(或者是灰色):表示文件
红色:表示压缩文件
黄色:表示设备文件
/
命令语法:ls [-aAdfFhilnrRSt][目录或者文件]
常用选项:-a -l -h

w:写入
r:可读
x:执行
所有者
所属组
其他人

1
2
3
4
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost /]# ls /root
anaconda-ks.cfg

[root@localhost /]# ls /sbin

1
2
3
[root@localhost /]# ls -a /root
. anaconda-ks.cfg .bash_logout .bashrc .config .tcshrc
.. .bash_history .bash_profile .cache .cshrc .viminfo
1
2
3
[root@localhost /]# ls -l /root
总用量 4
-rw-------. 1 root root 1291 3月 14 11:18 anaconda-ks.cfg
1
2
3
[root@localhost /]# ls -lh /root
总用量 4.0K
-rw-------. 1 root root 1.3K 3月 14 11:18 anaconda-ks.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost /]# ls -alh /root
总用量 32K
dr-xr-x---. 4 root root 180 3月 14 12:01 .
dr-xr-xr-x. 17 root root 224 3月 14 11:17 ..
-rw-------. 1 root root 1.3K 3月 14 11:18 anaconda-ks.cfg
-rw-------. 1 root root 275 3月 14 12:01 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwxr-xr-x. 3 root root 18 3月 14 11:21 .cache
drwxr-xr-x. 3 root root 18 3月 14 11:21 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 911 3月 14 12:01 .viminfo
1
2
3
4
[root@localhost /]# ls --all
. bin dev home lib64 mnt proc run srv tmp var
.. boot etc lib media opt root sbin sys usr
[root@localhost /]#
1
2
3
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost /]#
  1. /
    根目录,区别于/root目录,也就是/和~的区别
    只有root用户具有根目录的写入权限
    根目录,管理员权限才可以创建,建议不要在根目录下创建太多文件

  2. /bin
    用户二进制文件,包含二进制可执行文件,这个目录下的执行文件基本所有用户都有权限执行
    路径:usr/bin

  3. /sbin
    系统二进制文件,系统管理员可以使用和维护:ifconfig\fdisk\

  4. /etc
    配置文件,也包含了程序的启动和关闭的Shell脚本

  5. /dev:设备文件

  6. /proc:进程信息

  7. /var:变量文件
    /var/log:系统日志文件
    /var/lib:包和数据库文件
    /var/mail:电子邮件
    /var/spool:打印队列
    /var/lock:锁文件
    /var/tmp:重启使用的临时文件

  8. /tmp:临时文件,系统和用户临时创建的文件

  9. /usr:二进制文件,库文件,文档,源代码

  10. /home:用户存储个人档案的地方

  11. /boot:引导加载程序文件
    initrd
    vmlinux
    grub

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@localhost /]# cd /bin
    [root@localhost bin]# yum install tree
    [root@localhost bin]# tree
    [root@localhost ~]#cd /boot
    [root@localhost boot]# ls -1
    [root@localhost boot]# ls -1/boot
    [root@localhost boot]# ll
    [root@localhost boot]# alias
    [root@localhost /]# ls --version
    [root@localhost /]# ls --help
  12. /lib:系统库

  13. /opt:可选的附加应用程序,第三方的应用可以

  14. /mnt:挂在目录

  15. /media:移动设备的临时目录

  16. /srv:服务数据

    1
    2
    [root@localhost ~]# service network restart 
    Restarting network (via systemctl): [ ok ]

    [root@localhost ~]# systemctl restart network.service

2. 目录处理命令 - mkdir

  1. ls
  2. cd
  3. mkdir
    命令名称:mkdir
    命令原意:make directories
    所在路径:/bin/mkdir
    执行权限:所有用户
    功能描述:创建新目录
    命令语法:mkdir [-p] [目录名]

-p:递归创建,新建一个目录的同时,并且在这个文件夹内再创建一个子目录
[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir ABC
[root@localhost tmp]# mkdir DEF GHI
[root@localhost tmp]# ll

mkdir -p/tmp/ABC/DEF
ABC:新目录
DEF:新目录
递归创建:在新目录下再创建新目录

rmdir:删除空目录
rm:删除目录或者文件

1
2
3
4
5
6
[root@localhost tmp]# mkdir {AAA,BBB,CCC}
//相当于
[root@localhost tmp]# mkdir -m=x KKKK
[root@localhost tmp]# mkdir -m=r KKKKK
[root@localhost tmp]# mkdir -m=rx KKKKK
//修改权限

1.可以看到创建过程

1
2
3
4
[root@localhost tmp]# mkdir -vp TEST2/HHHHH
mkdir: 已创建目录 "TEST2"
mkdir: 已创建目录 "TEST2/HHHHH"
[root@localhost tmp]#

目录处理命令 - cd
cd: charge directory

所有路径:shell内置命令

Shell脚本

C语言,用户和Linux一个桥梁

  1. 命令语言
  2. 程序语言

Windows Explorer:Windows资源管理器,图形化的Shell

JAVA、PHP

文本编辑器或者执行脚本解释器:

  1. Bourne Shell /usr/bin/sh或者/bin/sh
  2. Bourne Again Shell /bin/bash Linux默认的Shell,广泛使用,易用,免费
  3. C Shell /usr/bin/csh
  4. K Shell /usr/bin/ksh
  5. Shell for ROOT /sbin/sh
    。。。。。。

扩展名:

  1. shell:.sh
  2. PHP:.php

[root@localhost ~]# vim /tmp/test.sh
按i,进入插入模式,输入以下内容:
#!/bin/bash
echo “Hello World !”
按ESC从编辑模式退到命令模式
按Shift+:,输入wq或者wq!

2. 运行脚本的方式

  1. 作为执行程序运行
    1
    2
    3
    4
    5
    6
    7
    [root@localhost ~]# ls -l /tmp
    总用量 8
    -rwx------. 1 root root 836 3月 28 09:21 ks-script-oSo132
    drwx------. 3 root root 17 3月 28 09:22 systemd-private-ba6aa69f557f4ee7ad7fd66ecd066de3-vgauthd.service-y0jIpM
    drwx------. 3 root root 17 3月 28 09:22 systemd-private-ba6aa69f557f4ee7ad7fd66ecd066de3-vmtoolsd.service-iIGRHr
    -rw-r--r--. 1 root root 33 3月 28 10:03 test.sh
    -rw-------. 1 root root 0 3月 28 09:06 yum.log
    [root@localhost ~]# cd /tmp

[root@localhost tmp]# chmod +x ./test.sh

1
2
3
4
5
6
7
8
[root@localhost tmp]# ll
总用量 8
-rwx------. 1 root root 836 3月 28 09:21 ks-script-oSo132
drwx------. 3 root root 17 3月 28 09:22 systemd-private-ba6aa69f557f4ee7ad7fd66ecd066de3-vgauthd.service-y0jIpM
drwx------. 3 root root 17 3月 28 09:22 systemd-private-ba6aa69f557f4ee7ad7fd66ecd066de3-vmtoolsd.service-iIGRHr
-rwxr-xr-x. 1 root root 33 3月 28 10:03 test.sh
-rw-------. 1 root root 0 3月 28 09:06 yum.log
[root@localhost tmp]#

[root@localhost tmp]# ./test.sh
Hello World !
[root@localhost tmp]#

  1. 作为解释器参数
    [root@localhost tmp]# /bin/sh test.sh
    Hello World !
    [root@localhost tmp]#

Linux关机
流程:sync()

3. 目录处理命令 - cp

命令名称:cp
命令原意:copy
命令路径:/usr/bin/cp
执行权限:所有用户
功能描述:复制文件或目录
命令语法:cp -rp [源文件或目录] [目标目录]
-r 复制目录,已经目录下的所有文件
-p 复制时保留原有文件的属性(时间戳、所属组、所有者、文件权限)

1. 拷贝单个文件

[root@localhost ~]# cp /etc/asound.conf /tmp

1
2
3
4
5
6
[root@localhost ~]# ll /tmp
总用量 4
-rw-r--r--. 1 root root 55 4月 8 14:10 asound.conf
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
[root@localhost ~]#

如果在拷贝文件的目录下的时候,是不需要加路径的:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# cd /etc
[root@localhost etc]# cp chrony.conf /tmp
[root@localhost etc]# ll /tmp
总用量 8
-rw-r--r--. 1 root root 55 4月 8 14:10 asound.conf
-rw-r--r--. 1 root root 1108 4月 8 14:11 chrony.conf
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
[root@localhost etc]#

同样也可以跟路径:
[root@localhost etc]# cp /etc/fprintd.conf /tmp

2. 拷贝多个文件

[root@localhost etc]# cp fuse.conf GeoIP.conf host.conf /tmp

1
2
3
4
5
6
7
8
9
10
11
[root@localhost etc]# ll /tmp
总用量 24
-rw-r--r--. 1 root root 55 4月 8 14:10 asound.conf
-rw-r--r--. 1 root root 1108 4月 8 14:11 chrony.conf
-rw-r--r--. 1 root root 20 4月 8 14:13 fprintd.conf
-rw-r--r--. 1 root root 38 4月 8 14:15 fuse.conf
-rw-r--r--. 1 root root 842 4月 8 14:15 GeoIP.conf
-rw-r--r--. 1 root root 9 4月 8 14:15 host.conf
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
[root@localhost etc]#

[root@localhost etc]# cp /etc/kdump.conf /etc/krb5.conf /etc/ld.so.conf /tmp

1
2
3
4
5
6
7
8
9
10
11
[root@localhost etc]# ll /tmp
总用量 40
-rw-r--r--. 1 root root 55 4月 8 14:10 asound.conf
-rw-r--r--. 1 root root 1108 4月 8 14:11 chrony.conf
-rw-r--r--. 1 root root 20 4月 8 14:13 fprintd.conf
-rw-r--r--. 1 root root 38 4月 8 14:15 fuse.conf
-rw-r--r--. 1 root root 842 4月 8 14:15 GeoIP.conf
-rw-r--r--. 1 root root 9 4月 8 14:15 host.conf
-rw-r--r--. 1 root root 7265 4月 8 14:17 kdump.conf
-rw-r--r--. 1 root root 590 4月 8 14:17 krb5.conf
-rw-r--r--. 1 root root 28 4月 8 14:17 ld.so.conf

3. 拷贝目录

[root@localhost etc]# cp /etc/sysconfig /tmp
cp: 略过目录”/etc/sysconfig”
[root@localhost etc]# cp -r /etc/sysconfig /tmp
[root@localhost etc]# ll /tmp

[root@localhost etc]# ll /etc/sysconfig/

[root@localhost etc]# ll /tmp/sysconfig/

不仅拷贝了子目录,而且包括了子目录下的所有内容

4. 参数 -p

[root@localhost etc]# cp man_db.conf /tmp

[root@localhost etc]# ls -l man_db.conf
-rw-r–r–. 1 root root 5171 6月 10 2014 man_db.conf
[root@localhost etc]# ls -l /tmp/man_db.conf
-rw-r–r–. 1 root root 5171 4月 8 14:39 /tmp/man_db.conf

[root@localhost etc]# cp -p mke2fs.conf /tmp
[root@localhost etc]# ll mke2fs.conf
-rw-r–r–. 1 root root 936 8月 3 2017 mke2fs.conf
[root@localhost etc]# ll /tmp/mke2fs.conf
-rw-r–r–. 1 root root 936 8月 3 2017 /tmp/mke2fs.conf

[root@localhost etc]# cp -rp abrt /tmp
[root@localhost etc]# ll abrt
总用量 12
-rw-r–r–. 1 root root 850 8月 10 2017 abrt-action-save-package-data.conf
-rw-r–r–. 1 root root 2118 8月 10 2017 abrt.conf
-rw-r–r–. 1 root root 31 8月 10 2017 gpg_keys.conf
drwxr-xr-x. 2 root root 95 4月 8 10:59 plugins
[root@localhost etc]# ll /tmp/abrt
总用量 12
-rw-r–r–. 1 root root 850 8月 10 2017 abrt-action-save-package-data.conf
-rw-r–r–. 1 root root 2118 8月 10 2017 abrt.conf
-rw-r–r–. 1 root root 31 8月 10 2017 gpg_keys.conf
drwxr-xr-x. 2 root root 95 4月 8 10:59 plugins
[root@localhost etc]#

5. 修改目标文件的名字

[root@localhost etc]# cp resolv.conf /tmp/abc.conf
[root@localhost etc]# ll /tmp
总用量 60
-rw-r–r–. 1 root root 54 4月 8 14:44 abc.conf
drwx——. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx——. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
[root@localhost etc]#

6. 拷贝重复文件

[root@localhost etc]# cp asound.conf /tmp
cp:是否覆盖”/tmp/asound.conf”? y
[root@localhost etc]# \cp asound.conf /tmp

[root@localhost etc]# \cp -r sysconfig /tmp

[root@localhost etc]# cp -r sysconfig /tmp
输入y,如果要中断,按ctrl+c

清屏:

  1. 输入clear
  2. 按ctrl+L
  3. ALT+E+K

4. 目录处理命令 - mv

命令名称:mv
命令原意:move
命令路径:/usr/bin/mv
执行权限:所有用户
功能描述:剪切文件、改名
命令语法:mv [源文件或目录] [目标目录]

1. 改名

[root@localhost etc]# cd /tmp
[root@localhost tmp]# ll

[root@localhost tmp]# mv asound.conf def.conf
[root@localhost tmp]# ll

2. 移动文件

[root@localhost tmp]# mkdir AAA
[root@localhost tmp]# mv def.conf AAA
[root@localhost tmp]# ll

[root@localhost tmp]# ll AAA
总用量 4
-rw-r–r–. 1 root root 55 4月 8 14:57 def.conf

3. 移动多个文件

[root@localhost tmp]# touch test1.log test2.log test3.log
[root@localhost tmp]# mv test1.log test2.log test3.log AAA
[root@localhost tmp]# ll AAA
总用量 4
-rw-r–r–. 1 root root 55 4月 8 14:57 def.conf
-rw-r–r–. 1 root root 0 4月 8 15:14 test1.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test2.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log

[root@localhost tmp]# mkdir BBB
[root@localhost tmp]# cd AAA
[root@localhost AAA]# mv -t /tmp/BBB test1.log test2.log test3.log
[root@localhost AAA]# ll
总用量 4
-rw-r–r–. 1 root root 55 4月 8 14:57 def.conf
[root@localhost AAA]# ll /tmp/BBB
总用量 0
-rw-r–r–. 1 root root 0 4月 8 15:14 test1.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test2.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log
[root@localhost AAA]#
//使用-t参数的时候,目标目录在前,源文件在后。正常时源文件在前,目标目录在后

4. 文件覆盖

[root@localhost AAA]# ll /tmp/BBB
总用量 0
-rw-r–r–. 1 root root 0 4月 8 15:14 test1.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test2.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log
[root@localhost AAA]# cd /tmp/BBB
[root@localhost BBB]# mv -i test1.log test2.log
mv:是否覆盖”test2.log”? y
[root@localhost BBB]# ll
总用量 0
-rw-r–r–. 1 root root 0 4月 8 15:14 test2.log
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log
[root@localhost BBB]#

[root@localhost BBB]# mv -f test2.log test3.log
[root@localhost BBB]# ll
总用量 0
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log

chrony.conf文件大小是1108,覆盖fprintd.conf后,fprintd.conf大小变成1108
-rw-r–r–. 1 root root 1108 4月 8 14:11 chrony.conf
-rw-r–r–. 1 root root 20 4月 8 14:13 fprintd.conf

[root@localhost tmp]# mv -f chrony.conf fprintd.conf
[root@localhost tmp]# ll
-rw-r–r–. 1 root root 1108 4月 8 14:11 fprintd.conf

5. 目录移动

[root@localhost tmp]# mv AAA BBB
[root@localhost tmp]# ll

[root@localhost tmp]# ll BBB
总用量 0
drwxr-xr-x. 2 root root 22 4月 8 15:16 AAA
-rw-r–r–. 1 root root 0 4月 8 15:14 test3.log
[root@localhost tmp]#

如果目录目录不存在,就变成改名了:
[root@localhost tmp]# mv BBB HHH
[root@localhost tmp]# ll
drwxr-xr-x. 3 root root 34 4月 8 15:25 HHH

6. 特殊使用

[root@localhost tmp]# cd HHH
[root@localhost HHH]# mv * ../
[root@localhost HHH]# ll
总用量 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost HHH]# ll /tmp
总用量 52
drwxr-xr-x. 2 root root 22 4月 8 15:16 AAA
-rw-r--r--. 1 root root 54 4月 8 14:44 abc.conf
drwxr-xr-x. 3 root root 101 4月 8 10:59 abrt
-rw-r--r--. 1 root root 1108 4月 8 14:11 fprintd.conf
-rw-r--r--. 1 root root 38 4月 8 14:15 fuse.conf
-rw-r--r--. 1 root root 842 4月 8 14:15 GeoIP.conf
drwxr-xr-x. 2 root root 6 4月 8 15:29 HHH
-rw-r--r--. 1 root root 9 4月 8 14:15 host.conf
-rw-r--r--. 1 root root 7265 4月 8 14:17 kdump.conf
-rw-r--r--. 1 root root 590 4月 8 14:17 krb5.conf
-rw-r--r--. 1 root root 28 4月 8 14:17 ld.so.conf
-rw-r--r--. 1 root root 5171 4月 8 14:39 man_db.conf
-rw-r--r--. 1 root root 936 8月 3 2017 mke2fs.conf
drwxr-xr-x. 6 root root 4096 4月 8 14:58 sysconfig
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
-rw-r--r--. 1 root root 0 4月 8 15:14 test3.log
[root@localhost HHH]#

将目录中的文件拷贝到上一级目录

把后缀是.conf的文件拷贝到AAA目录:
[root@localhost tmp]# mv *.conf AAA
[root@localhost tmp]# ll
[root@localhost tmp]# ll AAA

7. 备份目录文件

[root@localhost tmp]# mv -b AAA/abc.conf test3.log
mv:是否覆盖”test3.log”? y

1
2
3
4
5
6
7
8
9
10
11
[root@localhost tmp]# ll
总用量 8
drwxr-xr-x. 2 root root 185 4月 8 15:34 AAA
drwxr-xr-x. 3 root root 101 4月 8 10:59 abrt
drwxr-xr-x. 2 root root 6 4月 8 15:29 HHH
drwxr-xr-x. 6 root root 4096 4月 8 14:58 sysconfig
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vgauthd.service-gp0Y4e
drwx------. 3 root root 17 4月 8 12:20 systemd-private-5da61680c1bc4007aee12dcf0b3c462a-vmtoolsd.service-nKN26o
-rw-r--r--. 1 root root 54 4月 8 14:44 test3.log
-rw-r--r--. 1 root root 0 4月 8 15:14 test3.log~
[root@localhost tmp]#

pwd: 用法:pwd [-LP]
[root@localhost bin]# pwd -L
/bin
[root@localhost bin]# pwd -P
/usr/bin
[root@localhost bin]# cd /lib64
[root@localhost lib64]# pwd -L
/lib64
[root@localhost lib64]# pwd -P
/usr/lib64
[root@localhost lib64]# pwd
/lib64

5. 目录处理命令 - rm

命令名称:rm
命令原意:remove
命令路径:/user/bin/rm
执行权限:所有用户
功能描述:删除文件
语法命令:rm -fr[文件或目录]
-r :删除目录
-f:强制删除

6. 文件处理命令 - touch

命令名称:touch
命令原意:touch
所在路径:/user/bin/touch
执行权限:所有用户
功能描述:创建空文件、修改文件的时间戳(atime mtime)
命令语法:touch [文件名]

1. 创建不存在的文件

[root@localhost tmp]# touch test001.log test002.log
//在tmp目录下创建文件
[root@localhost /]# touch /tmp/test003.log /tmp/test004.log
//在根目录下创建文件
[root@localhost /]# ll /tmp
总用量 4
-rw-r–r–. 1 root root 0 4月 13 14:29 test001.log
-rw-r–r–. 1 root root 0 4月 13 14:29 test002.log
-rw-r–r–. 1 root root 0 4月 13 14:30 test003.log
-rw-r–r–. 1 root root 0 4月 13 14:30 test004.log

vi或者vim代表的是创建一个空文件,并对其进行编辑:
[root@localhost tmp]# vi test5.log
wq或者wq!(保存退出)
[root@localhost tmp]# vim test6.log
wq或者wq!(保存退出)

//vi或者vim创建的文件不保存,文件是不会被创建的

1. 不创建文件

[root@localhost tmp]# touch -c test007.log
[root@localhost tmp]# ll

2. 将yum.log的时间更新给test001.log

-rw-r–r–. 1 root root 0 4月 13 14:29 test001.log
-rw——-. 1 root root 0 3月 14 11:11 yum.log

[root@localhost tmp]# touch -r yum.log test001.log
[root@localhost tmp]# ll
总用量 12
-rw-r–r–. 1 root root 0 3月 14 11:11 test001.log
-rw——-. 1 root root 0 3月 14 11:11 yum.log

3. 设定文件的时间戳

[root@localhost tmp]# touch -t 201210111530.10 test007.log
[root@localhost tmp]# ll
-rw-r–r–. 1 root root 0 10月 11 2012 test007.log

[root@localhost tmp]# ll –full-time
-rw-r–r–. 1 root root 0 2012-10-11 15:30:10.000000000 +0800 test007.log

1. Windows
  1. 创建时间
  2. 修改时间
  3. 访问时间
2. Linux
  1. 创建时间 access time,简称atime 文件中的数据库最后被访问的时间
  2. 修改时间 modify time,简称mtime 文件内容被修改的最后时间
  3. 状态修改时间 change time,简称ctime 文件的元数据发生变化,比如权限,所有者等等
  4. realtime

3. 读取文件测试

[root@localhost tmp]# touch issue.txt
[root@localhost tmp]# ll 或者ls-l
//查看的是mtime
-rw-r–r–. 1 root root 0 4月 13 15:05 issue.txt

[root@localhost tmp]# ls -l –time=atime
-rw-r–r–. 1 root root 0 4月 13 15:05 issue.txt

[root@localhost tmp]# ls -l –time=ctime
-rw-r–r–. 1 root root 0 4月 13 15:05 issue.txt

4. 使用touch创建一个文件

atime=mtime=ctime

[root@localhost tmp]# stat issue.txt
文件:”issue.txt”
大小:0 块:0 IO 块:4096 普通空文件
设备:805h/2053d Inode:16798292 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-04-13 15:05:35.810795822 +0800
最近更改:2018-04-13 15:05:35.810795822 +0800
最近改动:2018-04-13 15:05:35.810795822 +0800
创建时间:-

[root@localhost tmp]# cat issue.txt
[root@localhost tmp]# stat issue.txt
文件:”issue.txt”
大小:0 块:0 IO 块:4096 普通空文件
设备:805h/2053d Inode:16798292 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-04-13 15:09:27.680782624 +0800 (影响atime)
最近更改:2018-04-13 15:05:35.810795822 +0800
最近改动:2018-04-13 15:05:35.810795822 +0800
创建时间:-
[root@localhost tmp]#

5. 修改文件测试

[root@localhost tmp]# vim issue.txt
按i进入插入模式
输入内容
按ESC退出到命令模式
按shift+:输入wq! 保存退出

1
2
3
4
5
6
7
8
9
10
11
[root@localhost tmp]# stat issue.txt
文件:"issue.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:805h/2053d Inode:16798292 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-04-13 15:09:27.680782624 +0800
最近更改:2018-04-13 15:15:36.213761648 +0800(影响mtime)
最近改动:2018-04-13 15:15:36.214761648 +0800(文件大小发生改变,影响元数据,所以ctime也会变化)
创建时间:-
[root@localhost tmp]#

6. 修改文件所有者测试

[root@localhost tmp]# useradd ABC

[root@localhost tmp]# chown ABC issue.txt

1
2
3
4
5
6
7
8
9
10
11
[root@localhost tmp]# stat issue.txt
文件:"issue.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:805h/2053d Inode:16798292 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ ABC) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2018-04-13 15:09:27.680782624 +0800
最近更改:2018-04-13 15:15:36.213761648 +0800
最近改动:2018-04-13 15:20:51.183743721 +0800(影响了ctime)
创建时间:-
[root@localhost tmp]#

7. 文件处理命令 - cat

命令名称:cat
所在路径:usr/bin/cat
执行权限:所有用户
功能描述:创建空文件
命令语法:显示文件内容&将一个文件内的内容拷贝到另一个文件中

1
2
3
4
5
[root@localhost tmp]# cat test005.log

[root@localhost tmp]# cd /etc
[root@localhost etc]# cat sestatus.conf
[root@localhost etc]# cat -n sestatus.conf

原来test002.log没有任何内容(单个文件内容并入):

1
2
3
[root@localhost tmp]# cat -n test005.log > test002.log
[root@localhost tmp]# cat test002.log
1 CentOS 7.0 Test005

原来test003.log没有任何内容(多个文件内容并入):

1
2
3
4
5
6
7
8
9
[root@localhost tmp]# cat -b test001.log test005.log > test003.log
[root@localhost tmp]# cat test003.log
1 ABCDEFG
2 CentOS 7.0 Test005
-b:对空行也进行编号

[root@localhost tmp]# tac test003.log
2 CentOS 7.0 Test005
1 ABCDEFG

8. 文件处理命令 - more

命令名称:more
所在路径:/usr/bin/more
执行权限:所有用户
功能描述:显示文件内容,分页显示
命令语法:more[文件名]

1
2
3
4
5
[root@localhost tmp]# cd /etc
[root@localhost etc]# cat sudo.conf
[root@localhost etc]# cat -n sudo.conf
[root@localhost etc]#cat services
//对于内容较多的文件时违法全部查看

cat:查看文件较少的内容
more:查看文件较多的内容

more>cat

空格或者f:翻页
Ctrl+b或者b :返回上一页,b就是back
Enter :一行一行显示
q或Q :退出,quit(也可以通过Ctrl+C实现中断)

1. 限制每页显示的行数(每次限时12行的内容)

1
2
[root@localhost etc]# more -10 /etc/services
--More--(0%)

2. 显示more的帮助信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@localhost etc]# more -d /etc/services

按h查看帮助信息

Most commands optionally preceded by integer argument k. Defaults in brackets.
Star (*) indicates argument becomes new default.
-------------------------------------------------------------------------------
<space> Display next k lines of text [current screen size]
z Display next k lines of text [current screen size]*
<return> Display next k lines of text [1]*
d or ctrl-D Scroll k lines [current scroll size, initially 11]*
q or Q or <interrupt> Exit from more
s Skip forward k lines of text [1]
f Skip forward k screenfuls of text [1]
b or ctrl-B Skip backwards k screenfuls of text [1]
' Go to place where previous search started
= Display current line number
/<regular expression> Search for kth occurrence of regular expression [1]
n Search for kth occurrence of last r.e [1]
!<cmd> or :!<cmd> Execute <cmd> in a subshell
v Start up /usr/bin/vi at current line
ctrl-L Redraw screen
:n Go to kth next file [1]
:p Go to kth previous file [1]
:f Display current file name and line number
. Repeat previous command
-------------------------------------------------------------------------------
--More--(0%)[Press space to continue, 'q' to quit.]

3. 禁止内容滚动

[root@localhost etc]# more -10 -c /etc/services

[root@localhost etc]# more -10c /etc/services

两条命令作用相同

4. 忽略多余的空白行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost etc]# vim /tmp/a.txt
dasd

das
dsa







dasdssa



dsdasd

[root@localhost etc]# cat /tmp/a.txt
//很多空格

[root@localhost etc]# more -s /tmp/a.txt
dasd

das
dsa

dasdssa

dsdasd

5. 从那个字符串开始显示(+/字符串)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost etc]#more +/dasdsa /tmp/a.txt
...跳过

dasdssa






dsdasd


[root@localhost etc]#more +/cisco /etc/services

/user,可以通过/字符串在查找关键字

6. 从指定的行数开始显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost etc]#vim /tmp/b.txt
[root@localhost etc]#cat /tmp/b.txt
1.aaa
2.bbb
3.ccc
4
5
6
7
8
9.hhh
10
11
12
13
14
15
16
17
dasdasd

asdasd

asdasdasd
18
[root@localhost etc]#more +ll /tmp/b.txt

9. 文件处理命令 - less

命令名称:less
所在路径:/usr/bin/less
执行权限:所有用户
功能描述:显示文件内容,分页显示
命令语法:less [文件名]

less>more>cat

PageUp:翻页,回看上一页
PageDown:翻页,翻到下一页

方向键上下按键:一行一行显示

1. 查看文件

1
2
[root@localhost bin]#cd /etc
[root@localhost etc]#less etc/services

2. 查找关键字

[root@localhost etc]#less /etc/services
/cisco,按回车
通过n找到另外的关键字(n=next)

3. ps查看进程并通过less分页显示

[root@localhost etc]#ps -ef | less

4. 查看命令历史记录并通过less分页显示

[root@localhost etc]#history | less

5. 查看多个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost etc]#vim /tmp/c.txt
cisco
huawei
juniper
h3c
ruijie

[root@localhost etc]#vim /tmp/c.txt
abc
abc
abc
abc

[root@localhost tmp]# less c.txt d.txt

按Shift+:
输入n就是切到d.txt
数入p就是c.txt的内容

10. 文件处理命令 - head

命令名称:head
所在路径:/usr/bin/head
执行权限:所有用户
功能描述:显示文件内容前几行
命令语法:head[文件名],默认是10行
-n:指定行数

[root@localhost tmp]#head -n 20 /etc/services

[root@localhost tmp]#head -n 5 /etc/services

[root@localhost tmp]#head /etc/services
//默认10行

显示文件的前多少字节
[root@localhost tmp]#head -c 100 /etc/services

11. 文件处理命令 - tail

命令名称:tail
所在路径:/usr/bin/tail
执行权限:所有用户
功能描述:显示文件内容末尾几行
命令语法:tail[文件名],默认是10行
-n:指定行数
-f:动态显示文件末尾内容

[root@localhost tmp]#tail /etc/services

[root@localhost tmp]#tail -n 20 /etc/services

[root@localhost tmp]#tail -f /var/log/mesages
多开几个CRT的标签登陆CentOS,动态查看内容

12. 权限管理命令 - chmod

命令名称:chmod
所在路径:/usr/bin/chmod
执行权限:所有用户
红能描述:改变文件或者目录权限
命令语法:

1
2
3
chmod	[{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421] [文件或目录]
-R 递归修改

rwx — —
所有者 所属组 其他人

u:User,文件或者目录的拥有者
g:Group,文件或者目录的所属组
o:other,既不是拥有者,也不是所属组
a:all,ugo

r:读取权限,数字4(2^2)
w:写入权限,数字2(2^1)
x:执行权限,数字1(2^0)
-:没有任何权限,数据0

+:增加权限
-:取消权限
=:设定唯一权限

1. 增加/取消/设定文件权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost tmp]# touch test001.log
[root@localhost tmp]# ll test001.log
-rw-r--r--. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod a=- test001.log
[root@localhost tmp]# ll test001.log
----------. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod u+wx test001.log
[root@localhost tmp]# ll test001.log
--wx------. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod u-w,g+rw,o+rx test001.log
[root@localhost tmp]# ll test001.log
---xrw-r-x. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod ug+rwx,o-rx test001.log
[root@localhost tmp]# ll test001.log
-rwxrwx---. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod a=rwx test001.log
[root@localhost tmp]# ll test001.log
-rwxrwxrwx. 1 root root 0 4月 25 11:06 test001.log

2. 针对多个文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost tmp]# touch test002.log
[root@localhost tmp]# ll
-rwxrwxrwx. 1 root root 0 4月 25 11:06 test001.log
-rw-r--r--. 1 root root 0 4月 25 11:26 test002.log
[root@localhost tmp]# chmod a=rwx test001.log test002.log
[root@localhost tmp]# ll
-rwxrwxrwx. 1 root root 0 4月 25 11:06 test001.log
-rwxrwxrwx. 1 root root 0 4月 25 11:26 test002.log
[root@localhost tmp]# chmod u-x,g-wx,o-rwx test001.log test002.log
[root@localhost tmp]# ll
-rw-r-----. 1 root root 0 4月 25 11:06 test001.log
-rw-r-----. 1 root root 0 4月 25 11:26 test002.log

3. 将当前目录下的所有文件和子目录权限进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost tmp]# mkdir -vp /tmp/a/b/c
mkdir: 已创建目录 "/tmp/a"
mkdir: 已创建目录 "/tmp/a/b"
mkdir: 已创建目录 "/tmp/a/b/c"
[root@localhost tmp]# ls -ld a
drwxr-xr-x. 3 root root 15 4月 25 11:31 a
[root@localhost tmp]# ll
总用量 0
drwxrwxrwx. 3 root root 15 4月 25 11:31 a
-rwxrwxrwx. 1 root root 0 4月 25 11:06 test001.log
-rwxrwxrwx. 1 root root 0 4月 25 11:26 test002.log
[root@localhost tmp]# ls -ld a
drwxrwxrwx. 3 root root 15 4月 25 11:31 a
[root@localhost tmp]# ls -ld a/b
drwxrwxrwx. 3 root root 15 4月 25 11:31 a/b
[root@localhost tmp]# ls -ld a/b/c
drwxrwxrwx. 2 root root 6 4月 25 11:31 a/b/c

4. 数字

r:4
w:2
x:1
-:0

7:4+2+1,rwx
777:rwxrwxrwx(4+2+1,4+2+1,4+2+1)

1
2
3
4
5
6
7
8
9
10
[root@localhost tmp]# chmod -R a=- *
[root@localhost tmp]# ll
----------. 1 root root 0 4月 25 11:06 test001.log
----------. 1 root root 0 4月 25 11:26 test002.log
[root@localhost tmp]# chmod 777 test001.log
[root@localhost tmp]# ll test001.log
-rwxrwxrwx. 1 root root 0 4月 25 11:06 test001.log
[root@localhost tmp]# chmod 520 test002.log
[root@localhost tmp]# ll test002.log
-r-x-w----. 1 root root 0 4月 25 11:26 test002.log

数字修改和使用=的效果是相同的

4的文件具备ROOT的权限,可以在执行过程中调用ROOT才有权限调用的文件

1
2
3
[root@localhost tmp]# chmod 4755 test002.log
[root@localhost tmp]# ll test002.log
-rwsr-xr-x. 1 root root 0 4月 25 11:26 test002.log

netlogin

文件权限详细说明

文件:
读取—可以查看文件内容
写入—可以修改文件内容
执行—可以执行文件

目录:
读取—可以列出目录中内容
写入—可以在目录中创建/删除文件或者子目录
执行—可以进入目录

目录:rwx(所有者) r-x(所属组) r-x(其他人) 755(默认)
文件:rw-(所有者) r–(所属组) r–(其他人) 644(默认)

r:4
w:2
x:1
-:0

13. 文件或者目录的权限 - chmod

chown

命令名称:chown
英文原意:change file ownership
所在路径:/usr/bin/chown
执行权限:所有用户
功能呢个描述:改变文件或者目录的所有者
命令语法:chown [用户] [文件或者目录]

1
2
3
[root@localhost tmp]# chown jincheng test
chown: 无效的用户: "jincheng"
//用户必须存在
1
2
3
4
5
6
7
[root@localhost tmp]# useradd mike
[root@localhost tmp]# passwd mike
更改用户 mike 的密码 。
新的 密码:1qaz2wsx
无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:1qaz2wsx
passwd:所有的身份验证令牌已经成功更新。
1
2
3
4
[root@localhost tmp]# who
root tty1 2018-05-02 10:45
root pts/0 2018-05-02 10:48 (192.168.191.1)
mike pts/1 2018-05-02 11:10 (192.168.191.1)
1
2
3
4
5
6
7
8
[mike@localhost ~]$ pwd
/home/mike
[mike@localhost ~]$ mkdir WANG
[mike@localhost ~]$ touch hu
[mike@localhost ~]$ ll
总用量 0
-rw-rw-r--. 1 mike mike 0 5月 2 11:12 hu
drwxrwxr-x. 2 mike mike 6 5月 2 11:12 WANG

修改所有者

1
2
3
[root@localhost tmp]# chown mike test
[root@localhost tmp]# ll test
-rw-r--r--. 1 mike root 0 5月 2 10:56 test

修改所属组

1
2
3
[root@localhost tmp]# chown :mike test
[root@localhost tmp]# ll test
-rw-r--r--. 1 mike mike 0 5月 2 10:56 test

修改所有者和所属组

1
2
3
4
[root@localhost tmp]# useradd wang
[root@localhost tmp]# chown wang:root test
[root@localhost tmp]# ll test
-rw-r--r--. 1 wang root 0 5月 2 10:56 test
  1. chown 所有者:所属组 文件或目录
  2. chown 所有者
  3. chown 所属组

递归修改

1
2
3
4
5
6
7
8
9
[root@localhost tmp]# mkdir -vp AAA/BBB/CCC/DDD
mkdir: 已创建目录 "AAA"
mkdir: 已创建目录 "AAA/BBB"
mkdir: 已创建目录 "AAA/BBB/CCC"
mkdir: 已创建目录 "AAA/BBB/CCC/DDD"
[root@localhost tmp]# touch AAA/BBB/CCC/DDD/wang.log

[root@localhost tmp]# ls -ld AAA
drwxr-xr-x. 3 root root 17 5月 2 11:22 AAA

14. 文件或者目录的所属组 - chgrp

命令名称:chgrp
英文原意:change file group ownership
所在路径:/usr/bin/chgrp
执行权限:所有用户
功能描述:改变文件或者目录的所属组
命令语法:chgrp [组名] [文件或者目录]

修改所属组

1
2
3
4
[root@localhost tmp]# groupadd cisco
[root@localhost tmp]# chgrp cisco test
[root@localhost tmp]# ll test
-rw-r--r--. 1 wang cisco 0 5月 2 10:56 test

将指定文件的所属组给其他文件或者目录

1
2
3
4
5
[root@localhost tmp]# chgrp --reference=test AAA
[root@localhost tmp]# ls -ld AAA
drwxr-xr-x. 3 root cisco 17 5月 2 11:22 AAA
[root@localhost tmp]# ls -ld AAA/BBB
drwxr-xr-x. 3 root root 17 5月 2 11:22 AAA/BBB

递归修改

1
2
3
4
5
[root@localhost tmp]# chgrp -R cisco AAA
[root@localhost tmp]# ls -ld AAA
drwxr-xr-x. 3 root cisco 17 5月 2 11:22 AAA
[root@localhost tmp]# ls -ld AAA/BBB
drwxr-xr-x. 3 root cisco 17 5月 2 11:22 AAA/BBB

群组识别码

1
2
3
4
5
6
7
8
[root@localhost tmp]# cd /etc
[root@localhost etc]# cat group
......
users:x:100:
......
[root@localhost tmp]# chgrp 100 test
[root@localhost tmp]# ll test
-rw-r--r--. 1 wang users 0 5月 2 10:56 test

15. 显示或者设置缺省的权限 - umask

命令名称:umask
英文原意:the user file-creation mask
所在路径:Shell内置命令
执行权限:所有用户
功能描述:显示或者设置缺省的权限
命令语法:umask [-S]

1
2
3
4
[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
[root@localhost tmp]# umask
0022

777 - 022 = 755(默认权限)

希望创建的文件或者目录缺省权限是:rwxr-xr– (754)
777 - 754 = 023

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost tmp]# umask 023
[root@localhost tmp]# umask
0023
[root@localhost tmp]# umask -S
u=rwx,g=rx,o=r

[root@localhost tmp]# mkdir ABC
[root@localhost tmp]# ls -ld ABC
drwxr-xr--. 2 root root 6 5月 2 11:51 ABC 754
[root@localhost tmp]# touch DEF
[root@localhost tmp]# ls -l DEF
-rw-r--r--. 1 root root 6 5月 2 11:53 DEF

[root@localhost tmp]# umask 022
[root@localhost tmp]# umask
0022

16. 文件查找命令 - find

功能描述:查找、搜索文件或目录(包括隐藏文件)
命令语法:find [搜索范围] [匹配条件]

Windows:模糊查询
Linux:精确查询

1. -name和-iname

精确查找
1
2
3
[root@localhost /]# find /etc -name init
/etc/selinux/targeted/active/modules/100/init
/etc/sysconfig/init

通配符/正则表达式

精通正则表达式 第三版 中文版

模糊查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost /]# find /etc -name *init*
/etc/gdbinit.d
/etc/selinux/targeted/active/modules/100/init
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/security/namespace.init
/etc/init.d
/etc/rc.d/init.d
/etc/systemd/system/sysinit.target.wants
/etc/gdbinit
/etc/inittab

[root@localhost /]# find /etc -name init*
/etc/selinux/targeted/active/modules/100/init
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/init.d
/etc/rc.d/init.d
/etc/inittab

[root@localhost /]# find /etc -name init???
/etc/inittab


[root@localhost /]# touch /etc/INITTAB
[root@localhost /]# ll /etc/INITTAB
-rw-r--r--. 1 root root 0 5月 4 14:22 /etc/INITTAB
[root@localhost /]# find /etc -name init???
/etc/inittab
[root@localhost /]# find /etc -iname init???
/etc/inittab
/etc/INITTAB

2. -size

1个数据块 = 512Byte(字节) = 0.5KB
100M = 102400KB = 204800数据块

+n:大于
-n:小于
=n:等于

1
2
3
4
5
6
7
8
9
[root@localhost /]# find / -size +204800
/proc/kcore
find: ‘/proc/1223/task/1223/fd/6’: 没有那个文件或目录
find: ‘/proc/1223/task/1223/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/1223/fd/6’: 没有那个文件或目录
find: ‘/proc/1223/fdinfo/6’: 没有那个文件或目录
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/usr/lib/locale/locale-archive

3. -user

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost ~]# useradd mike
[root@localhost ~]# mkdir -p /home/AAA/BBB/CCC/DDD
[root@localhost ~]# touch /home/AAA/BBB/CCC/DDD/test.log
[root@localhost ~]# chown -R mike /home/AAA
[root@localhost ~]# ls -Rl /home/AAA
/home/AAA:
总用量 0
drwxr-xr-x. 3 mike root 17 5月 4 14:42 BBB

/home/AAA/BBB:
总用量 0
drwxr-xr-x. 3 mike root 17 5月 4 14:42 CCC

/home/AAA/BBB/CCC:
总用量 0
drwxr-xr-x. 2 mike root 22 5月 4 14:42 DDD

/home/AAA/BBB/CCC/DDD:
总用量 0
-rw-r--r--. 1 mike root 0 5月 4 14:42 test.log
[root@localhost ~]# find /home -user mike
/home/mike
/home/mike/.bash_logout
/home/mike/.bash_profile
/home/mike/.bashrc
/home/AAA
/home/AAA/BBB
/home/AAA/BBB/CCC
/home/AAA/BBB/CCC/DDD
/home/AAA/BBB/CCC/DDD/test.log

4. -min

1.amin:访问时间,acess
2.cmin:文件属性,change(元数据)
3.mmin:文件内容,modify(文件大小发生变化,元数据改变,所以c也改变)

1.+:超过多长时间
2.-:多长时间之内
3.=

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost /]# find /etc -cmin -30
/etc
/etc/resolv.conf
/etc/group
/etc/gshadow
/etc/passwd
/etc/group-
/etc/gshadow-
/etc/shadow
/etc/passwd-
/etc/shadow-
/etc/tuned/active_profile
/etc/INITTAB

5. -a和-o

  1. -a:两个条件同时满足
  2. -o:两个条件满足其中任意一个即可

大于80MB,小于100MB文件
80MB = 81920KB = 163840

1
[root@localhost /]# find /etc -size +163840 -a -size -204800

-type

  1. f:文件
  2. d:目录
  3. l:软链接文件
查找init开头的文件
1
2
3
4
5
[root@localhost /]# find /etc -name init* -a -type f
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/inittab
查找init开头的目录
1
2
3
[root@localhost /]# find /etc -name init* -a -type d
/etc/selinux/targeted/active/modules/100/init
/etc/rc.d/init.d
查找init开头的软链接文件
1
2
[root@localhost /]# find /etc -name init* -a -type l
/etc/init.d
查找init开头,或者post开头的文件和目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost /]# find /etc -name init* -o -name post*
/etc/selinux/targeted/active/modules/100/init
/etc/selinux/targeted/active/modules/100/postfix
/etc/selinux/targeted/active/modules/100/postgresql
/etc/selinux/targeted/active/modules/100/postgrey
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/init.d
/etc/rc.d/init.d
/etc/systemd/system/multi-user.target.wants/postfix.service
/etc/pam.d/postlogin-ac
/etc/pam.d/postlogin
/etc/inittab
/etc/postfix
/etc/kernel/postinst.d

6. -exec

find /etc -name inittab -exec ls -l {} \;
//查找etc目录下的inittab文件,并且要要显示详细信息

1
2
3
4
5
[root@localhost ~]# find /etc -name inittab
/etc/inittab

[root@localhost ~]# find /etc -name inittab -exec ls -l {} \;
-rw-r--r--. 1 root root 511 8月 4 2017 /etc/inittab

-exec 命令 {} ; 对搜索结果执行操作
-ok 命令 {} ; 对搜索结果执行操作(带有询问)

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# useradd mike
[root@localhost ~]# passwd mike

[mike@localhost ~]$ touch test.log
[mike@localhost ~]$ ll
总用量 0
-rw-rw-r--. 1 mike mike 0 5月 11 11:58 test.log

[root@localhost ~]# find /home/mike -user mike -exec rm -f {} \;

[root@localhost ~]# find /home/mike/test.log -user mike -exec rm -f {} \;
1
2
3
4
5
6
[mike@localhost ~]$ ll -a
总用量 0
drwx------. 4 mike mike 35 5月 11 12:02 .
drwxr-xr-x. 3 root root 18 5月 11 11:57 ..
drwxrwxr-x. 3 mike mike 18 5月 11 11:58 .cache
drwxrwxr-x. 3 mike mike 18 5月 11 11:58 .config
1
2
3
4
5
[root@localhost ~]# find /etc -name init* -a -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 30 8月 6 2017 /etc/selinux/targeted/contexts/initrc_context
-rwxr-xr-x. 1 root root 5419 5月 3 2017 /etc/sysconfig/network-scripts/init.ipv6-global
-rw-r--r--. 1 root root 798 8月 4 2017 /etc/sysconfig/init
-rw-r--r--. 1 root root 511 8月 4 2017 /etc/inittab
1
2
3
4
5
6
7
8
9
[root@localhost ~]# find /etc -name init* -a -type f -ok ls -l {} \;    
< ls ... /etc/selinux/targeted/contexts/initrc_context > ? y
-rw-r--r--. 1 root root 30 8月 6 2017 /etc/selinux/targeted/contexts/initrc_context
< ls ... /etc/sysconfig/network-scripts/init.ipv6-global > ? y
-rwxr-xr-x. 1 root root 5419 5月 3 2017 /etc/sysconfig/network-scripts/init.ipv6-global
< ls ... /etc/sysconfig/init > ? y
-rw-r--r--. 1 root root 798 8月 4 2017 /etc/sysconfig/init
< ls ... /etc/inittab > ? y
-rw-r--r--. 1 root root 511 8月 4 2017 /etc/inittab

[root@localhost ~]# find /home -user mike -a -type d -ok rm -r {} \;

7. -inum

1
2
[root@localhost ~]# cd /tmp
[root@localhost tmp]# touch "program files"
1
2
[root@localhost tmp]# ll
-rw-r--r--. 1 root root 0 5月 11 12:11 program files
1
2
3
[root@localhost tmp]# rm program files
rm: 无法删除"program": 没有那个文件或目录
rm: 无法删除"files": 没有那个文件或目录
1
2
[root@localhost tmp]# rm "program files"
rm:是否删除普通空文件 "program files"?y
1
2
3
4
[root@localhost tmp]# touch "program files"
[root@localhost tmp]# ls -i
16797775 ks-script-Sdu05z
16798118 program files
1
2
[root@localhost tmp]# find . -inum 16798118 -exec rm {} \;
[root@localhost tmp]# ll

17. 文件搜索命令 - locate

命令名称:locate
功能描述:在文件资料库中查找文件
命令语法:locate [文件名]

1
2
[root@localhost /]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40512 11月 5 2016 /usr/bin/locate
1
2
[root@localhost /]# locate inittab
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录

[root@localhost /]# updatedb
//更新数据库

1
2
3
4
5
6
[root@localhost /]# locate inittab  //查找以inittab开头的文件或目录
/etc/inittab
/usr/share/augeas/lenses/dist/inittab.aug
/usr/share/man/zh_CN/man5/inittab.5.gz
/usr/share/vim/vim74/syntax/inittab.vim
[root@localhost /]#

安装CentOS的时候,选择的最小安装,又可能没有locate这条命令

  1. 安装mlocate包
    [root@localhost /]# yum -y install mlocate

  2. 更新数据库
    [root@localhost /]# updatedb

  3. 使用
    [root@localhost /]# find / -name inittab
    /etc/inittab

    1
    2
    3
    4
    5
    [root@localhost /]# locate inittab
    /etc/inittab
    /usr/share/augeas/lenses/dist/inittab.aug
    /usr/share/man/zh_CN/man5/inittab.5.gz
    /usr/share/vim/vim74/syntax/inittab.vim
    1
    2
    3
    4
    5
    6
    [root@localhost /]# cat /etc/updatedb.conf
    PRUNE_BIND_MOUNTS = "yes"
    PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
    PRUNENAMES = ".git .hg .svn"
    PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"
    [root@localhost /]#

    PRUNE_BIND_MOUNTS:开启搜索限制,如果是no就不开启搜索限制
    PRUNEFS:不搜索文件系统
    PRUNENAMES:不搜索文件类型
    PRUNEPATHS:不搜索的路径

修改:
[root@localhost /]# vim /etc/updatedb.conf

  1. 按i进入编辑模式
  2. 编辑内容
  3. 按ESC退到命令模式
  4. 输入wq(保存退出)或者wq!(强制保存退出)
    1
    2
    3
    [root@localhost /]# updatedb
    [root@localhost /]# locate locate
    /var/lib/mlocate/mlocate.db
    四个部分组成:
  5. /usr/bin/updatedb 创建/更新数据库
  6. /usr/bin/locate或者mlocate 查找命令
  7. /etc/updatedb.conf 限制搜索条件
  8. /var/lib/mlocate/mlocate.db 数据库

今天刚从wordpress把之前的文章迁移到了hexo,文章迁移还算顺利,每个md文件都改了改样式,之前做的很多东西,还有挖过的坑,都没怎么认真记录。立个flag,从今天开始认真学,认真记录笔记。

–来自一个年轻无为,虚度青春的少年

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

第二题:等差素数列

2,3,5,7,11,13,….是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。

2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!

有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:

长度为10的等差素数列,其公差最小值是多少?

注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。

第一题: 购物单

小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。

这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。

取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。
你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
--------------------
**** 180.90 88
**** 10.25 65
**** 56.14 9
**** 104.65 9
**** 100.30 88
**** 297.15 半价
**** 26.75 65
**** 130.62 半价
**** 240.28 58
**** 270.62 8
**** 115.87 88
**** 247.34 95
**** 73.21 9
**** 101.00 半价
**** 79.54 半价
**** 278.44 7
**** 199.26 半价
**** 12.97 9
**** 166.30 78
**** 125.50 58
**** 84.98 9
**** 113.35 68
**** 166.57 半价
**** 42.56 9
**** 81.90 95
**** 131.78 8
**** 255.89 78
**** 109.17 9
**** 146.69 68
**** 139.33 65
**** 141.16 78
**** 154.74 8
**** 59.42 8
**** 85.44 68
**** 293.70 88
**** 261.79 65
**** 11.30 88
**** 268.27 58
**** 128.29 88
**** 251.03 8
**** 208.39 75
**** 128.88 75
**** 62.06 9
**** 225.87 75
**** 12.89 75
**** 34.28 75
**** 62.16 58
**** 129.12 半价
**** 218.37 半价
**** 289.69 8
--------------------

需要说明的是,88折指的是按标价的88%计算,而8折是按80%计算,余者类推。
特别地,半价是按50%计算。

请提交小明要从取款机上提取的金额,单位是元。
答案是一个整数,类似4300的样子,结尾必然是00,不要填写任何多余的内容。

特别提醒:不许携带计算器入场,也不能打开手机。

题解:

第一次参加这比赛,第一道题就是这样,崩溃。个人最讨厌的就是这样的题目。
将清单复制到txt文本里面,利用Ctrl+H替换掉**这些字符和折扣,这里要注意8折和88折的区别,我刚开始本来是0.8替换成了0.08。预处理好数据之后用代码计算即可!注意类型不能为int

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;

int main(){
double t;
t=180.90*88*0.01+10.25*65*0.01+56.14*90*0.01+104.65*90*0.01+100.30*88*0.01+297.15*0.5+26.75*65*0.01+130.62*0.5+240.28*58*0.01+270.62*80*0.01+115.87*88*0.01+247.34*95*0.01+73.21*90*0.01+101.00*0.5+79.54*0.5+278.44*70*0.01+199.26*0.5+12.97*90*0.01+166.30*78*0.01+125.50*58*0.01+84.98*90*0.01+113.35*68*0.01+166.57*0.5+42.56*90*0.01+81.90*95*0.01+131.78*80*0.01+255.89*78*0.01+109.17*90*0.01+146.69*68*0.01+139.33*65*0.01+141.16*78*0.01+154.74*80*0.01+59.42*80*0.01+85.44*68*0.01+293.70*88*0.01+261.79*65*0.01+11.30*88*0.01+268.27*58*0.01+128.29*88*0.01+251.03*80*0.01+208.39*75*0.01+128.88*75*0.01+62.06*90*0.01+225.87*75*0.01+12.89*75*0.01+34.28*75*0.01+62.16*58*0.01+129.12*0.5+218.37*0.5+289.69*80*0.01;
cout&lt;&lt;t;
return 0;
}

算出来是5136.86
答案:5200
当然我这是手动替换好的,

网上的另一种解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;

int main()
{
freopen("DATA.txt","r",stdin);
double ans = 0,a,b;
char buf[1110];
while(scanf("%s%lf%lf",buf,&a,&b)!=EOF){
ans += a*b/100;
}
printf("%lf\n",ans);
return 0;
}
//5136.859500
//5200

操作

今天在学校机房安装ADS并做网络同传,也就是ADS1.2(实验书上的是这个版本),ARM公司开发的一款ARM的开发工具,安装包是老师发给我的(她安装过没有问题才发给我的),然后我实际操作的时候停留在100%的地方不动了,我看了教程上面这时候应该是在这里卡一下,然后弹出一个输入License的对话框。于是乎网上不停的找资料,终于安装成功了,操作记录如下:

  1. 先将之前卡住的100%在任务管理器中强制结束掉
  2. 重启
  3. 删掉%program files%下面的ARM文件夹,如果你安装在C盘那么应该是:C:\Program Files\ARM
  4. 删掉下面几个注册表
1
2
3
[1]HKEY_CURRENT_USER\SOFTWARE\ARM Limited\ARM Developer Suite
[2]HKEY_LOCAL_MACHINE\SOFTWARE\ARM Limited\ARM Developer Suite
[3]HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下查找{406FBBD8-EAFA-11D4-8FD0-0010B5688C67}
  1. 重启
  2. 继续安装ADS
  3. 输入证书
  4. 安装成功
    不出意外这样应该可以了,我就是这样成功的(机房环境是xp 32位),记录一下以后可能安装的时候还会用到。

在这之前我还操作过一种解决方法

(没有完全解决,顺带贴出来做个记录):
1,找到license文件夹路径(注意是这是不是ADSv1_2根文件夹,不然会出新问题的),我的电脑路径是:C:\Program Files (x86)\ARM\ADSv1_2\licenses。打开这个文件夹,你会发现,这个文件夹是空的。把安装包里面的CRACK文件夹中的license拷贝进去。
2,好了,可以正常使用ADS了。但是 开始-ads里还是只有online book 你自己吧ide和axd放到桌面上用吧,而且我操作的时候发现打开axd报错了。

一、安装Fiddler抓包工具并配置

点击Tools->Options…:

勾选上HTTPS和Connection选项卡里面的对勾,如图所示:


配置完毕需要重启Fiddler。

二、配置手机端

iPhone须和抓包的PC机在同一个局域网络里(也就是在同一个wifi)
先查看Fiddler软件所在的PC机IP地址并记下,如图所示,我是 192.168.123.48

记下如图所示的地址,然后再打开iPhone,找到WiFi设置,点击 i 图标,进入WiFi详细设置。

设置HTTP代理为手动,服务器为PC机的IP地址,端口为8888(8888为Fiddler安装后的默认抓包监听端口)

设置好以后,从Safari浏览器里输入地址 192.168.123.48:8888,即你的PC机 IP地址+英文冒号+端口号8888

回车访问到如下界面,点击FiddlerRoot certificate 安装Fiddler证书

接下来还有重要很重要的一步,如果不设置将会无法抓取到HTTPS的包。

点击设置->关于本机->证书信任设置->进入证书信任设置,把DO_NOT_TRUST_FiddlerRoot的这个选项给打开,基于安全的考虑,建议自己使用抓包完以后仍旧关闭此选项。

三、打开Fiddler,准备抓包。

此时建议关闭浏览器中的不必要页面,以免抓取到太多非微信小游戏的请求信息影响判断。

打开微信的跳一跳小游戏,正常情况下此时Fiddler应该会抓取到一条一条的HTTP和HTTPS请求信息,观察Fiddler抓取到的信息。

如果你的Fiddler中没有出现HTTPS类型的这几个页面,说明抓包没有配置好,但是可以抓取到HTTP类型的请求信息,应该是HTTPS的证书配置有误。

Android同理,Android下还可使用Packet Capture