Linux若干命令

最近突然开始研究了一下Linux,随手记录一下一些用过的看起来比较有意思的命令吧QAQ

Shell的几个快捷键

Ctrl+a 光标移动到行头

Ctrl+e光标移动到行末

Ctrl+k删除从光标位置到行末

文件浏览&常用乱七八糟

编译命令:

g++ a+b.cpp -o a+b+c -std=c++11

a+b.cpp是cpp文件名,a+b+c则是可执行文件名,后面则可以选择编译标准。

ls

浏览当前文件夹下的所有文件(不包含隐藏文件

ls -a

显示所有文件(包括隐藏文件)

man ls

man后面加东西,显示该命令的帮助,上下/空格浏览,q退出

cal

显示日历。cal 5 2018可显示指定月份。

文件打开&新建&删除

cd name

打开文件

cd/cd ~

回到根目录

cd ..

回到上一级目录

pwd

显示当前路径

mkdir name

新建文件夹

mkdir -p name/name/name

按路径建立多个新文件夹

rmdir name

删除此文件夹(被删除文件夹必须为空)

rm -r name

干翻name目录下所有文件(删库跑路?)

文件复制,移动,删除

文件复制

cp ~/testpdf.pdf ~/test/

将根目录下的文件copy到空格后的目录中,~/不填则默认为当前目录下的文件 可以在复制的同时对复制后的文件进行重命名:

cp ~/testpdf.pdf ~/test/notest.pdf

复制过去的pdf名字就变了 可以加上-i选项,这样有同名文件覆盖前会询问是否覆盖:

cp -i ~/testpdf.pdf ~/test

如果要复制一个目录,或者说是文件夹,那么需要加上指令 -r

cp -r test1 test2

如果要强制执行,还可以使用-f指令;同时,多个指令可以叠加使用,例如:

cp -rf test1 test2

强制复制目录

一般来说,如果复制文件的新位置是一个目录(复制过去的文件名与源文件名字保持一致),会在目录最后加上一个/明确目的

也可以在cp命令中采用通配符*进行批量复制,例如:

文件删除

使用指令rm以达到目的,同样,删除目录需要使用-r,这是递归删除命令;

rm -r test1

-i则会在删除前确认,-f表示强制执行。同时,还可以使用指令

rm test*

通过加上 “* ” 来删除此目录下所有文件名以test为前缀的文件;

文件移动

使用mv指令来达成目的。mv指令可以移动普通文件和目录,因此不存在-r
-f 强制,-i:如果存在同名文件,询问是否覆盖; -u:如果目标文件已存在,且当前来源较新才会更新

mv a+b ~/test/test2/

将当前目录中的可执行文件a+b移动到指定文件夹中;

mv a+b ~/test/test2/a+c

移动文件的同时进行名称变更;

mv a+b a+c ~/test/

同时移动多个文件;注意此时最后一个一定是目录!!!

文件建立

touch file_name

建立文件

touch file_name{1..number}.txt

括号中写好数字,就会批量建立相应文件

链接

Linux中存在两种链接,硬链接与软链接(符号链接),他们大体用途相同,但是也有一些不同点。

相同点

从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。

不同点

硬链接可以理解为一个文件的多个别名,例如原来有一个文件file,现在有一个file的硬链接hard,可以发现hard的文件属性与file是完全一致的,并且删除file及hard中的任何一个,都不影响另一个文件正常被执行。

而软链接相当于是保存了一个文件file的绝对路径,如果删除了file,那么尝试打开软链接的时候就会失败

以及,对于文件目录只能创建软链接而不腻创建硬链接

创建软链接
1
ln -s sourcefile softname
创建硬链接
1
ln sourcefile hardname

查看文件内容

查看文件类型(file命令)

file命令能够探测文件内部并决定文件是什么类型的,例如:

1
file sourcefile

会根据文件类型的不同返回不同的结果:ASCII text/directory etc.

查看整个文件

使用cat,more,less命令都可以查看文件详细内容,区别在于cat会一次性展示整个文件而more,less则会逐页展示

还可以使用tail命令来查看文件末尾(默认展示最后10行),以及head命令查看头部(默认10行)

对文件内容进行排序

使用sort命令可以对文件内容进行排序,其中参数-n告诉sort将文件内容当做数字进行排序,-m则告诉sort将字符识别为月份进行排序(一般用于日志文件)

搜索文件

使用grep命令可以在文本中搜索匹配的行,例如:

1
grep three file1

会输出所有包含three的行,同时,grep可以使用Linux风格的正则表达式进行搜索。

命令别名

使用alias命令可以查看一些常用命令的别名(可以理解为长命令的缩写)。同时,也可以使用alias创建自己的别名并使用。例如:

1
alias ccc='cd ..'

就可以使用ccc代替引号内的命令,注意,这个命令只可以在本shell内生效,属于内部命令,同时,退出shell后命令丢失。

环境变量

查看全局变量,可以使用env或者是printenv命令,查看所有环境变量可以使用set命令

创建局部用户定义变量

1
2
echo $my_variable
my_variable=Hello

如果要给变量赋值一个字符串,需要用引号

1
2
echo $my_variable
my_variable="Hello world"

此后,只要通过$my_variable即可。

这个变量只能在此shell中有效,在子shell中会失效

设置全局环境变量

在设定全局环境变量所创建的子进程中,这个环境变量都是可见的。但是子进程创建的全局环境变量对父进程并不可见。

设置全局环境变量只需要在设定了环境变量后将其导出,使用export即可完成。例如:

1
2
3
4
echo $tttt

tttt=233
export tttt

此时tttt就是全局环境变量了。注意:在子shell中修改全局环境变量甚至是试图重新定义并导出全局变量对于父进程中的定义都是无效的。

删除环境变量

例如:

1
unset tttt

注意:如果只是在子shell中对全局环境变量进行删除,那么父shell中的shell并不会被删除

什么时候应该使用$?

如果要用到变量,例如声明,调用,需要用上$,而如果只是操作变量,例如赋值,导出,删除则不需要\$

设置环境变量

使用以下环境变量查看当前环境变量:

1
echo $PATH

使用以下命令添加一个目录到环境变量中:

1
PATH=$PATH:/your path

一般来说需要使用以下命令使刚刚的添加生效:

1
source .bash_profile

注意:这样添加的环境变量只是临时的,退出shell后就会失效