1.root下创建用户neusoft
useradd neusoft
2.修改账号密码
passwd neusoft
3.文件权限
ls - l
第一列为类型(文件/目录/链接等),第二列到第四列为文件所有者的权限,第五列到第七列为用户组其他用户的权限,第八列到第十列为其他用户组用户权限。
以当前用户权限作为说明,r(数字表示为4)代表可读,w(数字表示为2)代表可写,x(数字表示为1)代表可执行
一个文件是否可以执行仅与x权限有关,与文件“扩展名”无关,借用一句话“linux中所有对象都是文件”并且这三组权限,每组都是按,读写执行即(rwx)顺序排布。
#赋予运行权限(u为当前文件所属用户、g为所属用户的用户组内其他用户、o为其他用户组用户,a为所有用户。a=u+g+o)
chmod a+x filename
chmod g+x filename
chmod o+x filename
chmod u+x filename
#递归更改/home/neusoft权限为755(7代表所属用户具有:读写运行;第一个5代表所属用户的用户组内其他用户权限:读、运行;第二个5代表其他用户组用户权限:读、运行)
chmod -R 744 /home/neusoft
#3.更改文件所有者及所属用户组
chown neusoft.neusoft filename
#递归修改
chown -R neusoft.neusoft /home/neusoft
#4.命令执行与最小权限
(a)修改A目录下的a文件:对A至少有x权限,对a至少有r与w权限。
(b)读取A目录下的a文件:对A至少有x权限,对a至少有r的权限。
(c)在A目录下创建新文件c:对A至少有w与x权限。
(d)执行A目录下的a文件:对A与a均至少有x权限。
4.切换工作目录
#切换到某个目录
cd /usr/local
#进入当前目录下的src目录
cd ./src
#进入当前目录上一级目录下的src目录
cd ../src
#进入当前用户主目录
cd ~
#返回上一次执行cd命令的目录
cd -
5.查看当前目录
pwd
#或
dir
6.追踪日志文件(内容随时间递增的文件)
#tail -200f /var/log/redis.log
tail -200f 文件路径/文件名
7.将文件内容输出到控制台
cat 文件路径/文件名
8.切换用户
su - neusoft
9.切换到管理用户
su - root
10.创建目录
mkdir 目录名
#递归创建目录
mkdir -p /home/neusoft/neusoft/src/
11.创建文件
#Linux下一切皆为文件,扩展名唯一作用:文件类型(.sh为shell脚本,.conf一般为配置文件,.log一般为日志)
#1.法一
touch filename
#2.法二
echo >filename
#3.法三
vim filename
12.vim编辑器(英文输入法下)
#1.关闭保存
wq!
#2.强制退出
q!
#3.进入编辑模式,英文输入法下输入
i 或者 o 或者 a 或者 insert
#4.匹配关键字,英文输入法下
/关键字
#5.光标移动到行尾
shift + 4
#6.光标移动到第一段
shift + h
#7.光标移动到最后一段
shift + g
#8.将当前行找到的所有str1替换为str2
:s/str2/str2/g
13.查看进程信息
#ps -ef|grep 进程关键字
ps -ef|grep redis
14.输出类型
linux下输出分为两种:1标准输出、2标准错误输出
#执行install-all.sh文件 将标准输出重定向到当前目录下install.log文件中,如果该文件存在,则覆盖。不存在,则创建。将标准错误输出置空
sh install-all.sh >./install.log 2>/dev/null
15.管道命令(过滤网)
只有标准输出可以通过管道,管道用‘|’表,左侧为输入
#列出当前目录下所有文件,查找所有以.sh结尾文件打印到控制台
ls -a |grep *.sh
16.覆盖与追加
>表示覆盖源文件内容 >>表示追加内容到源文件
ls -a >test.log
ls -a >>test.log
17.将命令放入后台执行
nohup + 命令 + &
#例子
nohup sh install-all.sh &
18.执行shell脚本(类比bat)
#1.常用
sh install.sh
#2.推荐,如果install.sh有export等语句用这个
source install.sh
#3.文件必须有执行权限
./install.sh
19.连接其他主机ssh
#ssh 用户名@IP
ssh [email protected]
20.拷贝文件cp
#cp 文件目录/文件名 目标目录
cp install.sh /etc/redis
#本地备份
cp install.sh install.sh.bak
#跨主机拷贝
scp install.sh [email protected]:~/
21.移动文件与重命名mv
#移动文件:mv 文件目录/文件名 目标目录
mv ./install.sh /root
#文件重命名
mv install.sh install-all.sh
22.删除文件rm
#-f表示强制(force)
rm -f 文件目录/文件名
**慎用**
#删除目录(递归删除)
rm -rf /home/neusoft/src
23.通配符*
#删除当前目录下所有以.log结尾的文件
rm -f ./*.log
24.列出文件ls
ls /home/neusoft
25.杀死进程kill
#暴力杀
kill -9 PID
#PID由 ps -ef|grep 进程关键字 获取
26.别名alias
#1.即时生效
alias ll='ls -l'
#2.永久生效
echo alias ll='ls -l' >> ~/.bash_profile
source ~/.bash_profile
27.判断当前主机是否与B主机能进行http通信
ping 192.168.174.1
28.压缩与解压缩
#解.tar.gz文件压缩
tar zxvf 压缩文件路径/文件名 -C 解压目录
#压缩
#tar zvcf 压缩后文件名 压缩的目录或文件
tar zcvf redis.tar.gz /root/redis
29.清除打印台输出
clear
30.产看当前主机ip
ip a
1.查看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
2.开放端口
#root下
iptables -I INPUT -p tcp --dport 7001 -j ACCEPT
3.关闭安全模式与防火墙
##root下关闭防火墙##
#centos7
systemctl stop firewalld.service
systemctl disable firewalld.service
#centos6
service iptables stop
chkconfig iptables off
##root下关闭安全模式##
#1. 永久有效
修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。
#2. 即时生效
setenforce 0
4.查看端口占用
netstat -apn |grep 8080
5.查看端口是否可以访问
#需要安装telnet
telnet 192.168.1.1 8080
6.查看内存
#单位为g
free -h
#单位为m
free -m
7.查看系统版本
uname -r
8.查看当前进程数
ps aux | wc -l
9.清除僵尸进程
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
10.清理缓存
echo 1 >/proc/sys/vm/drop_caches
11.控制台光标移动
#移动到命令的末尾
ctrl + e
#移动到命令的开头
ctrl + a
1.截取字符
#截取第一个字符(判断系统版本执行相应命令:例如关闭防火墙)
uname -r |cut -b 1
2.正则替换
#1.不含变量替换(将/etc/redis.conf中的6379全局替换为6380,不加g只会替换第一个)
sed -i 's#6379#6380#g' /etc/redis.conf
#2.替换变量
LOCAL_IP=192.168.1.1
sed -i "s#127.0.0.1#$LOCAL_IP#g" /etc/redis.conf
3.清空文本内容
echo "" >/root/auth.log
> /root/autg.log
true > /root/auth.log
4.向文本内添加多行数据
#截取脚本中部分内容
cat >>/root/test.txt <
5.cut、sed与awk混合使用
java -version 2>&1|sed -n '1p'|awk '{gsub(/"/,"");print $3}'|cut -c 1-3
6.vim进阶
#1.打开文件定位到关键字第一次出现的位置
vim ~/.bash_profile + /export
#2.x!=wq!
#3.翻页
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
#4.文字替换
R进入替换模式
7.当前编辑文件放入后台
ctrl + z
#返回编辑
fg
8.删除文件内的空白行
sed -i '/^$/d' filename
9.删除所有以#开头的行
sed -i '/^#/d' filename
10.输出文件1到3行
sed -n '1,3p' file1
head -3 file1
11.批量删除空白文件
find /data -type f -size 0c|xargs rm –f
1.快速遍历
#1.配合通配符批量启动服务
for var in `ls *.sh | grep start |grep -v`;do
sh $var
done
#2.配合sshpass连接主机做批量操作
for var in 192.168.174.{41..49};do
sshpass -p passwd scp -r /root/redis root@$var:~/
done
2.switch-case
function main
{
case $1 in
"a" | "all" )
echo "none"
;;
"d" | "docker" )
docker_instal
;;
esac
}
main
3.设置环境变量,弹性安装
#redis安装脚本install-all.sh中部分代码
export REDIS_HOME=`pwd`
...
cp $REDIS_HOME/conf/* /etc/redis/
4../install.sh、sh install.sh 与 source install.sh区别
#1.前两者在文件拥有可执行权限的时候效果等同
#2.sh install.sh 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
#3.source install.sh 在当前进程执行install.sh里的命令,脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
#4.sh install.sh中使用export var=value,仅仅将变量导入子进程的环境变量中。
#5.source install.sh中使用export var=value,会将变量导入当前shell中。
5.变量与环境变量
#系统级:所有用户均可以使用
/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/bashrc文件。
/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量
#用户级
(1)~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方
(2)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。
#配置读取过程
Linux系统默认使用的shell为bash,在shell启动的时候会读取根据情况读取.bash_profile和.bashrc文件。
#1.非Login
准确的说,当shell是交互式登录shell时,读取.bash_profile文件,如在系统启动、远程登录或使用su -切换用户时;当shell是交互式登录和非交互式登录shell时都会读取.bashrc文件,如:在图形界面中打开新终端或使用su切换用户时,均属于非登录shell的情况。
简单的说,.bash_profile只在会话开始时被读取一次,而.bashrc则每次打开新的终端时,都会被读取。
#2.Login下执行顺序:
/etc/profile->( profile.d/*.sh 等) -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc ->/etc/bashrc -> ~/.bash_logout
其中只会读取~/.bash_profile 、 ~/.bash_login 、 ~/.profile的一个,优先级为从左到右
#配置文件简述
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
advantages:规范化、合理化、便于反安装、不”污染”系统环境
1.配置文件目录
/etc/redis
2.安装包等
/tpm
3.日志文件
/var/log/redis
4.工作目录
/var/data/redis
5.操作脚本目录(redis-cli、redis-server)
/root/bin
6.安装目录
/usr/local
或
/opt
1.文件默认权限
#查看创建新的文件或目录的默认权限:
umask -S 显示文件、目录的默认权限
#输出为u=rwx,g=rwx,o=rx (文件权限:664,文件默认无x属性;目录权限为:775)
#亦可用umask直接查看
输出为0002 只跟后三位即002有关。777-002=775即为目录权限,775-111=644即为文件属性
touch test.txt;mkdir test touch test.txt;mkdir test
2.umask简介
如下图所示,umask为内置shell位置为/usr/bin/umask
3.设置umask
(a)临时有效(重新登录无效):
umask 0226 (目录权限:777-226=551 文件权限:551-111=440)
umask 查看umsk是否修改成功
touch year.txt;mkdir year 创建文件、目录
ll 查看权限
exit 退出当前用户
su - make -c "umask" 查看make umask
输出结果为 0002
(b)永久有效
对全用户:/etc/profile.d/下新建644权限文件 umask.sh 将 umask 0226写入并source处理
对当前用户:~/.bash_profile内 添加 umask 0226 并source处理
4.文件隐藏属性(Etx2/Etx3文件系统下)
a属性
root下
cd ~
touch test.txt
chattr +a test.txt 添加a属性,设置后只能增加数据,不可删除数据,不可修改数据。
lsattr 显示隐藏属性
echo "a" >> test.txt
echo "b" >> test.txt
echo "c" >> test.txt 添加三行内容
sed -i '2d' test.txt 尝试删除第二行内容
sed: cannot rename ./sedZXXs09: Operation not permitted 屏幕输出,删除失败
cat test.txt 确认是否删除,屏幕输出三行内容,删除确实未执行
chattr -a test.txt 去除a属性
sed -i '2d' test.txt 再次尝试删除第二行内容
cat test.txt 输出两行内容’a,c’,删除成功
i属性
设置后,文件无法被删除、改名、写入或修改数据、设置链接等。
5.非交互式创建公钥
#Linux下
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
6.查看文件内容
#空格下一页
less filename
1.ssh远程主机本地文件作为标准输入
ssh [email protected] 'cat >>~/test.txt' < /usr/local/print.txt
2.远程执行多个命令
ssh [email protected] <java -version
>mkdir -p /usr/local/nginx
>echo ''
>EOF
6.第一次使用ssh免确认
ssh -o StrictHostKeyChecking=no user@IP
1.将本地80端口的请求转发到8080端口,当前主机外网IP为202.96.85.46
-A PREROUTING -d 202.96.85.46 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.9.10:8080
使用场景:调试 && 脚本显示进度
\e[1;31m 将颜色设为 **
\e[0m还原为默认颜色
1.打印彩色字
#1.打印红色字
echo -e "\e[1;31m 测试 \e[0m"
#2.打印绿色字
echo -e "\e[1;32m 测试 \e[0m"
#3.打印黄色字
echo -e "\e[1;33m 测试 \e[0m"
#4.打印蓝色字
echo -e "\e[1;34m 测试 \e[0m"
#5.打印洋红色字
echo -e "\e[1;35m 测试 \e[0m"
#6.打印青色字
echo -e "\e[1;36m 测试 \e[0m"
#7.打印白色字
echo -e "\e[1;37m 测试 \e[0m"
2.打印带背景颜色字
#1.打印红色背景字
echo -e "\e[1;41m 测试 \e[0m"
#2.打印绿色背景字
echo -e "\e[1;42m 测试 \e[0m"
#3.打印黄色背景字
echo -e "\e[1;43m 测试 \e[0m"
#4.打印蓝色背景字
echo -e "\e[1;44m 测试 \e[0m"
#5.打印洋红色背景字
echo -e "\e[1;45m 测试 \e[0m"
#6.打印青色背景字
echo -e "\e[1;46m 测试 \e[0m"
#7.打印白色背景字
echo -e "\e[1;47m 测试 \e[0m"
3.echo -n 不输出新行
echo -n Count;
tput sc
count=0
while true;
do
if [ $count -lt 40 ];
then let count++;
sleep 1;
tput rc
tput ed
echo -n $count
else exit 0;
fi
done
#PID 为进程号(以回车而不是"null"分割变量)
cat /proc/PID/environ | tr '\0' '\n'
var=12122143235325
echo ${#var}
#输出为0则为超级用户否则不是
echo $UID
#for example
if [ $UID -ne 0 ]; then
echo Non root user.
else
echo Root user
fi
1.let运算
#1.let运算 变量不用加$
num1=3
num2=4
let sum=num1 + num2
echo $sum
#2.自增
let num1++
#3.自减
let num1--
2.expr
sum=`expr 3 + 4`
3.浮点运算
#精确到小数点后3位
echo "scale=3; 3/7" | bc
4.二进制与十进制转换
#1.十进制转换为二进制
echo "obase=2;100"|bc
#2.二进制转换为十进制
echo "obase=10;ibase=2;0100100"|bc
5.计算平方及平方根
#1.计算幂次方
echo "10^10" | bc
#2.计算平方根
echo "sqrt(100)" | bc
#command命令的标准输出通过管道写入到file1中 备份到file2中
command | tee file1 file2
1.声明数组
#1.方式一
array=(1 2 3 4 5 6)
#2.方式二
array[0]="test1"
array[1]="test2"
.
.
.
2.输出数组长度
#1.方法一
echo ${#array[*]}
#2.方法二
echo ${#array[@]}
3.索引数组元素
echo ${array[2]}
4.打印所有元素
#1.方法一
echo ${array[*]}
#2.方法二
echo ${array[@]}
#屏幕输出set -x 与 set +x 之间的命令及命令输出情况
for i in {1..6};do
set -x
echo $i
set +x
done
echo finish
#将父进程的函数 export到环境变量中 子进程可以直接调用
#1.father proccess
echo father proccess
f()
{
echo 56
}
f
export -f f
sh son.sh
#2.子进程
echo son proccess
f
#输出文件内容并显示每行内容行数
cat 文件名 | cat -n
#1.()内的命令 不影响父进程
pwd
(cd /home/;ls)
pwd
#2.将1中的命令 放入脚本中,观察shell执行命令的方式为:开辟子进程执行
#当前目录为 /root/test.sh
sh test.sh
#sh test.sh 会开辟一个线程a执行,执行到()中的内容 会开辟一个新的子线程b执行,执行完毕返回父线程a,脚本全部执行完毕会返回到a的父进程当中。
#1.限制输入内容为2个字符,并不以回车符的方式读取输入内容
read -n 2 var
echo $var
#2.限定时间内输入
read -t 2 var
echo $var
#3.提示输入信息
read -p "输入密码:" var
echo $var
#4.用 界定符号结束输入(仅取第一个符号)
read -d ":" var
echo $var
#5.隐式输入
read -s var
echo $var
1.不区分大小写
find /home/test -iname '**ds.txt'
2.按类型检索
find /home/test -type d
find /home/test -type f
find /home/test -type l
md5sum filename
#文件总大小为bs * count
dd if=/dev/zero of=testfile bs=1G count=3
#推入栈中
pushd /home/jz/neusoft/bin
#查看栈中的目录编号
dirs -v
#进入指定目录
pushd +n
#统计行数
wc -l filename
#统计单词数
wc -w filename