这篇博客,是为了记录我学习入门Linux的概要,所以具体的知识就不赘述,网上都有,只列出清单及一些要注意的地方。
关于根目录和主目录:
根目录,是指Linux文件系统的顶级目录/;家目录,是指用户目录,在/home下,以用户名作为目录,可以用 ~ 表示。
/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。
/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。
cd / 进入根目录 cd /tmp 进入根目录下一级子目录tmp
cd ~/(或cd ~) 进入家目录 cd ~/c(或cd /home/admap7/c) 进入家目录下一级子目录c
一、常用的Linux操作命令
1.查看目录命令 pwd
2.打开目录命令 cd
cd c 或cd c/ 进入c目录
cd / 是打开根目录,cd ~是打开用户的主目录,如果是root用户则相应地打开/root目录。
3.查看目录命令 ls 查看的是当前目录下的文件夹或文件
多个参数是可以组合的,如ls -aF表示显示所有的文件,然后添加一个标志
可以只显示某个文件夹或文件,如ls -l a.c
使用"*"可以匹配文件名中的任意字符串,如ls -l *.c。
使用"?"可以匹配一个字符,如ls 0?.c 表示第一个字符为0,扩展名为.c,文件名有两个字符的文件。
只显示当前下的目录: ls -F | grep /$ # -F使得ls将文件分类,通过在文件后面加一些标记来实现
ls -F | grep /
ls -l | grep ^d
ls -d */
ls -ld */
显示其他目录下的文件或文件夹:ls 完整路径(如果是当前目录子目录,则和cd命令的相对路径一样,直接子目录就可以了) eg: ls /home/adnap7/c 因而可以在家目录下访问根目录,就像家目录下cd可以进入根目录一样
4.建立文件命令 touch
如果需要建立的文件已存在,touch命令可以使文件的最后访问时间变成当前时间。
5.建立与删除文件夹命令 mkdir 、rmdir
建立的目录不一定是在当前目录下,可以在任意一个目录中建立目录,参数-p可以指定建立多级目录。如mkdir -p mydir1/mydir2,表示在目录mydir1中建立目录mydir2。如果mydir1不存在,则-p会同时建立目录mydir1。
rmdir用于删除一个空目录,也可以使用-p命令删除多级目录。如rmdir -p mydir1/mydir2,表示删除目录mydir1中的目录mydir2,在mydir1为空时,会同时删除mydir1和mydir2。
6.文件复制命令 cp
使用cp命令复制文件时,cp a(文件) b(文件),如果b不存在则会创建b并复制;如果b存在则会覆盖目标文件而不给出提示,所以复制时最好使用-i参数。cp -r c/ d/,将目录c中的所有文件和目录复制到目录d中,如果目录d不存在,则建立这个目录。
cp d/01.c . 表示将目录d中的文件01.c复制到当前目录中
复制多个文件,如cp *.c c/
7.文件移动或更名命令 mv
mv 文件a 文件b 是更名命令;mv 文件a 目录c 是移动命令
移动多个文件,如mv *.c c/
8.删除文件与目录命令 rm
rm 可以删除文件,如果要删除目录,则需rm -r 目录c
9.创建链接命令 ln
10.查看文件信息命令 wc
11.文件查看命令 cat
可以显示多个文件的内容,如cat a.c b.c d.c
将(一个或多个)输出结果定向到一个文件中,如cat a.c b.c c.c >d.c。如果d.c存在,则覆盖式输入;如果不存在,则生成并输入
12.查看文件视图命令 head 与 tail
13.文件权限设置命令chmod
一般格式:chmod (-c/f/v/R) (用户组)+/-/=权限(+/-/=权限)( (用户组)+/-/=权限(+/-/=权限)) 文件a
14.查找文件命令 find
支持"*"与"?"等通配符,如 find / *.c
15.man 系统帮助命令
二、文本编辑器VIM的使用
1.VIM的三种工作模式及切换方法如下图所示:
2.保存与打开文件命令(在命令模式下):
VIM中保存文件命令是 :w ,如 :w :w /home/adnap7/01.c
打开文件的命令是 :r
退出命令 :q ,未保存就退出会提示你使用 :q! ,可以不保存就退出
保存并退出 :wq
3.常用操作
插入、删除、取消、保存、退出、查找、替换
插入命令:
i 在光标前插入 I 在当前行首插入 a 在当前光标后插入 A 在当前行尾插入 o 在当前行之下新开一行 O 在当前行之上新开一行
三. 编译与调试
1.1 gcc编译器
使用gcc编译c或c++程序,也支持多种源程序扩展名
格式:gcc 1.c (.c和.C才能直接编译,其他文件还需指定编译语言)
生成的a.out 还需添加可执行权限:chmod +x a.out ,然后 ./a.out 执行
1.2 查看gcc的参数
gcc --help 查看
1.3 设置输出的文件
默认情况下所有文件的编译生成文件都是a.out
命令gcc filename1 -o filename2 可以设置输出的目标文件,eg: gcc a.c -o do
也可以输出文件到其他目录, eg: gcc a.c -o /tmp/do
2. gdb调试程序
四. Shell编程
shell即是命令语言,也是程序设计语言。
shell程序可以用简单的代码通过各种系统命令实现强大的功能,在系统设置、服务管理方面有着重要的应用。
1.bash(shell的一种)的使用
1.1 bash的内部命令与外部命令软件功能
1.2 命令补齐功能
内部命令有exit,export,kill;外部命令是系统的
开头字母+Tab键
1.3 命令通配符
*:匹配一个或多个字符,包括空字符串
?: 匹配一个字符,如?abc
[...]: 匹配括号里列出的任何单字符
1.4 使用命令的历史记录
history (n)
1.5 命令别名
alias 别名='原来的命令'
unalias 别名 取消别名
2. Shell程序(是一系列的Linux程序卸载一个文件中)的基本结构
#!/bin/bash #hello #后是shell程序的注释 echo 'hello Linux' echo 'this is a shell file.'
shell程序保存后,需添加可执行权限,如chmod +x a.sh;然后./a.sh (shell是一个普通的文本,需添加可执行权限才能执行)
3. Shell中的变量
Shell中的变量是无数据类型的;对一个变量赋值就定义了变量;变量赋值后,在变量前加上$就可访问变量的值(但是反复赋值时不需要加上$);为变量赋的值是没有空格的字符串可以不加引号,有空格的字符串(这其实已经是多个字符串了)则需加引号
3.1 局部变量(只在当前进程和程序中有效的变量)
一般写在shell程序中
3.2 环境变量
3.2.1 查看环境变量
export
3.2.2 访问环境变量
在环境变量前加$,如echo $环境变量
3.2.3 定义环境变量
如export 变量名(一般大写)=1234 (定义或修改环境变量,=号两侧不能有空格)
3.3 位置变量
$1到$9 一般写在shell程序中,等待执行shell程序时在bash中传值,如./13.4.sh 2 4
4 Shell 运算符
4.1 变量赋值
使用= ,在bash和shell中都可使用 例如a =123
shell的变量是动态语言,可以赋不同类型的值(像python)
4.2 算术运算符(+ - * / ** % += -= *= /= %=)
可以在bash和shell程序中都使用
注意:echo 1+2 的结果是1+2。 因为在shell script中变量类型默认为“字符串”,所以若不指定变量类型,1+2是一个“字符串”而不是“计算式”。所以数学计算必须用数学方法表示出来(=赋值例外)
办法是以下都只适用于整数:1.用let指示数学运算(let表达式内变量不用加$;let必须是完整的算术表达式,即有等号两边) 如 let b=1+2,echo $b
2.使用expr(运算符左右都有空格运算符左右都有空格,如果没有空格表示是字符串连接;不支持幂乘运算;使用乘号时,必须用反斜线\屏蔽其特定含义;expr 可以只有等号右边的计算) 如echo `expr 1 + 2`
3.使用$[] 表示数学运算,将数学运算写到中括号中($() 与 ``等效) 如echo $[1+2]
5. 输入(从用户输入或文件读取)和输出(显示到屏幕或保存到文件)
5.1 echo 命令输出
echo 后面是没有空格的字符串的话,加不加引号都可以;否则需要加上引号,表示这是一个字符串(变量)
echo $a 将结果输出到终端
echo $a >file 将结果保存到文件file中,如果没有文件将会新建一个文件;如果文件已存在,会覆盖以前的文件
echo $a >>file 将结果追加到文件file中(是在file中换行追加)
echo输出的内容可以有格式控制字符\c \t \n ,但是echo要加上-e选项: echo -e 内容 如echo -e "hello\nBeijing"会显示换行
5.2 read 命令读取信息
如果只读入一个变量,则会把键盘上输入的所有信息赋值给这个变量。按"Enter"结束输入
如果输入多个变量,则要用空格将输入的变量隔开。如果输入变量的个数多于需要读取变量的个数,将会把剩余的变量都赋值给最后一个变量。
如果要从文件中读取数据,在读取语句后添加<filename (从文件中读取数据时好像只读取第一行的数据;就算需要读取的变量有多个,也是读取第一行)
6. 引号
没有空格的字符串的话,加不加引号都可以;否则需要加上引号,表示这是一个字符串(变量)
双引号和单引号用法相似(引号里不能直接使用$、引号、\、`这些特殊符号)
反引号(`)用于执行引号中的系统命令,然后将命令的结果返回,可以将结果赋值给一个变量
反斜线用于对特殊字符(& * + ^ $ ` " | ?)进行转义,因为Shell会认为这些字符代表着相应的运算,无法直接输出这些字符或赋值
7.测试语句(对变量大小、字符串、文件属性等内容进行判断)
7.1 文件状态测试
示例:
test -d ~/c echo $?
$?保存上一个命令的结果,对于test命令的测试结果,返回0表示测试成功,返回1表示测试失败。所以测试命令本身的值是boolean型的,可以作为流程控制结构的判断条件($?也可以)。
参数:-d -f -L -x -s -w -u -r
7.2 数值测试
两种形式:
test 第一个操作数 数值比较符 第二个操作数 [ 第一个操作数 数值比较符 第二个操作数 ]
注意:[ 后面一定要有空格
数值符有:-eq -le -gt -ne -ge -lt
7.3 字符串测试
test 字符串比较符 字符串 test 字符串1 字符串比较符 字符串2 [ 字符串比较符 字符串 ] [ 字符串1 字符串比较符 字符串2 ]字符串比较符有:= != -z -n
7.4 逻辑测试
示例:
[ -w a.txt -a -x a.txt echo $?
三种逻辑测试: a -o !
8. 流程控制结构
8.1 if语句
几种格式:
if 条件 then 命令1 fi if 条件 then 命令1 else 命令2 fi if 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi if 条件1;then 命令1 elif 条件2;then 命令2 else 命令3
8.2 for 语句
几种格式:
for 变量名 in 列表 do 命令1 命令2... done for 变量名 (当省略后面的in关键字时,将接受输入命令时的参数作为循环变量集,eg: ./a.sh a s d f ) do 命令1 命令2... done
8.3 until 循环
until 条件 do 命令1 ... done
8.4 while 循环
while 条件 do 命令1 ... done