软链接
创建软链接
1 | ln -s 【目标目录】 【软链接地址】 |
【目标目录】指软链接指向的目标目录,【软链接地址】指“快捷键”文件名称,该文件是指被指令创建的。
删除软连接
1 | rm -rf 【软链接地址】 |
上述指令中,软链接地址最后不能含有“/”,当含有“/”时,删除的是软链接目标目录下的资源,而不是软链接本身。
修改软连接
1 | ln -snf 【新目标目录】 【软链接地址】 |
这里修改是指修改软链接的目标目录
修改主机名
临时方法
hostname 主机名 //只能临时修改主机名,当重启机器后,主机名称又变回来了。
1 | hostname xxx |
永久生效
永久修改主机名称,重启后能保持修改。
1 | hostnamectl set-hostname xxx |
永久生效
修改配置文件/etc/hostname来实现主机名的修改。把该文件内容hostname name中的name替换成自己想要的主机名重启即可。
1 | vim /etc/hostname |
安装基础服务
出现-bash: ***: command not found
安装telnet
1 | yum list telnet* |
安装wget
1 | yum install -y wget |
安装rzsz
1 | yum install -y lrzsz |
CentOS7硬盘分区,删除分区,格式化分区硬盘,支持4T硬盘,fdisk,parted简单用法
查看分区表状态
先查看是否有磁盘没有分区
1 | fdisk -l |
用fdisk对/dev/sdb进行分区(注意:超过2T硬盘要使用Parted分区)
1 | fdisk /dev/sdb |
输入m,或者help可以查看命令操作
输入p 可查看当前硬盘分区状态
输入n新建一个分区,输入p 建立分区,输入分区编号 1
然后会让你设置开始扇区,我填的是开始扇区2048,结束,20480
最后输入w,回车进行保存,分的区才会生效(切记!)
退出:quit
Parted分区
将磁盘上原有的分区删除掉
进入:parted /dev/sdb
查看:(parted) p
删除:(parted) rm 1
(parted) rm 2
将磁盘格式变成gpt格式(因为parted只能针对gpt格式的磁盘进行操作)
转换:(parted) mklabel gpt
设置单位:(parted) unit MB(GB, TB)
分区:(parted) mkpart primary 1 -1
查看:(parted) p
退出:(parted) quit(parted分区自动保存,不用手动保存)
格式化已经分好的区
1 | mkfs.xfs -f /dev/sdb1 |
挂载
目标:分区/dev/sdb1挂载至/data目录。
创建目录,如果目录中存在内容,请先备份,在挂载完成后重新复制回来。
1 | #创建目录 |
开机自动挂载
1 | echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab |
Linux文件系统
/var:包含在正常操作中被改变的文件、假脱机文件、记录文件、加锁文件、临时文件和页格式化文件等。/home:包含用户的文件:参数设置文件、个性化文件、文档、数据、EMALL、缓存数据等,每增加一个用户,系统就会根据其用户名在 home 目录下新建和其他用户同名的文件夹,用于保存其用户配置。/proc:包含虚幻的文件,他们实际上并不存在于磁盘上,也不占用任何空间(用 ls-l 可以显示它们的大小)当查看这些文件时,实际上是在访问存在内存中的信息,这些信息用于访问系统。/bin:包含系统启动时需要的执行文件(二进制),这些文件可以被普通用户使用。/etc:为操作系统的配置文件目录(防火墙、启动项)/root:为系统管理员(也叫超级用户或根用户)的 Home 目录。/dev:为设备目录,Linux 下设备被当成文件,这样一来硬件被抽象化、便于读写、网络共享以及需要临时装载到文件系统中,正常情况下,设备会有一个独立的子目录,这些设备的内容会出现在独立的子目录下。
Linux命令操作
查看当前目录命令:
pwd打开文件夹命令:
cd- 打开指定文件夹:
cd [目录名称] - 打开当前用户的根目录:
cd ~ - 返回上级目录:
cd … - 返回进入目录:
cd - - 打开根目录:
cd /
- 打开指定文件夹:
浏览目录下的文件列表命令:
ls- 以列的方式查看当前目录下的文件列表:
ls -l - 查看当前目录下所有的文件(包括隐藏文件):
ls -a - 以列表的方式查看当前目录下的所有文件:
ls -la
- 以列的方式查看当前目录下的文件列表:
创建文件目录命令:
mkdir- 新建文件目录:
mkdir 文件夹名称 - 递归新建多级目录:
mkdir -p 文件夹名称 - 例如在用户目录下新建 test 目录,命令这样写:
mkdir -p test/test1/test2/test3递归新建多级目录的写法
- 新建文件目录:
删除文件目录命令:
rmkdir删除指定目录:
rmkdir 目录名称递归删除指定目录及中间目录:
rmdir -p 目录名称这里没有写错,没有字母 k
删除文件或者目录命令:
rm- 常用命令:
rm -rf [目录或文件]rm -ri [目录或文件] - 强制删除文件或目录:
rm -rf 目录或者文件 - 在删除前询问是否确认删除:
rm -ri 目录或文件
- 常用命令:
因为强制删除的后果不太好,一般不建议使用
rm -rf进行文件删除rm 命令中不跟 r 参数,无法删除目录,只能删除文件
复制文件或目录命令:
cp- 递归复制目录1下的所有的文件和文件夹到目录2:
cp -r [目录1][目录2] - 执行复制操作时覆盖原有目录前询问用户:
cp -ri [目录1][目录2]
- 递归复制目录1下的所有的文件和文件夹到目录2:
移动文件、修改文件名命令:
mv- 将文件夹1名称更改为文件夹2:
mv 文件1 文件2(给文件更名) - 将目录1的文件移动到目录2:
mv 目录2 目录2(将目录1的文件移动到目录2)
- 将文件夹1名称更改为文件夹2:
创建文件命令:
touch- touch 文件名称
查看、编辑文件命令:
vi- vi 命令为 UNIX 操作系统或者类 UNIX 操作系统都有具有的功能强大的文件编辑命令,用户输入 vi ++ 文件名,便可以进入 vi 模式进行文件内容的查看和编辑,如果文件已经存在,则直接打开文件,如果文件不存在,则系统将打开一个全新的空文件。
vi的三种模式:
- 命令模式
当用户使用 vi 命令打开文件后,则进入命令模式,用户可以输入命令来执行各种功能。
| 取值 | 说明 |
|---|---|
| L | 光标移至屏幕最后一行 |
| space | 光标右移一个字符 |
| backspace | 光标左移一个字符 |
| N+ | 光标向上移动N行 |
| n+ | 光标向下移n行 |
- 输入模式
如果用户要对文件做修改,则可以使用下面几种命令,进入输入模式,用户进入输入模式之后,可以任意修改文件,除了 Esc 键外,用户输入的任何字符都会被作为内容写入文件中,用户输入 Esc 可以对文件进行相关操作。
| 取值 | 说明 |
|---|---|
| a、i、r、o、A、I、R、O | 编辑模式 |
| dd | 删除当前光标 |
| ndd | 删除n行 |
- 末行模式
如果用户完成编辑命令,则可以按照 esc + “:” 进入末行模式,用户可以对文件内容继续进行搜索,也可以输入 “:wq!” 进行文件保存并退出,或者输入 “:q!” 强制退出文件编辑。
| 取值 | 说明 |
|---|---|
| :wq! | 保存并退出 |
| :q! | 强制退出 |
| :s/字符串 1/字符串 2 | 将文件中出现的字符串1替换为字符串2 |
| :set nu | 显示所有行号 |
查看、编辑文件命令:
cat- 显示一个小的文件的内容:
cat 文件名称 - 创建并打开一个新的文件:
cat > 文件名称
- 显示一个小的文件的内容:
查看文件开头内容命令:
headhead [参数] [文件名]
例如,使用 head 命令显示某个文件开始的 n 行数据:head -n 文件名称
| 取值 | 说明 |
|---|---|
| -n | <行数>显示的行数 |
| 默认 | 默认显示文件前10行数据 |
查看文件结尾内容命令:
tail- 动态加载某个文件的内容(常用于查看日志文件):
tail -f 文件名称 - 展示文件最后几行的数据:
tail -n 行数文件名称
- 动态加载某个文件的内容(常用于查看日志文件):
Linux用户操作命令
切换用户命令:
susu [用户名]或者su -[用户名]su[用户名]和su -[用户名]都可以切换用户,前者类似于临时切换用户,当使用该命令进行切换新用户时,用户配置仍然沿用原来的用户配置,如环境变量、系统变量等。而后者进行切换用户时,环境变量、系统设置全部切换成新用户的用户配置。
查看当前登陆用户命令:
whoami查看当前用户所属分组命令:
groups查看当前用户 UID 和 GID 命令:
id添加新用户命令:
useradd
| 取值 | 说明 |
|---|---|
| -c | 代表comment指定一段注释性描述 |
| -d | 指定用户主目录 |
| -g | 指定用户所属的用户组 |
| -G | 指定用户所属的附加组 |
| -u | 指定用户的用户号 |
| 缺省 | 直接添加用户 |
在 Linux 操作系统中添加用户:useradd 用户名
在 Linux 操作系统中添加用户并指定用户 UID:useradd -u 指定的 UID 用户名
- **修改用户密码命令:
passwd**例如:修改当前用户名为 sang 的用户密码:passwd sang
在添加用户之后,只有为其设置密码,用户才能登陆
| 取值 | 说明 |
|---|---|
| -d | 删除密码,仅有系统管理员才能使用 |
| -f | 强制执行 |
| -k | 设置只有密码过期后才能更新 |
| -l | 锁着密码 |
| -s | 列出相关信息,仅有系统管理员才能使用 |
| -u | 解开已上锁的账号 |
删除用户命令:
userdel- 删除用户:
userdel 用户名 - 删除用户并同时删除其登陆信息:
userdel -r 用户名
- 删除用户:
| 取值 | 说明 |
|---|---|
| -r | 删除用户以及其登录日志等信息 |
| -f | 强制删除用户,即使用户已经登录 |
| 缺省 | 直接删除用户 |
修改用户信息命令:
usermod- 语法:
usermod [选项] [参数] [用户名] - 修改用户登录名:
usermod -l 新用户名 旧用户名 - 修改用户所属分组:
usermod -g 新组名称 用户名
- 语法:
| 取值 | 说明 |
|---|---|
| -c | 修改用户账号的备注文字 |
| -d | 修改用户登录时的目录 |
| -e | 修改账号的有效期 |
| -f | 修改密码过期后多少天关闭账号 |
| -g | 修改用户所属的群组 |
| -G | 修改用户所属附加组 |
| -l | 修改用户账号名称 |
| -L | 锁定用户密码,使密码无效 |
| -u | 修改用户id |
| -U | 解除密码锁定 |
添加用户组命令:
groupadd语法:
groupadd [选项] [组名称]修改用户登陆名:
groupadd 组名修改用户所属分组:
groupadd -g 组 GID 组名
| 取值 | 说明 |
|---|---|
| -g | 指定工作组的id |
| -r | 创建系统工作组 |
| -o | 允许添加组ID不唯一的工作组 |
| 缺省 | 添加用户分组 |
Linux权限操作
Linux 操作系统为文件定义了读、写、执行三种权限,不同的用户或者用户组可以具有不同的权限,系统采用 “r”、“w”、“x” 来分别表示文件的读、写、执行权限。使用 ls -l 命令可以查看到用户在当前目录或者文件的操作权限。
1 | drwxr -xr -x. 2 root root 4096 Sep 23 2011 bin |
从左至右分别表示如下含义:
d:代表 bin 数目目录而不是文件rwx:代表拥有者具有读、写、执行的权限r -x:代表同组用户具有读、执行的权限,但是没有写权限r -x:代表其他组用户具有读、执行权限,没有写权限
常用的变更权限命令为:chmod
语法:chmod [选项] [参数]
| 取值 | 说明 |
|---|---|
| -c | 显示指令执行过程,但只返回更改的部分 |
| -f | 不显示错误信息 |
| -r | 递归授权 |
| -v | 显示指令执行过程 |
chmod 的参数可以分为两种,分别是权限模式和数字模式。
- 权限模式
权限模式使用 u、g、o 分别代表拥有者、同组用户、其他组用户,使用 + 和一代表赋予和收回权限,使用 r、w、x 代表读、写、执行权限。
例如:将文件01的执行权限给当前用户,写权限赋给用户所在的用户组和其他用户。
1 | chmod -r U+X,G+W F01 |
例如:将文件 f01 的读、写、执行的权限赋给当前用户,将读、写权限赋给用户所在的用户组和其他用户。
1 | chmod -r u=rwx,g=rw,o=rw f01 |
- 数字模式
为了简化授权步骤,用户也可以采用数字模式进行授权,使用二进制的形式代表 r、w、x 三种权限,如 101 (5) =r -x,111 (7) =rwx,100 (3) =r- -
例如:将文件 f01 的读、写、执行的权限赋给当前用户,将读和执行权限赋给用户组、将写和执行权限赋给其他用户。
1 | chmod 753 -r f01 |
例如:将文件 f01 的读、写、执行权限赋给所有用户。
1 | chmod 777 -r f01 |
Linux进程管理
在 Linux 的应用中,我们需要对进程进行管理,如查看某个进程是否启动、以及在必要的时刻,杀掉某个线程。
- 查看进程命令:ps
ps 命令是 Linux 操作系统中查看进程的命令,通过 ps 命令我们可以查看 Linux 操作系统中正在运行的过程,并可以获得进程的 PID(进程的唯一标识),通过 PID 可以对进程进行相应的管理。
1 | ps -ef | grep [进程关键字] |
根据进程关键词查看进程命令显示如下,显示的进程列表中第一列表示开启进程的用户,第二列表示进程唯一标识 PID,第三列表示父进程 PPID,第四列表示 CPU 占用资源比列,最后一列表示进程所执行程序的具体位置。
1 | [root@localhost ~]$ ps -ef|grep sshd |
- 杀掉进程命令:kill
当系统中有进程进入死循环,或者需要被关闭时,我们可以使用 kill 命令对其关闭。
kill -9 [PID] PID 为 Linux 操作系统中进程的标识
Linux其他常用命令大全
- 清屏命令:clear
- 查询命令详细参数命令:man
- 挂载命令:mnt
- 远程连接服务 SSH 相关命令:
- 启动 SSH 服务命令:
service sshd start - 重启 SSH 服务命令:
service sshd restart - 关闭 SSH 服务命令:
service sshd stop
Linux 大多数情况下都是远程服务器,开发者通过远程工具连接 Linux ,启动了某个项目的 JAR,一旦窗口关闭,JAR 也就停止运行了,因此一般通过如下命令启动 JAR:nohup java -jar jar-0.0.1-SNAPSHOT.jar &
这里多了 nohup ,表示当前窗口关闭时服务不挂起,继续在后台运行
Linux系统软件安装
常用软件安装
Linux 下常用的软件安装方式有3种。
- tar 安装:如果开发商提供的是 tar、tar.gz、tar.bz 格式的包(其中 tar 格式的为打包后没有压缩的包,gz 结尾的是按照 gzip 打包并压缩的软件包,tar.bz 是按照二进制方式打包并压缩的软件包),可以采用 tar 包安装,tar 安装方式本质上是解压软件开发商提供的软件包,之后在通过相应配置,完成软件的安装。
- rpm 安装:rpm 安装方式是 redhat Linux 系列推出的一个软件包管理器,类似于 Windows 下的 exe 安装程序,可以直接使用 rpm 命令安装。
- yum 安装:yum 安装本质上依然是 rpm 包安装,和 rpm 安装方式的不同之处是用户可以通过 yum 参数,指定安装的软件包,系统将自动从互联网上下载相应的 rpm 软件包。而无须用户关心软件包的下载地址,以及软件包的依赖关系。
软件安装常用命令
- 解压压缩命令:
tar - 语法:
tar [选项] [压缩包] - 解压 gzip 包:
tar -zxvf [包名] - 解压 bz 包:
tar -jxvf [包名] - 解压普通包:
tar -xvf [包名]
| 取值 | 说明 |
|---|---|
| -c | 指定特定目录压缩 |
| -x | 从备份文件中还原文件 |
| -t | 列出备份文件的内容 |
| -r | 添加文件到已经压缩的文件 |
| -z | 有gzip属性的(后缀是gz的) |
| -j | 有bz2属性的(后缀是bz的) |
| -Z | 有cpmpress属性的 |
| -v | 显示所有进程 |
| -O | 将文件解压到标准输出 |
| -f | 使用档案名称 |
安装卸载命令:rpm
- 语法:
rpm [选项] [软件包] - 查询是否已经安装了某软件包:
rpm -qa|grep [软件包关键词] - 卸载已经安装的软件包:
rpm -e 软件包全名 - 安装软件包并查看进度:
rpm -ivh 软件包路径
| 取值 | 说明 |
|---|---|
| -ivh | 安装显示安装进度 |
| -Uvh | 升级软件包 |
| -qpl | 列出rpm软件包内的文件信息 |
| -qpi | 列出rpm软件包的描述信息 |
| -qf | 查找指定文件属于哪个rpm软件包 |
| -Va | 校验所有的rpm软件包,查找丢失的文件 |
| -e | 删除包 |
| -qa | 查找已经安装的rpm包 |
Linux操作系统优化
防火墙-firewalld
- 启动防火墙
1 | systemctl start firewalld |
- 重启防火墙
1 | systemctl restart firewalld |
- 关闭防火墙
1 | systemctl stop firewalld |
- 查看防火墙的状态
1 | systemctl status firewalld |
- 设置开机启动
1 | systemctl enable firewalld |
- 设置开机不启动
1 | systemctl disable firewalld |
- 查看防火墙服务是否设置开机启动
1 | systemctl is-enabled firewalld |
关闭-Selinux
- 查看Selinux
1 | [root@localhost ~]$ sestatus |
- 临时关闭
1 | [root@localhost ~]$ setenforce 0 |
- 永久关闭
1 | #编辑配置文件 |
关闭透明大页-THP
- 查看透明大页情况
1 | cat /sys/kernel/mm/transparent_hugepage/defrag |
- 关闭透明大页
1 | [root@localhost ~]$ vim /etc/rc.d/rc.local |
- 保存退出,然后赋予rc.local文件的执行权限
1 | [root@localhost ~]$ chmod +x /etc/rc.d/rc.local |
- 重启服务器生效
1 | [root@localhost ~]$ reboot |
修改文件句柄数-open files
- 查看
1 | ulimit -a |
- 临时修改
1 | ulimit -n 4096 |
- 永久修改
1 | vim /etc/security/limits.conf |
- 重新连接生效
1 | exit |
- 查看
1 | ulimit -a |
修改进程数-max user processes
- 查看
1 | ulimit -a |
- 临时修改
1 | ulimit -u 20000 |
- 永久修改
1 | vim /etc/security/limits.conf |
- 重新连接生效
1 | exit |
- 查看
1 | ulimit -a |
修改-vm.max_map_count
max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
- 查看当前值
1 | sysctl -a | grep vm.max_map_count |
- 临时修改
1 | sysctl -w vm.max_map_count=200000 |
- 永久修改
1 | vim /etc/sysctl.conf |
- 生效
1 | sysctl -p |
修改-fs.file-max
设置系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。
- 查看系统当前值
1 | sysctl -a | grep fs.file-max |
- 临时修改
1 | sysctl -w fs.file-max=6553560 |
- 永久修改
1 | vim /etc/sysctl.conf |
- 生效
1 | sysctl -p |
【Linux】centos创建用户以及赋予sudo权限
创建用户
用户名为:test
1 | adduser test |
为该用户创建密码
1 | passwd test |
输入密码
授权
个人用户的权限只可以在本home下有完整权限,其他目录要看别人授权。而经常需要root用户的权限,这时候sudo可以化身为root来操作。
新创建的用户并不能使用sudo命令,需要给他添加授权。
sudo命令的授权管理是在sudoers文件里的。可以看看sudoers:
1 | [root@localhost ~]$ sudoers |
找到这个文件(/etc/sudoers)位置之后,查看权限:
1 | ls -l /etc/sudoers |
只有读权限,将此文件增加写权限:
1 | chmod 640 /etc/sudoers |
修改/etc/sudoers文件:添加一个新用户
找到 root ALL=(ALL) ALL在后面添加一行
test ALL=(ALL) ALL
注:可以在sudoers添加下面四行中的任意一条
1 | youuser ALL=(ALL) ALL |
保存,退出后,将文件权限改回去:
1 | chmod 440 /etc/sudoers |
这样就可以使用新用户登录,并使用sudo权限了
删除用户命令
1 | userdel -r test |
CentOS7集群配置免密登录
分别修改三台机器的hosts,配置主机影射关系
1 | vim /etc/hosts |
文件中输入以下内容:ip hostname
1 | 192.168.10.131 node1 node1 |
配置三台虚拟机免密登录
切换到用户根目录
1 | cd ~ |
生成公钥和私钥,分别在三台机器执行命令,执行命令后直接三次回车
1 | ssh-keygen -t rsa |
在用户根目录下.ssh目录中生成了两个文件,id_rsa(私钥)、id_rsa.pub(公钥)
1 | cd ~/.ssh |
将公钥复制到同一台机器,分别在三台机器执行以下命令
1 | ssh-copy-id node1 |
验证免密是否成功
远程执行Linux命令
执行简单的命令
1 | ssh root@host "df -Th" |
一次执行多条命令,使用分号把不同的命令隔起来就OK了
1 | ssh root@host "df -Th;pwd" |
添加-t参数后,ssh会保持登录状态,直到退出需要交互的命令。
1 | ssh -t root@host "df -Th" |
保存远程执行命令结果
赋值的方式
1 | result=`ssh root@host "df -Th"` |
追加到文件
1 | ssh root@host "df -Th" >> ./log |
执行本地脚本
本地创建一个脚本文件 test.sh
然后执行命令:
1 | ssh root@host < test.sh |
通过重定向stdin,本地脚本test.sh在远程服务器上被执行。
为脚本test.sh 传递一个参数,执行命令
1 | ssh root@host < test.sh helloworld |
显示了执行的结果:方法都无法为脚本传递参数。
想要在这种情况下(远程执行本地脚本)执行带有参数的脚本,需为bash指定-s参数:
1 | ssh root@host 'bash -s' < test.sh helloword |
执行远程服务器上的脚本
1 | #执行命令 |
解压缩
tar
-c 建立一个压缩文件的参数指令(相当于create )
-x 解压缩一个文件的参数指令
-z 是否同时具有gzip属性,所以也要用gzip属性来解压
-f 使用档名,注意在f 后面要立即接档名
-v 压缩过程显示文档
1 | #把根目录下的etc文件压缩在当前文件夹,并命名为ect.tar |
zip
1 | #把根目录下的etc文件压缩在当前文件夹,并命名为ect.zip |
端口占用查询
1 | lsof -i:端口号 |
创建指定大小的文件
1 | #创建一个20M,文件名为test |
查找文件命令find
find 目录 +定义类型 + f/d(文件或者目录)+ 行为(name,size等)+其他条件
find ./ -type f -size +10M :f表示文件类型,“+”表示大于,“-”表示小于,命令意思为,找到当下目录下及其所有子目录,大/小于10M的文件(M要大写)
find ./ -type d -empty|xargs rm -rf 删除当前路径下,所有为空的目录
find ./ -mtime -3 :找到3天内的文件
find ./ -mtime +3 :找到3天以前的文件
find ./ -name ‘test‘ :查找包含test的文件
find .|xargs grep abc :找到包含“abc”内容的文件
查看文件里面内容
cat passwd 查看文件的内容
cat -n passwd 显示行号
tail -200 日志文件 ,查看日志文件后200行
tail -f 日志文件 ,查看动态日志边操作,边看日志文件
head -200 前200行
head -200 access_log|cat -n 查看前200后,并且显示行号
more,less 分页查看文件的内容
查看CPU核数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
1 | # 查看物理CPU个数 |