[TOC]
## 1. ubuntu 下vim修改tab键为4个空格
`vim /etc/vim/vimrc`
* 加入三行内容:
~~~
set ts=4
set expandtab
set autoindent
~~~
## 3. 查看局域网对应的外网IP
~~~
# 两种命令都可以,不起作用时,换着用
curl ifconfig.me
curl ifconfig.me/ip
~~~
## 4. 复制虚拟机
1. 复制vdi或者vmdx文件到一个新的目录。
![](https://box.kancloud.cn/6df3375632d7ef6d542d09ea0ad59f30_323x154.png)
其中bigdata01.vdi是由base.vdi复制过来的
2. 进入到virtualbox的安装目录,执行命令,改变UUID
`vboxmanage internalcommands sethduuid E:\虚拟机\bigdata01.vdi`
![](https://box.kancloud.cn/facd9cd343f9c7f9f38c00755df87923_690x71.png)
3.使用VirtualBox新建虚拟机,选择磁盘的时候,选择已有的磁盘,然后选中第一步中拷贝的文件。
4.建立好之后就可以正常使用了。
## 5. 查看Linux的CPU个数
~~~
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
# CPU信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
~~~
## 6. 查看某一进程占用CPU和内存
`top -p pid`
## 7. 查看端口是否被占用
~~~
netstat -tunlp |grep 7885
~~~
![](https://box.kancloud.cn/6f397d89049ed4d9d6b161786d9dbe23_1036x67.png)
红圈 端口和占用进程
## 8. diff 找两个文件的不同
### 8.1 参数
> * diff还提供了一些有用的参数来控制比较行为与输出结果,一些常用的参数如下:
> -b --ignore-space-change 忽略空格,如果两行进行比较,多个连续的空格会被当作一个空格处理,同时会忽略掉行尾的空格差异。
> -w --ignore-all-space 忽略所有空格,忽略范围比-b更大,包括很多不可见的字符都会忽略。
> -B 忽略空白行。
> -y 输出两列,一个文件一列,有点类似GUI的输出外观了,这种方式输出更加直观。
> -W 大写W,当指定-y的时候设置列的宽度,默认是130
> -x, --exclude=PAT 比较目录的时候排除指定PAT模式的文件名的比较
> -i, --ignore-case 忽略两个文件中大小写的不同
> -e 将比较的结果保存成一个ed脚本,之后ed程序可以执行该脚本文件,从而将file1修改成与file2的内容相同,这一般在patch的时候有用。
> diff -e 1.txt 2.txt > script.txt
> 这样就是生成了一个ed可以执行的脚本文件script.txt,生成脚本文件之后我们还需要做一个操作, 在脚本文件末尾添加ed的write指令,只需要执行 echo "w" >>script.txt 将w指令附加到脚本文件的最后一行即可。
> 那么如何应用该脚本文件呢,可以这样使用:
> ed - 1.txt < script.txt
> 注意中间的 – 符号表示从标准输入中读取,而 < script.txt 则重定向script.txt的内容到标准输入。这样执行之后1.txt的内容将与2.txt完全相同。
### 8.2 实例
> diff分析两个文件,并输出两个文件的不同的行。**diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配**【或者这么理解:与第一个文件相比,第二个文件发生了那些变化】【git diff的结果输出也是如此】。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。
> 现在让我们来看一下diff是如何工作的,假设有两个文件:
//file1.txt
~~~
I need to buy apples.
I need to run the laundry.
I need to wash the dog.
I need to get the car detailed.
~~~
//file2.txt
~~~
I need to buy apples.
I need to do the laundry.
I need to wash the car.
I need to get the dog detailed.
~~~
我们使用diff比较他们的不同,输入命令
`diff file1.txt file2.txt`
输出如下结果:
~~~
2,4c2,4
< I need to run the laundry.
< I need to wash the dog.
< I need to get the car detailed.
> I need to do the laundry.
> I need to wash the car.
> I need to get the dog detailed.
~~~
我们来说明一下该输出结果的含义,要明白diff比较结果的含义,我们必须牢记一点,diff描述两个文件不同的方式是告诉我们怎么样改变第一个文件之后与第二个文件匹配。我们看看上面的比较结果中的第一行 2,4c2,4 前面的数字2,4表示第一个文件中的行,中间有一个字母c表示需要在第一个文件上做的操作(a=add,c=change,d=delete),后面的数字2,4表示第二个文件中的行。
> 2,4c2,4 表示:
> 第一个文件中的第二行到第四行需要改变(c),才能和第二个文件一样,操作有
> a=add 增加
> c=change 改变
> d=delete 删除
> 接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。
>
## 9.查看系统版本
### 4.1 lsb_release -a
系统发行版本信息
LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息。此命令适用于所有的Linux发行版本。
~~~
lsb_release -a
~~~
~~~
No LSB modules are available.
Distributor ID: Ubuntu # 系统类别是ubuntu
Description: Ubuntu 14.04.5 LTS # 14年2月4月发布的稳定版本,LTS是Long Term Support:长时间支持版本 三年 ,一般是18个月
Release: 14.04 # 发行版本号
Codename: trusty # ubuntu的代号名称
~~~
### 4.2 cat /proc/version查看内核版本
~~~
cat /proc/version
Linux version 4.4.0-31-generic (buildd@lgw01-43) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016
~~~
~~~
Linux version 4.4.0-31-generic 内核版本号
gcc version 4.8.4 gcc编译器版本号
Ubuntu 4.8.4-2ubuntu1~14.04.3 Ubuntu版本号
~~~
### 4.3 cat /etc/os-release
~~~
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
~~~
## 10. 用户管理
> 1. 管理员用户:
> UID为0-系统的管理员用户(root)。
> 2. 系统用户:
> UID为1~999- Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
> 3. 普通用户:
> UID从1000开始-是由管理员创建的用于日常工作的用户。
### 10.1 adduser
adduser 【用户名】,创建用户并且同时创建和用户同名的组,然后将用户加入这个组,如果这个组存在报错
~~~
root@ubuntu:~# adduser rocket
Adding user `rocket' ...
Adding new group `rocket' (1004) ...
Adding new user `rocket' (1004) with group `rocket' ...
Creating home directory `/home/rocket' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for rocket
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
~~~
### 10.2 useradd
useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
useradd(选项)(参数)
选项:
~~~
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-s<shell>:指定用户登入后所使用的shell;
-u<uid>:指定用户id。
~~~
参数:
要创建的用户
~~~
useradd –g sales jack –G company,employees //-g:加入主要组、-G:加入次要组
~~~
家目录
~~~
useradd -d /home/applog/usfm -m usfm
~~~
禁止登陆
~~~
useradd -M -s /sbin/nologin user
-M:不创建家目录
-s:指定用户登陆时使用的shell,nologin就是登陆不了
~~~
## 11. 文件管理
### 11.1 文件区分
Linux中一切皆为文件,并且使用符号来区分文件的种类:
> 1. -:普通文件。
> 2. d:目录文件。
> 3. l:链接文件。
> 4. b:块设备文件。
> 5. c:字符设备文件。
> 6. p:管道文件。
>
### 11.2 文件权限
读、写、执行用字符rwx表示,也可以用4、2、1数字表示
#### 11.2.1 文件权限
##### 1. r-读
对文件的内容具有读取的权限
##### 2. w-写
可以对文件进行修改、删除、新增功能
##### 3. x-执行
文件是一个可执行的脚本
#### 11.2.2 目录权限
### 11.3 特殊权限
#### 11.3.1 setfacl命令
setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。下面来设置用户在/root目录上的权限:
~~~
[root@localhost ~]# adduser tuna
[root@localhost ~]# su - tuna
[tuna@localhost ~]$ ls
[tuna@localhost ~]$ ls -ld /root
dr-xr-x---. 3 root root 4096 6月 25 12:42 /root
[tuna@localhost ~]$ cd /root/
-bash: cd: /root/: 权限不够
[tuna@localhost ~]$ 登出
[root@localhost ~]# setfacl -Rm u:tuna:rwx /root
[root@localhost ~]# su - tuna
上一次登录:一 6月 25 13:24:43 CST 2018pts/4 上
[tuna@localhost ~]$ cd /root/
[tuna@localhost root]$ ls
anaconda-ks.cfg mysql-community-devel-5.7.22-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar mysql-community-embedded-5.7.22-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.22-1.el7.x86_64.rpm
mysqlall.sql mysql-community-embedded-compat-5.7.22-1.el7.x86_64.rpm mysql-community-server-5.7.22-1.el7.x86_64.rpm
mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.22-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.22-1.el7.x86_64.rpm
mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-community-libs-5.7.22-1.el7.x86_64.rpm
~~~
用的ls命令是看不到ACL表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL了。(上边没有为tuna用户增加ACL规则时,是点)
~~~
[tuna@localhost root]$ ls -ld /root
dr-xrwx---+ 3 root root 4096 6月 25 12:42 /root
# 以前是
dr-xrwx---. 3 root root 4096 6月 25 12:42 /root
~~~
#### 11.3.2 getfacl命令
getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。Linux系统中的命令就是这么又可爱又好记。想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令。下面使用getfacl命令显示在root管理员家目录上设置的所有ACL信息。
~~~
[tuna@localhost root]$ getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:tuna:rwx # 多了一个tuna用户
group::r-x
mask::rwx
other::---
~~~
此时说名文件设置了ACL规则
### 11.4 文件隐藏属性
> 1. Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
> 2. 有用户曾经在生产环境和RHCE考试题目中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种“奇怪”的文件也保障了Linux系统的安全性。
> 3. 锁定文件:对于文件来说不能被删除、改名、设置。只有root可以使用
>
#### 14.1 chattr
命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。chattr命令中可供选择的隐藏权限参数非常丰富,具体如表5-6所示。
chattr命令中用于隐藏权限的参数及其作用
~~~
参数 作用
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
x 可以直接访问压缩文件中的内容
~~~
1. 文件作用
~~~
[root@localhost ~]# echo 'hello linux' > test.txt
[root@localhost ~]# chattr +a ./test.txt
[root@localhost ~]# rm ./test.txt
rm:是否删除普通文件 "./test.txt"?y
rm: 无法删除"./test.txt": 不允许的操作
[root@localhost ~]# rm -rf ./test.txt
rm: 无法删除"./test.txt": 不允许的操作
[root@localhost ~]# rm -rf ./test.txt
rm: 无法删除"./test.txt": 不允许的操作
~~~
2. 目录
~~~
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# echo 'hello linux' > test1.txt
[root@localhost test]# chattr +a ./test1.txt
[root@localhost test]# echo 'hello linux' >> test1.txt
[root@localhost test]# rm -rf ./test1.txt
rm: 无法删除"./test1.txt": 不允许的操作
[root@localhost test]# echo 'hello linux' >> hello.txt
[root@localhost test]# chattr +a ../test
[root@localhost test]# echo 'hello linux' >> h.txt
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# chattr +i ../test
[root@localhost test]# echo 'hello linux' >> h2.txt # 加-i后,无法再目录下创建文件
-bash: h2.txt: 权限不够
~~~
#### 14.2 lsattr命令
用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls等看不出来隐藏权限
~~~
[root@localhost test]# lsattr ../test
-----a---------- ../test/test1.txt
---------------- ../test/hello.txt
---------------- ../test/h.txt
[root@localhost test]# cd ..
[root@localhost ~]# lsattr test
-----a---------- test/test1.txt
---------------- test/hello.txt
---------------- test/h.txt
[root@localhost ~]# lsattr -d test
----ia---------- test
~~~
- Docker
- 什么是docker
- Docker安装、组件启动
- docker网络
- docker命令
- docker swarm
- dockerfile
- mesos
- 运维
- Linux
- Linux基础
- Linux常用命令_1
- Linux常用命令_2
- ip命令
- 什么是Linux
- SELinux
- Linux GCC编译警告:Clock skew detected. 错误解决办法
- 文件描述符
- find
- 资源统计
- LVM
- Linux相关配置
- 服务自启动
- 服务器安全
- 字符集
- shell脚本
- shell命令
- 实用脚本
- shell 数组
- 循环与判断
- 系统级别进程开启和停止
- 函数
- java调用shell脚本
- 发送邮件
- Linux网络配置
- Ubuntu
- Ubuntu发送邮件
- 更换apt-get源
- centos
- 防火墙
- 虚拟机下配置网络
- yum重新安装
- 安装mysql5.7
- 配置本地yum源
- 安装telnet
- 忘记root密码
- rsync+ crontab
- Zabbix
- Zabbix监控
- Zabbix安装
- 自动报警
- 自动发现主机
- 监控MySQL
- 安装PHP常见错误
- 基于nginx安装zabbix
- 监控Tomcat
- 监控redis
- web监控
- 监控进程和端口号
- zabbix自定义监控
- 触发器函数
- zabbix监控mysql主从同步状态
- Jenkins
- 安装Jenkins
- jenkins+svn+maven
- jenkins执行shell脚本
- 参数化构建
- maven区分环境打包
- jenkins使用注意事项
- nginx
- nginx认证功能
- ubuntu下编译安装Nginx
- 编译安装
- Nginx搭建本地yum源
- 文件共享
- Haproxy
- 初识Haproxy
- haproxy安装
- haproxy配置
- virtualbox
- virtualbox 复制新的虚拟机
- ubuntu下vitrualbox安装redhat
- centos配置双网卡
- 配置存储
- Windows
- Windows安装curl
- VMware vSphere
- 磁盘管理
- 增加磁盘
- gitlab
- 安装
- tomcat
- Squid
- bigdata
- FastDFS
- FastFDS基础
- FastFDS安装及简单实用
- api介绍
- 数据存储
- FastDFS防盗链
- python脚本
- ELK
- logstash
- 安装使用
- kibana
- 安准配置
- elasticsearch
- elasticsearch基础_1
- elasticsearch基础_2
- 安装
- 操作
- java api
- 中文分词器
- term vector
- 并发控制
- 对text字段排序
- 倒排和正排索引
- 自定义分词器
- 自定义dynamic策略
- 进阶练习
- 共享锁和排它锁
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- Redis
- redis部署
- redis基础
- redis运维
- redis-cluster的使用
- redis哨兵
- redis脚本备份还原
- rabbitMQ
- rabbitMQ安装使用
- rpc
- RocketMQ
- 架构概念
- 安装
- 实例
- 好文引用
- 知乎
- ACK
- postgresql
- 存储过程
- 编程语言
- 计算机网络
- 基础_01
- tcp/ip
- http转https
- Let's Encrypt免费ssl证书(基于haproxy负载)
- what's the http?
- 网关
- 网络IO
- http
- 无状态网络协议
- Python
- python基础
- 基础数据类型
- String
- List
- 遍历
- Python基础_01
- python基础_02
- python基础03
- python基础_04
- python基础_05
- 函数
- 网络编程
- 系统编程
- 类
- Python正则表达式
- pymysql
- java调用python脚本
- python操作fastdfs
- 模块导入和sys.path
- 编码
- 安装pip
- python进阶
- python之setup.py构建工具
- 模块动态导入
- 内置函数
- 内置变量
- path
- python模块
- 内置模块_01
- 内置模块_02
- log模块
- collections
- Twisted
- Twisted基础
- 异步编程初探与reactor模式
- yield-inlineCallbacks
- 系统编程
- 爬虫
- urllib
- xpath
- scrapy
- 爬虫基础
- 爬虫种类
- 入门基础
- Rules
- 反反爬虫策略
- 模拟登陆
- problem
- 分布式爬虫
- 快代理整站爬取
- 与es整合
- 爬取APP数据
- 爬虫部署
- collection for ban of web
- crawlstyle
- API
- 多次请求
- 向调度器发送请求
- 源码学习
- LinkExtractor源码分析
- 构建工具-setup.py
- selenium
- 基础01
- 与scrapy整合
- Django
- Django开发入门
- Django与MySQL
- java
- 设计模式
- 单例模式
- 工厂模式
- java基础
- java位移
- java反射
- base64
- java内部类
- java高级
- 多线程
- springmvc-restful
- pfx数字证书
- 生成二维码
- 项目中使用log4j
- 自定义注解
- java发送post请求
- Date时间操作
- spring
- 基础
- spring事务控制
- springMVC
- 注解
- 参数绑定
- springmvc+spring+mybatis+dubbo
- MVC模型
- SpringBoot
- java配置入门
- SpringBoot基础入门
- SpringBoot web
- 整合
- SpringBoot注解
- shiro权限控制
- CommandLineRunner
- mybatis
- 静态资源
- SSM整合
- Aware
- Spring API使用
- Aware接口
- mybatis
- 入门
- mybatis属性自动映射、扫描
- 问题
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- mybatis-SQL
- 逆向生成dao、model层代码
- 反向工程中Example的使用
- 自增id回显
- SqlSessionDaoSupport
- invalid bound statement(not found)
- 脉络
- beetl
- beetl是什么
- 与SpringBoot整合
- shiro
- 什么是shiro
- springboot+shrio+mybatis
- 拦截url
- 枚举
- 图片操作
- restful
- java项目中日志处理
- JSON
- 文件工具类
- KeyTool生成证书
- 兼容性问题
- 开发规范
- 工具类开发规范
- 压缩图片
- 异常处理
- web
- JavaScript
- 基础语法
- 创建对象
- BOM
- window对象
- DOM
- 闭包
- form提交-文件上传
- td中内容过长
- 问题1
- js高级
- js文件操作
- 函数_01
- session
- jQuery
- 函数01
- data()
- siblings
- index()与eq()
- select2
- 动态样式
- bootstrap
- 表单验证
- 表格
- MUI
- HTML
- iframe
- label标签
- 规范编程
- layer
- sss
- 微信小程序
- 基础知识
- 实践
- 自定义组件
- 修改自定义组件的样式
- 基础概念
- appid
- 跳转
- 小程序发送ajax
- 微信小程序上下拉刷新
- if
- 工具
- idea
- Git
- maven
- svn
- Netty
- 基础概念
- Handler
- SimpleChannelInboundHandler 与 ChannelInboundHandler
- 网络编程
- 网络I/O
- database
- oracle
- 游标
- PLSQL Developer
- mysql
- MySQL基准测试
- mysql备份
- mysql主从不同步
- mysql安装
- mysql函数大全
- SQL语句
- 修改配置
- 关键字
- 主从搭建
- centos下用rpm包安装mysql
- 常用sql
- information_scheme数据库
- 值得学的博客
- mysql学习
- 运维
- mysql权限
- 配置信息
- 好文mark
- jsp
- jsp EL表达式
- C
- test