Vitor Roque scored his first goal for Barcelona in their first match since manager Xavi announced he was leaving at the end of the season.
Joao Cancelo’s cross with the outside of his boot was headed home in the 63rd minute by substitute Roque, who joined the action just a minute earlier.
Osasuna defender Unai Garcia was sent off four minutes later after fouling 18-year-old Brazilian Roque.
Barca moved up to third, eight points behind La Liga leaders Girona.
It was a much-needed win for boss Xavi, who revealed his exit plans after Saturday’s 5-3 home defeat by Villarreal.
His side suffered an early blow when forward Ferran Torres tearfully went off injured after five minutes.
Jules Kounde headed over the bar twice from corners in the first half as the hosts dominated.
After Roque’s goal, 12th-placed Osasuna had chances to level despite having Unai Garcia dismissed for a second booking.
Raul Garcia’s low shot hit the woodwork with 15 minutes left, while Barca keeper Inaki Pena also made a superb flying save to deny Jon Moncayola.