linux学习笔记一
来源:互联网 发布:淘宝宽屏图片 编辑:程序博客网 时间:2024/05/22 18:16
1、查看linux下系统默认的shell,echao $SHELL,注意是大写的SHELL
2、将vim别名成vi步骤:
root@anLA7856:/var/log# echo "alias vi='vim'">>/etc/profile
root@anLA7856:/var/log# tail -1 /etc/profile
alias vi='vim'
root@anLA7856:/var/log# source /etc/profile
3、查看第一行:
root@anLA7856:/var/log# head -1 /etc/profile
4、检测系统是否存在漏洞:
root@anLA7856:/etc# env x='() { :;}; echo be careful' bash -c "echo this is a test"
如果没问题,就会输出:
this is a test
否则会输出:
be careful
this is a test
5、通过source或“.”加载过的脚本,由于是在当前shell中执行脚本,因此在脚本结束之后,脚本中的变量包括函数在当前shell中依然存在。
而通过sh或bash执行的脚本都会启动新的子shell执行,执行玩后回退到父shell,因此变量等是无法保留的。
例如下面注意echo $user返回的会是啥:
root@anLA7856:/home/anla7856/shell# echo "user=`whoami`" >> whoami.sh
root@anLA7856:/home/anla7856/shell# ls
whoami.sh
root@anLA7856:/home/anla7856/shell# sh whoami.sh
root@anLA7856:/home/anla7856/shell# echo $user
root@anLA7856:/home/anla7856/shell#
6、对于常规变量的字符串定义变量应加双引号,并且等号前后不能有空格,需要强引用的(指所见即所得的字符引用),
则用单引号(''),如果是命令的引用,则用反引号(``).
7、linux中变量类型有两种:环境变量和普通变量(区分大小写)。
按照规范,所有环境变量均采用大写形式,将环境变量应用于进程程序之前,都应该用export命令导出定义
例如:配置Java的环境变量
JAVA_HOME=/usr/java/jdk1.8
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
8、关于set、env、declare的输出:
set:输出所有变量,包括全局变量和局部变量
env:只显示全局变量
declare:输出所有的变量、函数、整数和已经导出的变量
9、定义环境变量并赋值的方法:
#export NAME=anla7856
#declare -x NAME=anla7856
#NAME=anla7856; export NAME
10、常见的全局变量的配置文件(我的是ubuntu 16)
root@anLA7856:/etc# vim profile.d
root@anLA7856:/etc# vim bash.bashrc
root@anLA7856:/etc# vim profile (我主要在这里面配置各种环境变量)
11、可以用unset来消除本地变量和环境变量
root@anLA7856:/etc# echo $NAME
anla7856
root@anLA7856:/etc# unset NAME
root@anLA7856:/etc# echo $NAME
root@anLA7856:/etc#
12、linux下环境初始化与对应文件生效顺序
首先,系统运行shell的方式一般有3种:
1)通过系统用户登录后默认运行的shell
2)非登录交互式运行shell
3)执行脚本运行非交互式shell
第一种方式时,用户登录linux系统,首先会加载/etc/profile全局变量文件,系统上每个用户登录都会加载这个。当加载玩/etc/profile文件后,
才会执行/etc/profile.d目录下的脚本文件,这个文件下脚本文件有很多,例如系统的字符集设置(/etc/sysconfig/i18n)。之后,开始运行
$HOME/.bash_profile(用户环境变量文件),在这里面,又会去找$HOME/.bashrc或者/etc/bashrc等环境变量文件,如果有就运行。
第二种方式时,则只会加载$HOME/.bashrc-->/etc/bashrc,这样就需要将JAVA环境变量等放入$HOME/.bashrc中而不是/etc/profile
13、普通变量定义:
NAME=anla7856
NAME='anla7856'
NAME="anla7856"
输出方式可以为:
echo $NAME 或者
echo ${NAME}
同样:
echo `date` 等同于
echo $(date)
14、理解好单引号和双引号以及没有引号的使用:
root@anLA7856:/etc# a=192.168.1.2
root@anLA7856:/etc# a=192.168.1.2-$a
root@anLA7856:/etc# b='192.168.1.2-$a'
root@anLA7856:/etc# c="192.168.1.2-$a"
root@anLA7856:/etc# echo "a=$a"
a=192.168.1.2-192.168.1.2
root@anLA7856:/etc# echo a
a
root@anLA7856:/etc# echo $a
192.168.1.2-192.168.1.2
root@anLA7856:/etc# echo "b=$b"
b=192.168.1.2-$a
root@anLA7856:/etc# echo "c=${c}"
c=192.168.1.2-192.168.1.2-192.168.1.2
15、awk命令下,调用shell变量的特殊用法:
root@anLA7856:/etc# ETT=123
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
123
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
123
当变量是加双引号时(同单引号)
root@anLA7856:/etc# ETT="tingting"
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
tingting
当变量加反引号时:
root@anLA7856:/etc# ETT=`pwd`
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
awk: line 1: runaway regular expression /etc} ... #语法报错
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
/etc
16、往sh脚本里面传入参数:
root@anLA7856:/home/anla7856/shell# cat paramTest.sh
echo $1 $2
root@anLA7856:/home/anla7856/shell# sh paramTest.sh hello helloWorld
hello helloWorld
root@anLA7856:/home/anla7856/shell#
当参数个数大于9时,需要用{}扩起来,以免歧义,如${10}
$0表示当前脚本的名字,如:
root@anLA7856:/home/anla7856/shell# cat paramTest.sh
echo $1 $2 $0
root@anLA7856:/home/anla7856/shell# sh paramTest.sh hello helloWorld
hello helloWorld paramTest.sh
root@anLA7856:/home/anla7856/shell#
特别的,如果运行时是全路径,则$0也会带有路径
$#表示给脚本串惨的个数,不包括$0
17、dirname和basename基本用法:
root@anLA7856:/home/anla7856/shell# dirname paramTest.sh
.
root@anLA7856:/home/anla7856/shell# basename paramTest.sh
paramTest.sh
root@anLA7856:/home/anla7856/shell# cd /
root@anLA7856:/# dirname /home/anla7856/shell/paramTest.sh
/home/anla7856/shell
18、测试set设置位置参数(同命令行脚本穿参)
root@anLA7856:/# set "I am" handsome anla7856.
root@anLA7856:/# echo $1
I am
root@anLA7856:/# echo $2
handsome
root@anLA7856:/# echo $3
anla7856.
root@anLA7856:/# echo $#
3
root@anLA7856:/# echo $*
I am handsome anla7856.
root@anLA7856:/# echo $@
I am handsome anla7856.
root@anLA7856:/# for i in $*;do echo $i;done
I
am
handsome
anla7856.
root@anLA7856:/# for i in $@;do echo $i;done
I
am
handsome
anla7856.
root@anLA7856:/# for i in "$*";do echo $i;done
I am handsome anla7856.
root@anLA7856:/# for i in "$@";do echo $i;done
I am
handsome
anla7856.
root@anLA7856:/# for i;do echo $i;done
I am
handsome
anla7856.
19、shell进程的特殊状态变量说明:
root@anLA7856:/# echo $? #获取上一个指令的执行状态返回值(0为成功,非零为失败)
0
在一般场景下,"$?"返回值用法:
1):判断命令,判断脚本或函数等程序是否执行成功;
2):若在脚本中执行"exit数字",则会把这个数字以函数形式传给"$?"
3):如果在函数里,则会通过"return 数字",把这个数字传给"$?"
root@anLA7856:/# echo $$ #获取当前执行的shell脚本的进程号,不常用
3710
root@anLA7856:/# echo $! #获取上一个在后台的进程的进程号,不常用
root@anLA7856:/# echo $_ 获取在此之前执行的命令或脚本的最后一个参数,不常用
echo
20、eval的相关用法
root@anLA7856:/home/anla7856/shell# vi eval.sh
root@anLA7856:/home/anla7856/shell# sh eval.sh arg1 arg2
arg2
root@anLA7856:/home/anla7856/shell# cat eval.sh
eval "echo \$$#"
root@anLA7856:/home/anla7856/shell#
2、将vim别名成vi步骤:
root@anLA7856:/var/log# echo "alias vi='vim'">>/etc/profile
root@anLA7856:/var/log# tail -1 /etc/profile
alias vi='vim'
root@anLA7856:/var/log# source /etc/profile
3、查看第一行:
root@anLA7856:/var/log# head -1 /etc/profile
4、检测系统是否存在漏洞:
root@anLA7856:/etc# env x='() { :;}; echo be careful' bash -c "echo this is a test"
如果没问题,就会输出:
this is a test
否则会输出:
be careful
this is a test
5、通过source或“.”加载过的脚本,由于是在当前shell中执行脚本,因此在脚本结束之后,脚本中的变量包括函数在当前shell中依然存在。
而通过sh或bash执行的脚本都会启动新的子shell执行,执行玩后回退到父shell,因此变量等是无法保留的。
例如下面注意echo $user返回的会是啥:
root@anLA7856:/home/anla7856/shell# echo "user=`whoami`" >> whoami.sh
root@anLA7856:/home/anla7856/shell# ls
whoami.sh
root@anLA7856:/home/anla7856/shell# sh whoami.sh
root@anLA7856:/home/anla7856/shell# echo $user
root@anLA7856:/home/anla7856/shell#
6、对于常规变量的字符串定义变量应加双引号,并且等号前后不能有空格,需要强引用的(指所见即所得的字符引用),
则用单引号(''),如果是命令的引用,则用反引号(``).
7、linux中变量类型有两种:环境变量和普通变量(区分大小写)。
按照规范,所有环境变量均采用大写形式,将环境变量应用于进程程序之前,都应该用export命令导出定义
例如:配置Java的环境变量
JAVA_HOME=/usr/java/jdk1.8
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
8、关于set、env、declare的输出:
set:输出所有变量,包括全局变量和局部变量
env:只显示全局变量
declare:输出所有的变量、函数、整数和已经导出的变量
9、定义环境变量并赋值的方法:
#export NAME=anla7856
#declare -x NAME=anla7856
#NAME=anla7856; export NAME
10、常见的全局变量的配置文件(我的是ubuntu 16)
root@anLA7856:/etc# vim profile.d
root@anLA7856:/etc# vim bash.bashrc
root@anLA7856:/etc# vim profile (我主要在这里面配置各种环境变量)
11、可以用unset来消除本地变量和环境变量
root@anLA7856:/etc# echo $NAME
anla7856
root@anLA7856:/etc# unset NAME
root@anLA7856:/etc# echo $NAME
root@anLA7856:/etc#
12、linux下环境初始化与对应文件生效顺序
首先,系统运行shell的方式一般有3种:
1)通过系统用户登录后默认运行的shell
2)非登录交互式运行shell
3)执行脚本运行非交互式shell
第一种方式时,用户登录linux系统,首先会加载/etc/profile全局变量文件,系统上每个用户登录都会加载这个。当加载玩/etc/profile文件后,
才会执行/etc/profile.d目录下的脚本文件,这个文件下脚本文件有很多,例如系统的字符集设置(/etc/sysconfig/i18n)。之后,开始运行
$HOME/.bash_profile(用户环境变量文件),在这里面,又会去找$HOME/.bashrc或者/etc/bashrc等环境变量文件,如果有就运行。
第二种方式时,则只会加载$HOME/.bashrc-->/etc/bashrc,这样就需要将JAVA环境变量等放入$HOME/.bashrc中而不是/etc/profile
13、普通变量定义:
NAME=anla7856
NAME='anla7856'
NAME="anla7856"
输出方式可以为:
echo $NAME 或者
echo ${NAME}
同样:
echo `date` 等同于
echo $(date)
14、理解好单引号和双引号以及没有引号的使用:
root@anLA7856:/etc# a=192.168.1.2
root@anLA7856:/etc# a=192.168.1.2-$a
root@anLA7856:/etc# b='192.168.1.2-$a'
root@anLA7856:/etc# c="192.168.1.2-$a"
root@anLA7856:/etc# echo "a=$a"
a=192.168.1.2-192.168.1.2
root@anLA7856:/etc# echo a
a
root@anLA7856:/etc# echo $a
192.168.1.2-192.168.1.2
root@anLA7856:/etc# echo "b=$b"
b=192.168.1.2-$a
root@anLA7856:/etc# echo "c=${c}"
c=192.168.1.2-192.168.1.2-192.168.1.2
15、awk命令下,调用shell变量的特殊用法:
root@anLA7856:/etc# ETT=123
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
123
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
123
当变量是加双引号时(同单引号)
root@anLA7856:/etc# ETT="tingting"
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
tingting
当变量加反引号时:
root@anLA7856:/etc# ETT=`pwd`
root@anLA7856:/etc# awk 'BEGIN {print "$ETT"}'
$ETT
root@anLA7856:/etc# awk 'BEGIN {print $ETT}'
root@anLA7856:/etc# awk 'BEGIN {print '$ETT'}'
awk: line 1: runaway regular expression /etc} ... #语法报错
root@anLA7856:/etc# awk 'BEGIN {print "'$ETT'"}'
/etc
16、往sh脚本里面传入参数:
root@anLA7856:/home/anla7856/shell# cat paramTest.sh
echo $1 $2
root@anLA7856:/home/anla7856/shell# sh paramTest.sh hello helloWorld
hello helloWorld
root@anLA7856:/home/anla7856/shell#
当参数个数大于9时,需要用{}扩起来,以免歧义,如${10}
$0表示当前脚本的名字,如:
root@anLA7856:/home/anla7856/shell# cat paramTest.sh
echo $1 $2 $0
root@anLA7856:/home/anla7856/shell# sh paramTest.sh hello helloWorld
hello helloWorld paramTest.sh
root@anLA7856:/home/anla7856/shell#
特别的,如果运行时是全路径,则$0也会带有路径
$#表示给脚本串惨的个数,不包括$0
17、dirname和basename基本用法:
root@anLA7856:/home/anla7856/shell# dirname paramTest.sh
.
root@anLA7856:/home/anla7856/shell# basename paramTest.sh
paramTest.sh
root@anLA7856:/home/anla7856/shell# cd /
root@anLA7856:/# dirname /home/anla7856/shell/paramTest.sh
/home/anla7856/shell
18、测试set设置位置参数(同命令行脚本穿参)
root@anLA7856:/# set "I am" handsome anla7856.
root@anLA7856:/# echo $1
I am
root@anLA7856:/# echo $2
handsome
root@anLA7856:/# echo $3
anla7856.
root@anLA7856:/# echo $#
3
root@anLA7856:/# echo $*
I am handsome anla7856.
root@anLA7856:/# echo $@
I am handsome anla7856.
root@anLA7856:/# for i in $*;do echo $i;done
I
am
handsome
anla7856.
root@anLA7856:/# for i in $@;do echo $i;done
I
am
handsome
anla7856.
root@anLA7856:/# for i in "$*";do echo $i;done
I am handsome anla7856.
root@anLA7856:/# for i in "$@";do echo $i;done
I am
handsome
anla7856.
root@anLA7856:/# for i;do echo $i;done
I am
handsome
anla7856.
19、shell进程的特殊状态变量说明:
root@anLA7856:/# echo $? #获取上一个指令的执行状态返回值(0为成功,非零为失败)
0
在一般场景下,"$?"返回值用法:
1):判断命令,判断脚本或函数等程序是否执行成功;
2):若在脚本中执行"exit数字",则会把这个数字以函数形式传给"$?"
3):如果在函数里,则会通过"return 数字",把这个数字传给"$?"
root@anLA7856:/# echo $$ #获取当前执行的shell脚本的进程号,不常用
3710
root@anLA7856:/# echo $! #获取上一个在后台的进程的进程号,不常用
root@anLA7856:/# echo $_ 获取在此之前执行的命令或脚本的最后一个参数,不常用
echo
20、eval的相关用法
root@anLA7856:/home/anla7856/shell# vi eval.sh
root@anLA7856:/home/anla7856/shell# sh eval.sh arg1 arg2
arg2
root@anLA7856:/home/anla7856/shell# cat eval.sh
eval "echo \$$#"
root@anLA7856:/home/anla7856/shell#
阅读全文
0 0
- Linux学习笔记(一)
- Linux学习笔记一
- linux学习笔记一
- linux学习笔记一
- linux学习笔记一
- Linux学习笔记(一)
- Linux学习笔记一
- Linux学习笔记(一)
- linux学习笔记一
- Linux学习笔记一
- Linux学习笔记一
- Linux学习笔记一
- linux学习笔记(一)
- Linux学习笔记一
- Linux学习笔记一
- LINUX学习笔记一
- linux学习笔记一
- Linux 学习笔记一
- 乌班图16.04配置sdk
- anaconda安装完找不到.jupyter目录
- 用jquery做一个列表上下移动和置顶/低
- 欢迎使用CSDN-markdown编辑器
- java中web.xml的配置
- linux学习笔记一
- charles使用教程
- 一个 Yii + vue 项目(5)vue路由、yii验证码
- 不要忘记的一些东西
- 安卓 热修复
- Canvas---Canvas变换与操作
- React Native用fetch获取Json数据的问题
- 触及成本
- Java 8系列之重新认识HashMap