title : Linux 101 author: zvevqx published: 2025-11-22 cat: linux desc: ws ... learn more about `ssh` -> [https://www.ssh.com/ssh/](https://www.ssh.com/ssh/) - **linux** : start terminal ctrl + alt + t ~~~ bash ssh -p portnumber pi@ipaddress ssh user @ distant_server.address : connection_port (default to 22 ) ssh pi@192.168.1.24 ~~~ >⚠️ linux user : > to copy inside the `terminal` : ctrl + shift + c > to paste inside the `terminal` : ctrl + shift + v - **Osx** : start terminal ( 🍎 + space and search for `terminal`) ~~~bash ssh -p 55 pi@er401.duckdns.org ~~~ - **Windows** : - install ```putty``` - got to [putty download page](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) - `putty` will give ~~windows~~ `ssh` ability ... - connect to: - server: ```ipadresse``` - port ```22``` - user `pi` --- --- ## create your new `home` ### first 1. *create a User* ``` sudo useradd ``` 2. *add user to groups and privilege* - add user to ```admin``` list ```bash sudo usermod -a -G sudo yourUserName ``` - change shell to ```zsh``` ( optional ) ```bash chsh -s /bin/zsh ``` - exit user ```pi``` ```bash exit ``` 3. *reconnect with your `username` and `password`* ```bash ssh YOUR_USER_NAME@ADRESSEIP ``` 4. welcome to your new `home` 1. your *home folder* is in `/home/yourUserName` 1. hint : you can check where you are with the command `pwd` (**P**rint **W**orking **D**irectory) 2. learm about linus folder structure -> [learn more](https://linuxhandbook.com/linux-directory-structure/) --- # DO SOME STUFF ## general `cli` commands ### navigate - `.` the current directory ( folder) - `..` the parent directory - `man` : view the **man**ual of a command ( ex : ` man ls` ) - `pwd ` : Use the **pwd** command to find out the path of the current working directory (folder) you’re in - `cd` : **c**hange **d**irectory to go inside a new directory - `ls` : **l**i**s**t the current directory content - `cp` : to **c**o**p**y documents / folders - `mv`: to **m**o**v**e documents / folder - `mkdir`: **m**a**k**e **dir**ectory create a folder - `touch`: create an empty file - `rm` : **r**e**m**ove folder and files ***⚠️*** no return possible / read and think twice before smashing enter - `find`: to find / search for files ### system stuffs - `sudo` : **s**uper **u**ser **do** get super privileges to do system stuff ***⚠️*** `sudo` can do **ANYTHING** , even destroy system - `du` : **d**isk **u**sage ... to see .. disk usage ( use it with `-h` argument for human readable output ) - `top` and `htop` : to monitor system ( application / ram / cpu usage) - `killall` : kill a process by name e:`killall firefox` will quit and kill all *firefix* process - `uname ` : view system information ( kernel / linux version ....) - `sudo reboot` : restart computer ( must be `sudo` to execute ) - `sudo halt` || `sudo shutdown now` : shutdown computer ( must be `sudo`) ### general help - ctrl + r : search in history for already used commands - ctrl + c : **kill** running command -------- # getting started with python ==underconstruction== ![uc](https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.pinimg.com%2Foriginals%2F0b%2F12%2Fd9%2F0b12d9ff85bf365bc7acde04a992d938.gif&f=1&nofb=1) just some code to try ~~~python import time import math x = 0 try : while True: x = x+1 time.sleep(0.5) print(" la vlaeur de x est de = {}".format(x)) if x>100: x=0 except KeyboardInterrupt: print('Hello user you have pressed ctrl-c button.') ~~~ ## create a simple chat with python [https://python.plainenglish.io/create-a-basic-lan-chat-room-with-python-f334776bf70c](https://python.plainenglish.io/create-a-basic-lan-chat-room-with-python-f334776bf70c) fixed code ===client=== ~~~python import socket import threading my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) PORT = 8000 ADDRESS = "localhost" # Same as "127.0.1.1" my_socket.connect((ADDRESS, PORT)) nickname = input("Choose your nickname : ").strip() while not nickname: nickname = input("Your nickname should not be empty : ").strip() def thread_sending(): while True: message_to_send = input("your message :") if message_to_send: message_with_nickname = nickname + " : " + message_to_send my_socket.send(message_with_nickname.encode()) def thread_receiving(): while True: message = my_socket.recv(1024).decode() print(message) thread_send = threading.Thread(target=thread_sending) thread_receive = threading.Thread(target=thread_receiving) thread_send.start() thread_receive.start() ~~~ ===server=== ~~~python import socket import threading my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) PORT = 8000 ADDRESS = "0.0.0.0" broadcast_list = [] my_socket.bind((ADDRESS, PORT)) def thread_accept(): while True: my_socket.listen() client, client_address = my_socket.accept() broadcast_list.append(client) start_listenning_thread(client) def start_listenning_thread(client): client_thread = threading.Thread( target = listen_thread, args = (client,) #the list of argument for the function ) client_thread.start() def listen_thread(client): while True: message = client.recv(1024).decode() if message: print(f"Received message : {message}") broadcast(message) else: print(f"client has been disconnected : {client}") return def broadcast(message): for client in broadcast_list: try: client.send(message.encode()) except: broadcast_list.remove(client) print(f"Client removed : {client}") thread_accept() ~~~ -------- ## create folder in ```apache``` server wft is `apache` : > apache is a http web server [wiki page](https://en.wikipedia.org/wiki/Apache_HTTP_Server) there other solution like [https://www.lighttpd.net/]{https://www.lighttpd.net/} or the popular [https://nginx.org/en/](https://nginx.org/en/) `apache` is well documented and often the one you'll find on a web server service 1. create folder first with your username ```bash sudo mkdir -p /var/www/html/$USER ``` 2. change ownership to your user ```bash sudo chown -R $USER:$USER /var/www/html/$USER ``` 3. make sure permissions on ```www``` are ok ```bash sudo chmod -R 755 /var/www ``` 4. create your first webpage to serve ```bash touch /var/www/html/$USER/index.html ``` 5. put something in it ```bash nano /var/www/html/$USER/index.html or vim /var/www/html/$USER/index.html ``` 6. content example ~~~html Welcome to my page

📡 Success!! 📡

~~~ ## mjpeg-streamer ( video server ) ```https://github.com/jacksonliam/mjpg-streamer``` [github project page](https://github.com/jacksonliam/mjpg-streamer) ***⚠️*** don't follow the instructions during this class ( installation already done ) - after install - add your user to `video` group ~~~bash usermod -a -G video $USER ~~~ this will give your user to access camera equipement - logout and back in - go have a look - start server ~~~bash cd ~/mjpg-streamer/mjpg-streamer-experimental && ./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so" ~~~ - go check ~~~bash #in a local network http://IP_FOR_THE_RASPBERRY_PI:8080/?action=stream #in that case with dyndns service ( duckdns ) and port redirection ( 666 -> 8080) http://er401.duckdns.org:666/?action=stream ~~~