Linux
前言
Linux的一切命令都是本质都是一个个可执行文件,只是由于系统通过shell解释器帮我们找到了对应的可执行文件,致使我们可以通过输入一个简单命令来执行对应的可执行文件。因此这些命令也称为shell命令。讲到shell,可能很多人疑惑bash和shell的关系。其实bash全称是Bourne Again shell,是shell的一种,也是Linux中默认和最常用的一种shell。
比如输入:
ls
系统会自动找到以下目录中的可执行文件ls。
/bin/ls
如图:
Linux命令查询器
中文网页版: LZL在线工具
https://www.lzltool.com/LinuxCommand
系统内英文官方版方式一:
用help,例子如下
ls --help
系统内英文官方版方式二:
再man中查找,例子如下
man 1 ls
注:man 1 指的是manual的page1,这一页记录了许多shell命令的用法。
Linux的字母大小写
Linux的文件以及命令指令都是区分大小写的,这点和window系统完全相反。
比如,在Linux下面,a和A可以是两个截然不同文件夹。但在window中,a和A是只能是同个文件夹,系统并不帮你区分。
Linux的几个特殊案件(ctrl + …)
- ctrl + c:终止当前进程。
- ctrl + d:像关于exit,可以理解为关闭当前终端。
- ctrl + alt + t:调出终端。
- ctrl + z:将当前运行的程序放到后台。
- ctrl + s:暂停运行终端,就是你按了这个组合之后,你的终端就卡死了(我误按了好多次。。。)。
- ctrl + q:恢复终端运行,解决误按ctrl + s的方案。
- ctrl + l:清理终端,相当于clean命令,按了之后终端就干净如初。
- ctrl + u:撤回输入,相当于window系统下的ctrl+z。
下载和卸载
download: sudo apt-get install ...
notes:1、下载的软件存放路径是"var--cache--archives"
2、yum install也是一个下载命名,但用在Redhat系列的系统上的。本文用的是Debian下的Ubuntu系统。
unload: sudo apt-get clean ...
软件更新
sudo apt-get update
mean:从服务器获取软件列表,并在本地保存为文件。
sudo apt-get upgrade
mean:本地安装软件与本地软件列表对比,如本地安装版本低,会提示更新。
note:提示更新之后,输入y(yes)即可更新。
查看空间使用情况
查看磁盘分区表
fdisk -l
查看分区使用情况
df -h
查看文件占用空间使用情况
du -sh [file_name and directory]
mean: disk usage
查看磁盘挂载情况
lsblk -f
mean: list show block
当前目录所在的位置
pwd
mean: point working directory
查看文件中的内容
cat file_name
查看目录下的文件
ls -l or ls -al
mean: list show
许多时候我们也会直接用到ls -all的缩写:
ll
重启
reboot
关机
shutdown now
移动文件
mv file_name directory_name
mean: move
磁盘管理软件
gparted
donwload: sudo apt-get install gparted
查看文件权限
查看当前目录下某个文件权限
ls -l file_name
查看当前目录下所有文件权限
ls -l
修改文件掩码
文件掩码顾名思义,当文件被创建后,其系统分配的权限会被文件掩码抹去一些权限,以根据用户需要保证文件的安全性。下面是修改文件掩码的指令,再修改权限那小节会有例子讲诉文件掩码如何抹去文件权限的。
umask numnber
note: 数字必需是三位数,且每个数字最大是7,最小是0。
eg: umask 666
修改文件权限
chmod xxx <file_name>
mean: change mode xxx
eg: chmod 777 <file_name>
那么file_name的权限为 111(rwx)111(rwx)111(rwx):用户权限,同组用户权限,其他用户权限。
note:111(rwx)->7,110(rw )->6....(二进制转换)
rwx: read write execute
如果懒的计算rwx对应的数字,也可以用加减号来添加和删除权限。不过这会让三个用户同时添加或删除某个权限。
chmod +x <file_name>
chmod -r <file_name>
值得一提的是,用户创建一个文件或文件夹默认权限是:
create a file: (rw-rw-rw-) & (~umask)
create a directory: rwxrwxrwx & (~umask)
其中(~umask)是用于抹去一部分权限的。
删除文件或文件夹
删除一个文件夹:
rm <directory_name> -rf
mean:remove
或者使用以下指令:
rmdir <directory_name>
删除多个文件夹:
rm <file_1> <file_2> -rf
删除一个文件
rm <file_name>
删除多个文件
rm <file_name1> <file_name2>
新建文件夹
mkdir directory_name
新建一个文件
touch file_name
移动一个文件夹
mv file_name target_directory
mean:move,将file_name移动到 target_directory
note:这里必须是把文件移动到文件夹,而不能两个都是文件
复制一个文件
cp source_file object_file
比如想把a.c复制并命名为b.c
cp a.c b.c
文件重命名
mv file_name target_file
mean:rename file_name as target_file
note:这里和移动文件夹用的是同一个指令,但参数都是文件,而非文件夹。
编译C和C++文件
编译一个.c文件可用如下方法,但若想编译一个.cpp文件,则把gcc换成g++即可。
gcc file_name.c -o compile_file
note:gcc 是编译的意思,-o是output的意思
同时编译多个文件,并将他们连接起来
gcc file_1.c file_2.c -o compile_file
执行可以执行文件
./compile_file
note:Linux的可执行文件是没有后缀的,并且它的编译和执行是分开的。
一步一步的编译文件
gcc -E file_name.c -o file_name.i //预处理步骤,生成.i文件
gcc -S file_name.i -o file_name.s //编译步骤,生成.s文件
gcc -c file_name.s -o file_name.o //汇编步骤。生成.o文件(二进制文件)
gcc file_name.o -o file_name //链接步骤,生成目标文件
notes:大小写不能混用
以上是程序编译的四个步骤,当然我们也可以跳步骤编译,系统会自动补上跳过的步骤。比如可以直接跳到汇编步骤,然后再链接生成目标文件。
gcc -c file_name.c -o file_name.o
gcc file_name.o -o file_name
VIM编辑器的相关操作
:w
mean:write but no quit
:q
mean:quit without modification
:wq
mean:write and quit
:w!
mean:force write
:q!
mean:force quit but no modify
:wq!
mean:force write and quit
:e!
mean:exit and forgive the modification
查看内容
grep [contents] [file_name]
mean:在file_name这个文件中查看contents并打印到终端来。
查看进程
查看进程的三种方法
ps -a
ps -au
ps -aux
mean: process status
搜索具体的进程
ps -aux | grep [process_name]
ps -aux | grep [the pid of ther process]
杀死进程
kill -9 [the pid of ther process]
echo命令(重定向文件,打印变量)
在test.c文件的第一行写入"hello world"。如果test.c文件不存在则创建它,如果test.c存在但第一行有东西,那就覆盖它前N个字符。其中,N等于"hello world"的字符数量。
echo "hello world" > test.c
在test.c文件末尾添加一句"hello test"。同样如果如果test.c文件不存在则创建它。
echo "hello test" >> test.c
用echo打印变量,比如PATH变量。
echo $PATH
查看进程中线程的数量
先用下面命令查看进程id
ps -aux | grep [..]
再根据进程id查看线程数量
ps -T -p [进程id]