2、常用的命令
(1)、安装软件和卸载软件
安装:sudoapt install 软件名
卸载:第一种:sudoapt remove 软件名
第二种:sudoapt --purge remove 软件名
这两种的区别在于第一种只是仅仅的卸载软件,而对于该软件的配置文件还是会保存在系统里
第二种方式不仅会把软件卸载,还会把该软件相应的配置文件等等相关的文件删除。
(2)、apt命令(一般都会在apt前加sudo)
apt install 软件名 安装一个软件
apt remove 软件名 卸载一个软件(保留该软件的配置文件)
apt --purge remove 软件名 卸载一个软件(删除该软件的配置文件)
apt update 查看可以进行升级的软件
apt upgrade 升级需要更新的软件
apt autoclean 删除已经删掉的软件
apt clean 同上面,但是这个会把安装的软件的备份也删除掉
apt dist -upgrade 将系统升级到新版本
apt autoclean 定期运行这个命令可以删除那些已经卸载的软件包的.deb文件
(3)、cd命令
cd ~ 回到家目录(/home/luckyboy/)
cd / 回到根目录(/)
cd .. 回到上一级目录
cd - 切换到前一个目录
cd /目录名 进入下一目录
(4)、mkdir命令
mkdir 目录名 创建一个目录
mkdir -p 多层目录(目录1/目录2/目录3/...)
(5)、touch命令
touch 文件名 创建一个文件
(6)、rm命令
rm 文件名(删除普通文件)
rm -rf 文件夹名 (递归删除文件夹和文件,多层文件夹也同样删除,r表示将参数中列出的全部目录和子目录均递归的删除,f表示忽略不存在的文件)
(7)、mv命令(剪切或者重命名)
mv 源文件 目标文件
(8)、cp命令
cp 源文件 目标文件
cp -r 源文件夹名/* 目标文件
(9)、ls命令
ls 列出文件
ls -i 列出文件,并且把文件的inode信息也列出来
ls -l 列出文件的详细信息
ll 是ls-l的缩写
ls -a 列出所有的文件,包括隐藏文件
(10)、查看文档的命令
cat 文件名 查看文档的所有内容
cat -n 文件名 查看文档的所有内容,但是前面加了行号
head 文件名 查看文档的前10行内容
head -n(整数数字) 文件名 查看文档的前n行内容
tail 文件名 查看文档的后十行内容
tail -n(整数数字) 查看文档的后n行的内容
(11)、软硬链接
ln -s 源文件名软连接名 创建软连接
ln 源文件名硬链接名 创建硬链接
(12)、重定向
标准输入0 标准输出1 错误输出2 所有输出&(即包含标准输出和错误输出)
> 覆盖保存到文件中(默认为1,即默认为标准输出)
>>追加保存到文件中
ls,head tail,cat 等都可以重定向到文件中
ls -l > haha.txt 把ls-l 输出的内容重定向到haha.txt文件中,cathaha.txt的内容同ls-l在终端的输出的一样
>haha.txt 为空输出,cat haha.txt 后输出为空
(13)、管道命令(也就说,执行完一个命令之后,接着执行另一个命令,但是,前一个命令执行输出的结果,是后一个命令的输入,中间用|隔开)
命令1|命令2|命令3|命令....
ls -l|grep "linux"|grep "linux03.odt"
(14)、新建用户组
sudo group 组名
修改用户所在的用户组
sudo usermod -g 组名用户名
强制设置某个用户所在的组
sudo usermod -G 组名用户名
(15)、umask设置
目录默认的最大权限为777,文件默认的最大权限为666
umask的值为=(目录/文件)最大权限-(目录/文件)的权限
umask的默认值为002
如果需要设置umask的默认值,需要进入~/.bashrc中在最后面添加 umask数值(最大为777/666)
(16)、特权位
对某个命令文件设置了特权位后,不管哪个用户执行该命令,进程的有效身份都是该命令文件本身的拥有者身份或者拥有组身份一样,跟执行者无关。
u+s只能针对可执行文件(命令和程序)来设定
g+s既可以对可执行文件(命令和程序)来设定,如果g+s对目录来设定,那么在该目录下直接创建文件、创建目录,这些文件或者目录的所有组就会自动继承该目录的所有组。
设置特权位sudo chmod u+s /bin/touch 将touch命令的特权位改为root
清楚特权位sudo chmod u-s /bin/touch
(17)、粘贴位
粘贴位是为了在分享某些文件夹的时候,让某些用户能在该文件夹中进行文件的添加和删除,只能修改和删除自己所创建的文件,对于其他用户的文件只能进行查看的作用。
为某个文件夹设置粘贴位:chmodo+t 文件夹的路径
进行查看该文件夹的权限ll
会看到九位权限位为rwxrwxr-t(该权限受umask的影响),如果要实现同组用户能够进行创建、修改和删除自己创建的文件以及查看别人的文件,则需要把权限rwx改为r-x,因为如果同组用户的权限为rwx,则粘贴位不起作用。
(18)、进程管理
1、查看进程
ps(查看当前终端正在运行的进程) ps -aux和ps-ef 都是查看当前系统所有正在运行的进程 ps-aux|grep "查找的关键字" 查找某个进程
top(终端任务管理器)q 退出 h帮助 k杀进程 空格-->实时刷新当前任务列表
pstree(输出进程树) pstree -p |grep "查找关键字"查找与关键字对应的进程
2、结束进程:kill killall
kill -15 PID(PID是进程的标识符,是先关闭和其有关的程序,再将该进程关闭)
kill -9 PID(是不顾后果的强制终止)
killall -9 进程名
killall -15 进程名
3、给对应进程组发信号
kill -15 -PID 进程组PID为父进程的PID
给本进程组发信号:kill -9 0
给所有进程发信号:kill -9 -1
4、查看端口:
losf -i:端口号
kill -9 pid号
或者 netstat -aux|grep 端口号
(19)、权限管理(u为文件或者文件夹的所属用户,g为与所属用户为同一个组的其他用户,o为其他用户)
在终端执行 ll,输出的内容中第一个字段的九个字符代表权限:rwxrw-r--
前三个为该文件或者文件夹的所属用户的权限,中间三个为与所属用户同一个用户组的其他用户,后三个为其他用户的权限
r为读权限,w为写权限,x执行,-表示没有对应的权限
修改所属用户权限为可读可写可执行 chmodu=rwx 文件名
修改所属用户权限为可读可写可执行,用户组为只读,其他用户没有权限
chmod u=rwx,g=r--,o=--- 文件名
给所有的用户添加执行权限 chmod +x 文件名
权限的二进制表示:
--- 000 --x 001 -w- 010 r-- 100 -wx 011 r-x 101 rw- 110 rwx 111
修改所属用户权限为可读可写可执行,用户组为只读,其他用户没有权限
chmod u=rwx,g=r--,o=--- 文件名或 chmod 740 文件名
修改目录及目录内文件或子目录的权限
chmod权限 dir/ -R
修改文件或者文件夹所属的用户和组:chown
格式:sudo chown 所属用户名:所属用户组文件/文件夹名
(20)、用户管理
用户分类:(id查看)
每个用户对应一个数字,此数字叫UID
UID=0代表超级管理用户
UID>0&& UID<500/1000 为系统用户
UID>500/1000为普通用户
查看当前登录用户的信息:id
查看指定用户的信息:id用户名
添加用户:sudo adduser 新用户名
删除用户:
如果删除用户的时候,提示进程在运行,则用kill-9 进程号进行停用
先删除了用户,但保留家目录,则再用userdel删除此用户的时候则无效,直接用rm删除家目录即可
sudo userdel 用户名
删除用户,但不删除用户家目录
sudo userdel -r 用户名
删除用户,也删除用户家目录
切换用户:su 用户名
修改密码:
本用户修改密码:passwd
超级管理员用户修改密码:sudo passwd 用户名
用户配置文件:
/etc/passwd 保存用户信息
man 5 passwd 查看对passwd编辑的帮助文档
/etc/shadow 保存用户密码信息
man 5 shadow 查看对shadow编辑的帮助文档
/etc/group 保存组信息
man 5 group 查看对group编辑的帮助
/etc/gshadow保存组密码信息
man 5 gshadow 查看对gshadow编辑的帮助
(21)、配置文件 ~/.bashrc
~/.bashrc为脚本可执行文件,即文件内容为执行的命令
bash启动时自动执行~/.bashrc
改完配置文件重启bashrc才能生效
如果想要立即生效:
source ~/.bashrc
~/.bashrc丢失的解决方法:
bashrc模板文件存储在/etc/skel/
sudo cp /etc/skel/.bash* /home/用户名/
sudo chown 用户名:组~/.bash*-R
(22)、环境变量
环境变量是为了提高访问操作系统环境信息的效率
env 列出当前进程的环境变量
创建环境变量:
export环境变量名=值
为了区别普通变量,环境变量建议全大写
环境变量和普通变量的区别:
子进程会复制父进程的环境变量、、
运行脚本默认开启新子进程去执行
使用source运行脚本是使用本进程去执行
查看环境变量 echo$PATH
添加PATH环境变量(临时),可用exportPATH=/usr/local/pycharm/bin:$PATH 上述方法的PATH在终端关闭后就会消失
永久添加环境变量(影响当前用户)
#sudo vim ~/.bashrc
export PATH="/usr/local/pycharm/bin:$PATH"
source ~/.bashrc之后才能生效
永久添加环境变量(影响所有用户)
#sudo vim /etc/profile
在文档最后,添加:
export PATH="/usr/local/pycharm/bin:$PATH"
保存,退出,然后运行:
#source /etc/profile
(23)、打包压缩
tar -cf 生成的包名打包的文件或目录(万能的打包命令)
tar -cjf 生成的压缩包名压缩的文件或目录
tar -czf 生成的压缩包名压缩的文件或目录
linux的万能解包命令:
tar -xf 压缩包名-C解压路径
(24)、查找命令
which
查找$PATH(echo$PATH)变量指定的目录里的命令,which用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which户在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which ifconfig 查出ifconfig命令的路径
whereis查找命令显示命令更多的信息
whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis ifconfig 查找命令的路径和帮助文档
whereis -b ifconfig 查找有关于ifconfig命令的二进制文件
whereis -m ifconfig 查找有关于ifconfig命令的说明文件
whereis -s ifconfig 查找有关于ifconfig命令的源代码文件
locate 文件查找命令
特点:
1、不是实时查找的,所以查找的结果不准确
2、查找的速度很快
3、是根据数据库查找的(/var/lib/locatedb),Linux系统自动创建这个文件,并且每天更新一次,所以locate命令查不到最新变动过的文件,如果想要实现实时查询,可以在查找文件前执行sudoupdatedb 手动对数据库进行更新。
locate haha 查找带haha的文件,如果haha是刚刚创建的,则不能查询,需要更新后才能查询。
sudo updatedb 手动更新查找数据库,然后再查找就会很快找到刚刚新建的hello文件
find文件查找命令
1、与locate的区别:find功能最强大,但查找速度慢(原因:find会扫描整个磁盘进行查找)
2、find的基本命令
(1)、一般查询
find /etc -name grub.conf 查找/etc目录下的grub.conf文件
find / -name "*.conf" 查找/下所有.conf文件
find / -iname grub.conf 查找/目录下的grub.conf文件,忽略大小写
(2)、控制多级目录查询
find / -maxdepth 2 -name grub.conf 可以使用-maxdepath参数来控制查找的层次,就是说只查当前目录和子目录,最多查2级目录
find / -mindepth 2 -name grub.conf 最少查二级目录
(3)、类型查找
find /etc -type d 查找/etc/下所有的目录
find /etc -type f 查找/etc/下的所有普通文件
find /etc -type l -name *.conf 查找/etc/下软链接文件是.conf结尾的文件
find /etc -type s 查找/etc/下所有socket文件
find /etc -type c 查找/etc/下的所有字符设备文件
find /etc -type p 查找/etc/下所有管道文件
find /etc -user root 查找/etc/所属用户是root的文件
find /etc -group root 查找/etc/所属用户组是root的文件
find /etc -uid 500 查找/etc/下uid是500的文件,和-user类似d
find /etc -gid 500 查找/etc/下gid是500的文件,和-group类似
find /etc -nouser 查找没有所属用户的文件
find /etc -nogroup 查找没有所属用户组的文件
find /etc -perm 777 -type d 查找/etc/下权限为777的目录
find . -perm 111 查找权限是111的文件
find . -size +10M 查找当前目录下大于10M的文件,单位可以有K,M,G,b等
find / -size -2M 查找根目录下少于2M的文件
find / -mtime 1 查找根目录下1小时以前修改的所有文件
find / -mtime +2 查找根目录下2个多小时以前修改的所有文件
find / -mtime -3 查找根目录下最近3小时内修改的所有文件
find / -atime 1 查找根目录下1天以前访问或读过的所有文件
find / -atime -1 查找根目录下最近1天内读过或访问的文件
find / -ctime -3 查找根目录下最近3天内状态发生改变的文件
find / -cmin -3 查找根目录下最近3分钟内状态发生改变的文件
find / -empty 查找根目录下所有空白文件或者空目录
find / -false 查找根目录下总是错误的文件
find / -false -exec ls -l {} \; 查找根目录下总是错误的文件并且用ls-l查看
(25)、字符处理工具
wc 统计命令
wc -c /etc/passwd 统计/etc/passwd文件里有多少个字符
wc -w /etc/passwd 统计/etc/passwd文件里有多少个单词
wc -l /etc/passwd 统计/etc/passwd文件里有多少行
sort排序命令
sort -n /etc/passwd 按数据排序
sort -u /etc/passwf 去除重复行显示
sort -r /etc/passwd 反向排序
sort -n -k5 /etc/passwd 指定第五列进行按数字排序
sort -t:-n -k5 /etc/passwd 以:为分隔符指定第五列按数字排序
cut字段截取
cut -f1 /etc/passwd 只显示第一列数据
cut -f1,2,5 /etc/passwd 只显示第一列,第二列,第五列的数据
cut d: -f1,2,5 /etc/passwd 以:为分隔符只显示第一列,第二列,第五列的数据
uniq 去除文件中相邻
uniq -u /etc/passwd 只显示没有被重复过的行(是指相邻的)
uniq -d /etc/passwd 只显示被重复过的行(是指相邻的行)
uniq -i /etc/passwd 忽略大小写去除文件中相邻的重复行的重复行
uniq -c /etc/passwd 统计相邻重复行数
diff 比较文件差异
diff -B /etc/passwd passwd 忽略空行造成的不同
grep 搜索文本
grep -i hello /etc/passwd 在/etc/passwd文件里找hello并且忽略大写查找
grep -n hello /etc/passwd 在/etc/passwd文件里找hello并给结果排号,如果是对目录搜索可以显示在文件里出现的行号
grep -w hello /etc/passwd 在/etc/passwd文件里找完全匹配hello单词的行
grep -v hello /etc/passwd 显示出在/etc/passwd文件里没有hello的行
grep -r hello /etc/ 在etc目录里所有文件里找hello显示
tr 替换字符
cat /etc/passwd | tr a b 查看/etc/passwd文件并把里面的a替换成b
tra -z A-Z < /etc/passwd 把/etc/passwd文件里的小写全转成大写
3、git的使用
安装:
sudo apt install git
配置:
git config --global user.name “用户名”
git config --global user.email “邮箱”
创建仓库:
mkdir learngit(自定义的仓库名)
cd learngit
初始化:
git init(都要进行初始化)
添加文件或者文件夹,当add或者commit的时候,文件夹后面加不加/效果是一样的
git add <file>
git commit <file> -m ‘说明’
比较文件的不同
git diff filename 比较git文件区和本地工作区同一个文件的不同之处
查看版本(版本是指项目的版本)
git log 可以加 --pretty= oneline ,减少信息的输出
git reflog 查看之前的版本
回退版本(工作区必须是干净的)
git reset --hard HEAD^ 回到上一个版本
git reset --hard HEAD^^ 回到上上一个版本
如果版本很多,可以用gitreset --hard HEAD~n(n是一个整数),也可以用gitreset --hard 版本号(通过git log可以查找)
git checkout -- file(当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,注意:--与文件名 中间一定有个空格)
git checkout -- *(下载全部的内容)
删除文件
rm文件名
要从版本库里删除文件:git rm 文件名
git commit -m “说明”
分支:
创建分支并切换到新创建的分支:
git checkout -b dev(相当于gitbranch dev; git checkout dev)
打开其中一个文件,例如:hello.txt,在里面随便添加一些内容,然后执行:
git commit -m “说明”
git checkout master
在master分支里查看hello.txt,会发现在分支dev中对hello.txt添加的内容在master中不没有,
如果想要看到在dev中修改的内容,则需要进行合并,即执行以下命令(必须切换到master中才能进行合并):
git merge dev
分支冲突:
假如master中有文件hello.txt,内容为两行,分别如下:
今天的天气很好
适合出去郊游
当我们切换到dev分支,对hello.txt的内容修改如下:
今天的天气很好
适合进行户外运动
此时master中的hello.txt的内容与dev中的内容就已经不同了,
如果此时进行合并,会出现错误的,只有将两个分支的内容改为一致才能进行合并,
但是如果在dev中对hello.txt进行追加如下:
今天的天气很好
适合出去郊游
也适合户外运动
此时如果进行合并,是可以合并成功的。