[Linux+Ubuntu环境]Ubuntu配置和linux指令笔记
Ubuntu使用中踩到的坑
Ubuntu 18.04(自己的电脑)/16.04(腾讯云服务器)
指令回顾
kill
这个可不是杀死进程的命令啊(虽然可以)
man kill
看一下说明这个是"send a singal to a process",只是发送一个信号量给某个进程。
信号和操作系统里面学的信号量(semaphore)不一样,但我忘了,这里大概就是一个信息代号吧。
信号机制(signal):
signal,又简称为信号(软中断信号)用来通知进程发生了异步事件。
一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。
Linux中系统调用函数为signal()
信号量(semaphore):
Linux内核的信号量用来操作系统进程间同步访问共享资源。
语法:kill [options] <pid> [...]
<pid>
: 进程号 通过ps或者top查看
选项options:
-<signal>
: 指定发送给某个进程的信号,名称或者号码都可以- -l: list names and number of all signals
用法:
kill -l
查看有哪些信号可以发送,-9是杀死进程- 1)SIGHUP: 启动被终止的程序,可以让该进程读取自己的配置文件,类似重启(?没试过)试了一下,感觉不对啊,提示的是Hangup挂起进程?
- 2)SIGNT: 相当于前台 ctrl+c中断
- 9)SIGKILL: 强制终端一个程序,会留下半成品
- 15)SIGTERM: 正常的方式terminal这个程序,后续会完成,但是如果程序已经出问题,这个信号也没用
- 19)SIGSTOP: 相当于ctrl+z来暂停一个进程
- 更多的
man 7 signal
了解
- 常用的就是 -15 -9
kill -15 pid
发出这个信号量让进程正常退出,清理并释放资源,默认kill pid
就是发送15信号kill -9 pid
强制结束,会留下文件残余
history
展示历史记录和执行过的命令,history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件(这个文件应该是~/.bash_history)。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!
执行指定序号的历史命令。
history [option] [args]
选项:
- -c 清空当前历史命令
- -a 将历史缓冲区中的命令写入当前历史命令缓冲区?
- -r 历史命令文件中的命令读到当前历史命令缓冲区
- -w 将历史命令缓冲区写入历史命令文件
参数:
- n 打印最近n条历史指令
使用! 执行历史命令,注意不要有空格
!2010
执行第2010条历史指令
!!
执行上一条
scp
好像是最近最频繁的指令了,通过ssh传送文件/文件夹到指定服务器上,或者将目标服务器的文件拷贝到本地
1.传送
scp -r path username@xx.xx.x.x:/path/path
2.copy
将 文件/文件夹 从远程 Ubuntu 机拷至本地(scp)
scp -r username@192.168.0.1:/home/username/remotefile.txt /localpath
chmod
修改文件权限,我感觉应该是change mode的缩写,因为在linux c里面的open函数有一个参数叫mode是文件权限
先说明一下文件有哪些权限:
- r 读: read 二进制00000100 十进制为4
- w 写: write 二进制00000010 十进制为2
- x 执行: execute 二进制0000001 十进制为1
同样有三种用户群体可以根据权限使用文件:
- 文件所有者: 最高位表示
- 群组用户: 中间一位
- 其他用户: 最低位
所以三种用户的权限可以用三个连续的十进制数来表示 e.g. 777,这个7是怎么来的呢
网上说明这个7是,可读可写可执行加起来的,但是我觉得呢,这个是三个数值或起来的r | w | x
,不知道谁对谁错,反正结果知道了就行了。
所以一般看到的chmod 754
就说明,除了文件所有者以外的两个用户类别的权限分别是可读可执行,只读。
知道文件权限之后呢,我们讲讲怎么用这个指令去change mode。
chmod [mode] [filename]
mode参数:
- u,User 即文件或目录的拥有者
- g,Group 即文件或目录的所属群组
- o,Other 除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围
- a,All 即全部的用户,包含拥有者,所属群组以及其他用户
- r 读取权限,数字代号为“4” 即 “100”
- w 写入权限,数字代号为“2” 即 “010”
- x 执行或切换权限,数字代号为“1” 即 “001”
- -
不具任何权限,数字代号为“0” 即 “000”
文件名选项:
- -c, --changes
- -f, --silent, --quiet 不显示错误信息
- -R, --recursive 递归处理,处理文件夹
- -v, --verbose 显示执行过程,verbose就是一堆屁话的感觉
- --reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同(不太理解)
用法:
- 直接指明三种用户的权限 例如
chmode 777 file
- 修改/指定/删除某一种用户的权限:
- 身份 + 权限 例如
chmod g+x file
增加执行权限 - 身份 - 权限 例如
chmod g-rw file
删掉用户组的读写权限 - 身份 = 权限 例如
chmod u=r file
指定用户有读取权限
- 身份 + 权限 例如
p.s. : 不要和chown这个指令搞起来哦
cal
查看日历
cal
当前月
cal [year]
某一年的年历
cal [month] [year]
某年某月的月历
cd
最简单最使用的命令之一了
change directory
mv
move指令
妙用:修改文件夹的名字
mv old/ new
将旧的文件夹所有东西move到新的文件夹来实现效果
pwd
print the workplace directory
ls
to exhibit the files of the current directory
ls -a
show all files including hidden ones
ls -l
show files with details, use a long listing format
参数补充说明:
- -h: human-readable ?人类可读性?和-l或者-s配合显示文件夹的大小多少K,多少G,就是多了单位K、G这样的,人就可以读懂了
- -i: inode 也就是文件在操作系统中的索引号,唯一标识
借着ls命令对Linux文件属性做一些笔记
命令ls -lih
之后展示的文件格式分别是
inode | 文件类型和权限 | 硬连接个数 | 文件属主 | 文件属组 | 文件或目录的大小(目录只显示4KB) | 文件修改时间(默认月日时分) | 文件名称
这篇关于文件属性和linux系统讲的很细致
文件类型和权限:
- 第一位为文件类型
- 后9为每三位为一组,一共三组,分别表示用户,组,其他用户的权限,rwx分别表示read,write,execute
ll
等于 ls -al
mkdir
在当前目录下创建一个文件夹d
chown
先去有道查了一下,中文解释为“修改文件目录属主”....好吧。其实应该是change owner这个缩写。。。这个命令主要用于给用户权限,可以把文件仅仅是root用户的权限给其他用户
语法:chown [-cfhvR] user [:group] file
参数:
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件(recursively)
用法:
chown coyotewaltz file1.txt
chown -R coyotewaltz /abc
grep
用于查找文件中符合条件的字符串
语法:grep [-abcdEFGhHi...] [-A<显示列数>] [-B<显示列数>]..
语法有点看不懂
用法:
(1) 查找含有值定的字符串的文件,并打印所在行
$ grep aaa *file
(后缀有file字样的文件)
(2)一般跟在查找结果的后面grep filename
管道符 |
用来分隔命令,管道符左边的命令输出会作为右边的输入
例:
cat /etc/passwd | grep /bin/bash | wc -l
ps -x | grep mysql
curl
curl是Linux中利用url规则的文件传输工具
语法:curl [option] [url]
常见参数:
-o/--output 把输出写到该文件中
-s/--silent 静音模式。不输出任何东西
-T/--upload-file <file> 上传文件
基本用法:
(1) 访问网页
curl https://www.linux.com
然后Linux网站的html代码就出现在终端里面了,可以测试是否可到达一个网站
(2) 保存访问的网页
(2.1) 用重定向功能(>>是linux重定向功能)
curl https://www.linux.com >> linux.html
(2.2) [option] -o(小写o)来保存
curl -o linux.html https://www.linux.com
(2.3) [option] -O(大写O)保存网页中某个文件
curl -O https://www.linux.com/hello.sh
查看端口占用情况
lsof
list open files 列出当前系统打开文件的工具
lsof -i:[port]
netstat
netstat -tunlp | grep [port]
参数说明:
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
关闭防火墙ufw
关闭
sudo ufw disable
开启
sudo ufw ensable
查看状态
sudo ufw status
ps:需要重启生效
环境配置
Golang
go语言配置,这是我一直很想学的语言
从官网下载源码(需要FQ) wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
然后解压,将go文件夹移动到/urs/local中,然后在/etc/profile最后加入以下几行
export GOROOT=/usr/local/go
# GOPATH is the location of your work directory. For example my project directory is ~/Projects/Proj1 .
# Now set the PATH variable to access go binary system wide.
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go # 我在$HOME下新建了一个/go
export GO111MODULE=auto
export GOPROXY=https://goproxy.cn,direct
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
最后source /etc/profile
查看go版本go version
是1.13.1即可
nodejs&npm
nodejs和npm环境的配置是让我最头疼的,也是我这次重装Ubuntu的原因(之前的npm环境乱了)。不过这次找到了一个非常方便的方法,赶紧记录下来
命令:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
从node的源码github上把对应版本的安装文件下载下来(这里下载的是10.x的版本),然后通过bash
执行(?)脚本,看终端中的提示好像是直接把这个repository安装来了,然后顺便执行了apt-get update
...最后提示你可以通过
sudo apt-get install -y nodejs
来安装node.js 10.x和npm了,可能还需要其他环境(这里不多说了)
安装之后通过
node --version
npm --version
查看版本
都是最新版本!ok,大功告成。
附:彻底删除nodejs和npm
执行以下命令
- 卸载
sudo apt-get remove --purge nodejs-legacy
sudo apt-get remove --purge nodejs
sudo apt-get remove --purge npm
sudo apt-get autoremove
- 删除相关目录
rm -r -f /usr/local/bin/npm
rm -r -f /usr/local/lib/node-moudels
查找npm的所有文件,这里可能要sudo
find / -name npm
然后通过rm
删除所有文件
Anaconda3
jupyter notebook
添加已有的虚拟环境
在base环境中安装nb_conda这个插件
在所需要添加的环境中conda install ipykernerl
如果还不行就在环境中安装jupyter notebook
MySQL
安装
开启外部访问
登录之后,在mysql数据库中看一下目前的host,user,authentication_string
select host, user, authentication_string from user;
所有的host应该都是localhost,然后新增一个root用户,使得所有地址(%)都可以访问,密码为password(根据自己情况)
grant all privileges on *.* to 'root'@'%' identified by 'password';
这一步之后,mysql.user这张表中会多一行,也就是有新的用户root了,这个root用户是可以对所有库和所有表进行所有操作的,很危险。
如果想指定权限和数据库以及具体表的话,可以参照
grant select, insert, update, delete on major_db.* to 'major'@'%' identified by 'password'
记得数据库名称加引号.....
刷新权限(不需重启服务)
flush privileges;
最后因为是mysql5.7版本,在外面的配置文件中/etc/mysql/mysql.conf.d/mysqld.cnf注释掉bind-address,重启数据库服务,搞定。
外部登录:
mysql -h ip -u user -P port -p
查看和修改默认端口
1 查看
show global variables like 'port';
2 修改端口
在/etc/mysql/mysql.conf.d/mysqld.cnf配置文件中修改端口,重新启动mysql服务即可。
然后在Mysql中查看一下是否修改成功。
数据库编码查看和修改
1.查看
show variables like 'character_set_database';
show variables like '%char%';
2.修改
找到配置文件mysqld.cnf
,应该在/etc/mysql/mysql.conf.d里面,在[mysqld]下写character-set-server=utf8或者utf8mb4,然后重启服务service mysql restart
,检查一下是不是改了
数据库的备份与恢复
mysql数据库备份整个库shell:
mysqldump -u root -p db > db.sql
mysql恢复数据库:
mysql -uroot -p db < db.sql
ps:可以远程恢复了
mysql -h xx.xxx.xx.xx -P 3306 -u root -p db < db.sql
Redis
什么是redis
ubuntu18.04安装redis
参考了这个文安装的
sudo apt-get install redis-server
然后一路ok(这样安装的是redis 4.0.9)
其实发现还有很多文章写的是把源码下载下来手动安装......
修改端口
在/etc/redis文件夹中redis.conf文件修改port,然后重启服务
redis-cli -p 8888
即可
添加和查看密码
进入redis-cli后输入
config set requirepass <密码>
查看config get requirepass
之后登录以后要auth <密码>
flask中报错
MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails......
cli中输入config set stop-writes-on-bgsave-error no
其实好像这样也不好,还是老老实实的重启服务
ubuntu中文乱码
sudo apt-get install language-pack-zh-hans
应用安装
yddict
一个命令行查单词工具
既然是用linux嘛,命令行当然是精髓所在,用命令行查单词太炫酷了。之前用的也是命令行查词,不过忘记叫什么软件了,这次查到一个github上的有道词典命令行app,附上网址Github-yddict 挺佩服的,好像是用nodejs写的,调用有道的接口吗?所以要用npm来安装包,安装完之后就可以在终端里面输入yd <要查询的单词>
。
还可以在 .config/configstore/yddict.json中修改颜色
Typora
另一款markdown的编辑器,比Remarkable好用。
官网下载即可,windows平台也支持
Remarkable
一款markdown的编辑器,也就是我正在写markdown的软件。
下载地址Remarkable ,点击Download.deb下载安装即可。
Postman
很简单官网直接下载压缩包,解压之后打开即可用。
ps:如果打不开,用命令行去运行,会提示错误的,根据错误安装所需要的包即可。
f.lux
这是一个自动调节色温的app,根据地理位置判断日照强度调节屏幕色温。确实这段时间使用ubuntu感觉到眼睛很累.....
安装:
sudo add-apt-repository ppa:nathan-renniewaldock/flux
sudo apt-get update
sudo apt-get install fluxgui
然后打开fluxgui,输入经纬度,那个网站需要科学的上网方式。然后选择光线强度,勾选开机自启,然后就ok了。
不过比较蛋疼的是他真的是自动调节,而我希望他一直是暖色光......
发现ubuntu 18.04其实自带夜间模式。
如何卸载:
sudo apt-get remove fluxgui
sudo add-apt-repository -r ppa:nathan-renniewaldock/flux
Staruml
一款画数据库表的软件,从官网下载了超级无敌久,我准备放在百度云里面
Lantern
一个go语言写的vpn软件
直接github搜索lantern就可以下载安装,没有过多了解,好用就行
Kazam
录屏和截图软件,很小巧,安装直接apt-get即可 GITHUB 里面讲到快捷键
Keyboard shortcuts
SUPER-CTRL-Q - Quit
SUPER-CTRL-W - Show/Hide main window
SUPER-CTRL-R - Start Recording
SUPER-CTRL-F - Finish Recording