Linux基础命令行与进阶
来源:互联网 发布:mac 必应词典下载 编辑:程序博客网 时间:2024/06/17 02:20
基础shell
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 filenamechmod g+x filenamechmod o+x filenamechmod 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.logtail -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.logls -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 用户名@IPssh root@192.168.161.11
20.拷贝文件cp
#cp 文件目录/文件名 目标目录cp install.sh /etc/redis#本地备份cp install.sh install.sh.bak#跨主机拷贝scp install.sh root@192.168.1.1:~/
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_profilesource ~/.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.系统相关
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下关闭防火墙###centos7systemctl stop firewalld.servicesystemctl disable firewalld.service#centos6service iptables stopchkconfig iptables off##root下关闭安全模式###1. 永久有效修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。#2. 即时生效setenforce 0
4.查看端口占用
netstat -apn |grep 8080
5.查看端口是否可以访问
#需要安装telnettelnet 192.168.1.1 8080
6.查看内存
#单位为gfree -h#单位为mfree -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
2.文本处理
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.1sed -i "s#127.0.0.1#$LOCAL_IP#g" /etc/redis.conf
3.清空文本内容
echo "" >/root/auth.log> /root/autg.logtrue > /root/auth.log
4.向文本内添加多行数据
#截取脚本中部分内容cat >>/root/test.txt <<EOFIP=192.168.174.44hostnme=masterEOF#第二个EOF顶格
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' file1head -3 file1
11.批量删除空白文件
find /data -type f -size 0c|xargs rm –f
3.shell编写
1.快速遍历
#1.配合通配符批量启动服务for var in `ls *.sh | grep start |grep -v`;dosh $vardone#2.配合sshpass连接主机做批量操作for var in 192.168.174.{41..49};dosshpass -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 运行的通常二者设置大致相同,所以通常前者会调用后者。
4.目录规划(编译安装redis为例)
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
5.其他
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.txtecho "b" >> test.txtecho "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
6.主机间通信相关
1.ssh远程主机本地文件作为标准输入
ssh root@192.168.1.1 'cat >>~/test.txt' < /usr/local/print.txt
2.远程执行多个命令
ssh oot@192.168.1.1 <<EOF>java -version>mkdir -p /usr/local/nginx>echo ''>EOF
6.第一次使用ssh免确认
ssh -o StrictHostKeyChecking=no user@IP
7.网络相关
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
可能用到的
1.echo
使用场景:调试 && 脚本显示进度
\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
2.获取进程所用环境变量
#PID 为进程号(以回车而不是"null"分割变量) cat /proc/PID/environ | tr '\0' '\n'
3.获取变量长度
var=12122143235325 echo ${#var}
4.查看是否为超级用户
#输出为0则为超级用户否则不是 echo $UID #for example if [ $UID -ne 0 ]; then echo Non root user. else echo Root user fi
5.算数运算
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
6.tee利用管道重定向到文件1 2中
#command命令的标准输出通过管道写入到file1中 备份到file2中 command | tee file1 file2
7.数组
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[@]}
8.脚本调试功能命令
#屏幕输出set -x 与 set +x 之间的命令及命令输出情况 for i in {1..6};do set -x echo $i set +x done echo finish
9.函数
#将父进程的函数 export到环境变量中 子进程可以直接调用 #1.father proccess echo father proccess f() { echo 56 } f export -f f sh son.sh #2.子进程 echo son proccess f
10.cat命令
#输出文件内容并显示每行内容行数 cat 文件名 | cat -n
11.括号建立子进程执行
#1.()内的命令 不影响父进程 pwd (cd /home/;ls) pwd #2.将1中的命令 放入脚本中,观察shell执行命令的方式为:开辟子进程执行 #当前目录为 /root/test.sh sh test.sh #sh test.sh 会开辟一个线程a执行,执行到()中的内容 会开辟一个新的子线程b执行,执行完毕返回父线程a,脚本全部执行完毕会返回到a的父进程当中。
12.read获取键盘输入
#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
13.find查询命令
1.不区分大小写 find /home/test -iname '**ds.txt' 2.按类型检索 find /home/test -type d find /home/test -type f find /home/test -type l
14.校验文件md5
md5sum filename
15.创建指定大小文件
#文件总大小为bs * count dd if=/dev/zero of=testfile bs=1G count=3
16.目录切换
#推入栈中 pushd /home/jz/neusoft/bin #查看栈中的目录编号 dirs -v #进入指定目录 pushd +n
17.统计文件行数、单词数
#统计行数 wc -l filename #统计单词数 wc -w filename
- Linux基础命令行与进阶
- *LINUX基础进阶
- Linux命令行操作基础
- PPT基础与进阶
- AngularJs 基础与进阶
- Dagger2基础与进阶
- Linux系统基础1-基本命令行与操作
- linux基础学习之图形界面与命令行界面切换
- 黑客进阶必读书《Linux命令行与Shell脚本编程大全》(第2版)
- Linux 命令行快速进阶(一)常用命令行
- Linux 命令行快速进阶(一)常用命令行
- Linux命令行与命令
- Linux命令行与命令
- Linux命令行与命令
- Linux命令行与命令
- VPS使用手记-Linux命令行基础
- LINUX命令行基础(上)
- LINUX命令行基础(下)
- iOS 电子白板 实现
- JavaWeb
- Java I/O
- caffe 学习笔记
- hdu1284 钱币兑换
- Linux基础命令行与进阶
- Xcode8.3 上传Appstore 报 ERROR ITMS-90534:"Invaild Toolchain. "
- 一篇关于JIT编译器的文章(关于OSR栈上替换的)
- BMP图片格式解析并显示示例程序
- python阶段小测验-不喜勿喷(奔跑在大佬的路上的第一篇文章)
- 从相册选择图片后保存到本地
- Android Databinding简单使用
- android ACache 缓存
- Android Studio调试技巧