目录
图形化界面和命令行操作本质都是对操作系统进行直接或间接的操作
pwd命令
显示用户当前所在的目录
which 指令 可以查看指令在系统下的路径
alias可以给指令起别名 比如 alias mycmd='ls -l -a'
ll是ls -l 的别名
第一个 / 代表根目录
其他的 / 是Linux下的数据分隔符
通过路径的方式找到一个文件是因为:任何一个节点,都只有一个父节点
ls 指令
对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录
- -i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件
- -k 以 k 字节的形式表示文件的大小。ls --alk 指定文件
- -l 列出文件的详细信息。
- -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
- -F 在每个文件名后附上一个字符以说明该文件的类型,"*"表示可执行的普通文件;"/"表示目录;"@"表示符号链接;"|"表示FIFOs;"="表示套接字(sockets)。(目录类型识别)
- -r 对目录反向排序。
- -t 以时间排序。
- -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
- -R 列出所有子目录下的文件。(递归)
- -1 一行只输出一个文件。
Linux中,以 . 开头的文件,称为隐藏文件
. 代表当前目录,一个可执行程序要执行 要 加载到内存,首先得找到它在哪,直接 a.out 是不行的,需要 ./a.out
. . 代表上级目录,可以提通过cd ... 进行目录的回退
我们用到的指令,工具,可执行程序 本质就是可执行程序(C、C++、其他语言)写的
mkdir指令
在当前目录下创建一个名为 " " 的目录
mkdir --p test/test1 : 递归建立多个目录
tree 目录(比如叫d) 代表以树状结构把以d为入口以下所有叶子节点全部显示出来
如果tree命令用不了,说明系统默认没有装tree命令
root账号安装:yum install -y tree
如果是普通用户可以su 变成root 再装
如果tree / 碰到一直刷屏的情况可以ctrl+c终止,ctrl+c可以终止命令行中的错误输入或失控输入
touch指令
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
创建一个空文件,这个文件也会占据磁盘空间,文件包含有内容和属性(本质都是数据),对文件的操作分为:对内容操作/对属性操作(ls就是对属性进行操作)
stat test.c 可以查看文件的更多属性
touch 不存在的文件是新建,如果是已存在的文件,会将一个文件修改,更改,访问等时间改成最新的
cd 指令
linux中有不同账号的家目录
cd ~直接进入当前用户所对应的家目录中
cd -进入最近一次所访问的目录
cd ... : 返回上级目录
cd /home/111/test/ : 绝对路径
cd .../day02/ : 相对路径
rmdir指令 && rm 指令
rmdir 删除空目录
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm命令可以同时删除文件或目录
-f 即使文件属性为只读(即写保护),直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
要把当前目录的所有东西都清除rm -rf ./*
这个*对应的是匹配任意文件,./是当前
man指令
访问Linux手册页的命令是
man 语法: man [选项] 命令
如果发现man查找不了,是因为云服务器默认是生产环境,跟开发相关的默认是没有装的。要装可以yum install -y man-pages
要查c++、Java等语言建议直接去官网查
nano
用小的文本编辑器可以在linux中写一些东西,相当于记事本
先创建一个源文件,然后nano test.c打开
nano 安装 yum install -y nano
cp指令
复制文件或目录
cp test.c test/ 拷贝test.c到test这个目录下,要将test.c以另一个名字放到test的话在/后面加名字
mv指令
用来移动文件或者将文件改名
cat指令
查看目标文件的内容,tac可以倒着看
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
cat还有一种用法:后面不跟文件的时候
直接cat跟回车,默认从键盘文件上读取内容,然后显示出来,ctrl+c退出
输入重定向:
查看文本的内容少适合使用cat
more指令
功能类似 cat,不过more是查看文本内容多的情况
c
//在命令行输入可以创建一个大文件
cnt=0; while [ $cnt -le 1000 ]; do echo "hello linux,hello $cnt";let cnt++; done > big.txt
缺点是只能向下查看不能向上查看,更推荐less命令
less指令
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
head指令
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
-n<行数> 显示的行数
tail指令
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件
-n<行数> 显示的行数
想查看中间部分的话:
wc指令可以统计文件的字符数和行数
wc -l big.txt.统计行数
grep指令
行过滤工具
在文件中搜索字符串,将找到的行打印出来
grep '999' big.txt
后面还可以跟文件,在多个文件里搜索
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
热键
[Tab]按键---具有『命令补全』和『档案补齐』的功能
history可以查看历史命令
ctrl+r可以搜索历史命令,方向键上翻也可以
Alt+Enter可以打开全屏
ctrl+c 让当前的程序『停掉』
ctrl+d 退出登录
zip/unzip指令
将目录或文件压缩成zip格式
-r 递 归处理,将指定目录下的所有文件和子目录一并处理
将当前目录下文件压缩:zip test.zip ./*
解压到上级目录的tmp目录:unzip test.zip -d . ./tmp
tar指令
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file
如果加 j 参数,则以 .tar.bz2 来作为附档名
tar -czf test.tgz ./* 将当前目录下文件压缩
tar -xzf test.tgz 解压
uname --r指令
用来获取电脑和操作系统的相关信息
-a或--all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
输出重定向
echo指令可以向显示屏打印echo后跟的字符串,printf也是可以的
echo指令可以通过管道和bc指令结合来进行浮点运算
如果想打印到文件中,可以通过>
echo "hello linux" > test.txt
输出重定向:
- 如果test.txt不存在,那么会被新建
- 本来应该显示到显示器的内容,写入到了文件中 -- 输出重定向
(本来应该写入到显示器的内容,改写入到指定文件中) - 每次写入文件之前,要先清空原始文件中的内容
Linux下一切皆文件
为什么?
硬件在物理上是硬件,文件就是文件,两个是不同的
既然是不同的,那么对于硬件有硬件的操作方法,对于文件就要有文件的操作方法?
电脑上的大部分设备(键盘、磁盘、话筒等)在计算机中要么是我想从它身上读,要么是我想从它身上写,也就是输入输出,对文件的操作也是输入输出,设备在物理上是不一样的,但是在操作思想操作方法上都是要输入输出的,所以Linux要使用一种统一的思想来看待所有的设备,当以一切皆文件的思想认识所有设备,就可以设计出统一的方法来处理所有设备
创建文件可以touch test.txt 也可以 >test.txt(也是清空文件的意思)
追加重定向:
echo "hello linux" >> test.txt
不会清空原始文件,而是会追加内容
c
写到文件里
#include<stdio.h>
int main()
{
FILE*fp=fopen("test.txt","a");// append追加
if(fp==NULL) return 1;
fprintf(fp,"hello: %d,hi: %s\n",12345,"fp");
fclose(fp);
return 0;
}
c
写到显示器
#include<stdio.h>
int main()
{
FILE*fp=fopen("test.txt","a");// append追加
if(fp==NULL) return 1;
fprintf(stdout,"hello: %d,hi: %s\n",12345,"fp");
fclose(fp);
return 0;
}