这学期正好在学习linux,趁此机会写个笔记。当时不知道,居然下了一个中文版的ubuntu,用起来确实有点恶心。。。
linux 常用命令
/etc/passwd(是文件而不是命令)
cat /etc/passwd
用户可以通过打开这个文件,来查看用户配置信息。
如果成功显示的格式:
用户名:密码:用户id:组id:账号描述:主目录:登录shell(默认是bash)
passwd
passwd 用户名
普通用户只能修改自己的密码,root可以修改任何人的密码,并且不需要知道之前的密码。
id
id
可以查看当前登录用户的信息
变量
创建或修改一个变量:变量名=变量值
显示变量的值:echo $变量名
删除变量:unset 变量名
导出环境变量:export 变量名
总之一顿骚操作之后就明白怎么用了。
查看环境变量
set
env
都可以用来查看环境变量,打印出一堆东西
PATH变量
echo $PATH
PATH 是shell命令搜索路径,会去PATH包含的目录中寻找和命令同名的可执行文件
环境变量PS1
echo $PS1
主命令提示符。可以自定义。默认为用户名@主机名:当前工作目录:$(普通用户)或#(root)
环境变量 PS2
echo $PS2
一般用于命令太长,一行写不完的时候,下一行接着上一行,行首会有“>”。
环境变量HOME
echo $HOME
用户的主目录:/home/用户名
source 或者 .
source 脚本文件
在当前shell中执行脚本文件
这里有一个我已经写好的创建变量的脚本
和bash命令对比,可以明显看出source是在当前shell中进行的,而不是另起一个进程。
pwd
pwd
查看当前目录路径
cd
cd 路径名
cd ..(返回上层目录)
cd -(返回上一次cd的目录,可以理解为反复横跳)
cd (返回HOME)
用法都很简单,但远比windows上的cd要强大。
man
man [页号] 命令名
可以查看某指令的帮助信息。
页号1:linux内置
页号2:linux系统调用
页号3:库函数
| (管道)
ls | less
将左边命令的stdout作为右边命令的stdin,实现管道的功能。
重定向
> (输出重定向)
ls > 文件名
将左边指令的stdout重定向到右边的文件中(覆盖)。
ls > 文件名 2>&1
把stderr重定向到已经一定重定向stdout的文件中(听起来有点绕)。例子中因为没有错误信息,所以结果保持不变。
set –o noclobber
因为> 会把原有文件的内容冲掉,所以比较危险。set –o noclobber这个命令可以保证如果文件存在,我就不执行重定向。
>|
如果我无论如何都要强制执行,就是用>|。
>> (追加重定向)
ls >> 文件名
用法和前面的差不多,只不过是追加方式
< (输入重定向)
cat < 命令或文件
把右边的stdout变为左边的stdin。
<< (界限符)
wc << 界限字符
...
界限字符
这个可不是重定向了,虽然长得很像。主要是作为界限符来使用。
*,?,[,],[-],{,}
用于匹配,类似于正则表达式,但是要简单一些。具体用法见例子。
read
read file
从终端读入字符串放在右边的变量中。
之前已经写好了一个bash脚本,包含一条read命令。
test
test可用于整数测试,字符串测试,文件测试和逻辑测试。
在Linux中,0表示true,1表示false,这和高级程序设计语言刚好相反。并且由此补充一个c中的main函数至少要有的参数(虽然平常打比赛都不写的。。。)。
int main(int argc,char **argv,char **env)
{
return 0;
}
当然,程序员都是比较懒的,test命令又可以写成“[”。
expr
进行表达式计算的,注意要有空格,否则会被误认为是string。
if语句
下面的这些bash语法感觉上会比较晦涩,老师说能用bash写脚本的都是大神,推荐我们使用python写。。。
学长说,他就是因为不会写shell脚本,所以才在工作中吃了点亏,哈哈哈。
if [ expression ];
then
statements
elif [ expression ];
then
statements
else
statements
fi
case语句
上课的时候老师说,这都是什么反人类的语法。。。。
case $var in
val1)
statements;;
val2)
statements;;
*)
statements;;
esac
for语句
for var in list
do
statements
done
while语句
while expression
do
statements
done
util语句
until expression
do
statements
done
函数
function 函数名()
{
statements
}
特殊的shell变量
都是用来表达特定含义的变量,比较重要,老师说了必考,哈哈哈哈。
$# 传递给脚本或函数的参数个数
$0 脚本程序自身的名称(命令行名称)
$1 传给脚本或函数的第一个参数
$2 ...
$3 ...
$4 ...
$? 上一条语句的返回值
$$ 执行本脚本的进程的PID值
$* 将所有的参数作为一个字符串
$@ 将所有的参数分解为包含若干字符串的数组
这一章到这里就结束了,下一期接着写有关vim的。
最近忙着参加预推免,耽误了一些课。特此感谢mj同学和lqz同学帮我录制上课视频。